- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这是我第一次使用 curve_fit,我还没有找到与我的问题匹配的示例。我的问题是,我是否正确使用 curve_fit 数据格式?如果是,那么我的问题是数学问题,我将不得不更正它(我还没有发现任何错误......)。这是我的代码:
import numpy as np
import math as m
import scipy.optimize as sci
def f4(X,Tx,Ty,Tz,i,j,k):
res=[]
#X looks like [x1,y1,z1,x2,y2,z2....]
for n in range(np.shape(X)[0]/3):
xr=X[n*3]+Tx+m.cos(j)*m.cos(k)*X[n*3]-m.cos(j)*m.sin(k)*X[n*3+1]+m.sin(j)*X[n*3+2]
yr=X[n*3+1]+Ty+(m.sin(i)*m.sin(j)*m.cos(k)+m.cos(i)*m.sin(k))*X[n*3]+(-m.sin(i)*m.sin(j)*m.sin(k)+m.cos(i)*m.cos(k))*X[n*3+1]-m.sin(i)*m.cos(j)*X[n*3+2]
zr=X[n*3+2]+Tz+(-m.cos(i)*m.sin(j)*m.cos(k)+m.sin(i)*m.sin(k))*X[n*3]+(m.cos(i)*m.sin(j)*m.sin(k)+m.sin(i)*m.cos(k))*X[n*3+1]+m.cos(i)*m.cos(j)*X[n*3+2]
res.append(xr)
res.append(yr)
res.append(zr)
return res
xdata2=[998.362,5000.052,99.4,997.862,5000.052,99.4,998.362,5000.052,98.9,997.862,5000.052,98.9]
ydata2=[999.46555,4999.801,99.4,999.112,5000.15455,99.4,999.46555,4999.801,98.9,999.112,5000.15455,98.9]
p0=[1,0,0,0,0,0.8]
popt,pcov=sci.curve_fit(f4,xdata2,ydata2,p0)
它引发:运行时错误:未找到最佳参数:函数调用次数已达到 maxfev = 1400。
根据我的计算,p0 非常接近解。我的代码没问题还是我应该继续寻找数学错误?
如果有人好奇我想找到 3 个平移和 3 个旋转我必须应用到一组点 Xp 以获得一组点 Xr。
感谢任何建议
编辑 1/04 :
我尝试了 unutbu 的方式来改变我的功能:
def f2(X,Tx,Ty,Tz,i,j,k):
res=[]
for n in range(np.shape(X)[0]):
xr=X[n][0]+Tx+m.cos(j)*m.cos(k)*X[n][0]-m.cos(j)*m.sin(k)*X[n][1]+m.sin(j)*X[n][2]
yr=X[n][1]+Ty+(m.sin(i)*m.sin(j)*m.cos(k)+m.cos(i)*m.sin(k))*X[n][0]+(-m.sin(i)*m.sin(j)*m.sin(k)+m.cos(i)*m.cos(k))*X[n][1]-m.sin(i)*m.cos(j)*X[n][2]
zr=X[n][2]+Tz+(-m.cos(i)*m.sin(j)*m.cos(k)+m.sin(i)*m.sin(k))*X[n][0]+(m.cos(i)*m.sin(j)*m.sin(k)+m.sin(i)*m.cos(k))*X[n][1]+m.cos(i)*m.cos(j)*X[n][2]
aux=[xr,yr,zr]
res.append(aux)
res=np.array(res)
return res
我在数组中添加了两个点:
xdata3=np.array([[998.362,5000.052,99.4],[997.862,5000.052,99.4],[998.362,5000.052,98.9],[997.862,5000.052,98.9],[999.112,4999.801,98.9],[999.112,4999.801,99.4]])
ydata3=np.array([[999.46555,4999.801,99.4],[999.112,5000.15455,99.4],[999.46555,4999.801,98.9],[999.112,5000.15455,98.9],[1000.112,4999.801,98.9],[1000.112,4999.801,99.4]])
我尝试了这个功能:
test=f2(xdata3,1,0.00001,0.00001,0.00001,0.00001,0.8)
In [17]:test
Out[17]:
array([[-1891.88925911, 9199.80185261, 198.87092002],
[-1892.73761247, 9199.44317456, 198.87091992],
[-1891.88926411, 9199.80185761, 197.87092002],
[-1892.73761747, 9199.44317956, 197.87091992],
[-1890.4366777 , 9199.91400129, 197.87091663],
[-1890.4366727 , 9199.91399629, 198.87091663]])
也更改了 p0:
p0=[1,0.00001,0.00001,0.00001,0.00001,0.8]
然后我尝试了曲线拟合:
test=f2(xdata3,1,0.00001,0.00001,0.00001,0.00001,0.8)
我有一个不同的错误:
error: Result from function call is not a proper array of floats.
不确定发生了什么,因为我的测试变量看起来很好。
最佳答案
我认为问题完全在于您选择的模型函数。数据根本不适合该模型。
如果您想使用平移和旋转来拟合数据,也许您正在寻找更像 f4
(如下),它是
Xbar
。X-Xbar
将对象移回更靠近原点的位置。X-Xbar
(使用np.dot(R, X-Xbar)
),然后T + Xbar
翻译。 (注意,不像原来的f4
,它也不是按X
翻译的。)
import numpy as np
import scipy.optimize as optimize
from math import cos, sin
def f4(X,Tx,Ty,Tz,i,j,k):
T = np.array([Tx, Ty, Tz])[:, np.newaxis]
X = X.reshape(-1,3).T
Xbar = X.mean(axis=1)[:, np.newaxis]
X = X - Xbar
R = np.array([
(cos(j)*cos(k), -cos(j)*sin(k), sin(j)),
(sin(i)*sin(j)*cos(k)+cos(i)*sin(k),
-sin(i)*sin(j)*sin(k)+cos(i)*cos(k),
-sin(i)*cos(j)),
(-cos(i)*sin(j)*cos(k)+sin(i)*sin(k),
cos(i)*sin(j)*sin(k)+sin(i)*cos(k),
cos(i)*cos(j))])
result = np.dot(R, X) + T + Xbar
return result.T.ravel()
p0=[1,0,0,0,0,0.8]
xdata2 = np.array([998.362,5000.052,99.4,997.862,5000.052,99.4,998.362,5000.052,98.9,997.862,5000.052,98.9])
ydata2 = [999.46555,4999.801,99.4,999.112,5000.15455,99.4,999.46555,4999.801,98.9,999.112,5000.15455,98.9]
popt, pcov = optimize.curve_fit(f4, xdata2, ydata2, p0)
print(popt)
产量
[ 1.17677500e+00 -7.42250000e-02 -4.02305065e-37 -1.28557241e-20
-1.61334110e-20 -7.85398164e-01]
关于python - scipy.optimize.curve_fit 引发运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29370642/
我已经使用 vue-cli 两个星期了,直到今天一切正常。我在本地建立这个项目。 https://drive.google.com/open?id=0BwGw1zyyKjW7S3RYWXRaX24tQ
您好,我正在尝试使用 python 库 pytesseract 从图像中提取文本。请找到代码: from PIL import Image from pytesseract import image_
我的错误 /usr/bin/ld: errno: TLS definition in /lib/libc.so.6 section .tbss mismatches non-TLS reference
我已经训练了一个模型,我正在尝试使用 predict函数但它返回以下错误。 Error in contrasts<-(*tmp*, value = contr.funs[1 + isOF[nn]])
根据Microsoft DataConnectors的信息我想通过 this ODBC driver 创建一个从 PowerBi 到 PostgreSQL 的连接器使用直接查询。我重用了 Micros
我已经为 SoundManagement 创建了一个包,其中有一个扩展 MediaPlayer 的类。我希望全局控制这个变量。这是我的代码: package soundmanagement; impo
我在Heroku上部署了一个应用程序。我正在使用免费服务。 我经常收到以下错误消息。 PG::Error: ERROR: out of memory 如果刷新浏览器,就可以了。但是随后,它又随机发生
我正在运行 LAMP 服务器,这个 .htaccess 给我一个 500 错误。其作用是过滤关键字并重定向到相应的域名。 Options +FollowSymLinks RewriteEngine
我有两个驱动器 A 和 B。使用 python 脚本,我在“A”驱动器中创建一些文件,并运行 powerscript,该脚本以 1 秒的间隔将驱动器 A 中的所有文件复制到驱动器 B。 我在 powe
下面的函数一直返回这个错误信息。我认为可能是 double_precision 字段类型导致了这种情况,我尝试使用 CAST,但要么不是这样,要么我没有做对...帮助? 这是错误: ERROR: i
这个问题已经有答案了: Syntax error due to using a reserved word as a table or column name in MySQL (1 个回答) 已关闭
我的数据库有这个小问题。 我创建了一个表“articoli”,其中包含商品的品牌、型号和价格。 每篇文章都由一个 id (ID_ARTICOLO)` 定义,它是一个自动递增字段。 好吧,现在当我尝试插
我是新来的。我目前正在 DeVry 在线学习中级 C++ 编程。我们正在使用 C++ Primer Plus 这本书,到目前为止我一直做得很好。我的老师最近向我们扔了一个曲线球。我目前的任务是这样的:
这个问题在这里已经有了答案: What is an undefined reference/unresolved external symbol error and how do I fix it?
我的网站中有一段代码有问题;此错误仅发生在 Internet Explorer 7 中。 我没有在这里发布我所有的 HTML/CSS 标记,而是发布了网站的一个版本 here . 如您所见,我在列中有
如果尝试在 USB 设备上构建 node.js 应用程序时在我的树莓派上使用 npm 时遇到一些问题。 package.json 看起来像这样: { "name" : "node-todo",
在 Python 中,您有 None单例,在某些情况下表现得很奇怪: >>> a = None >>> type(a) >>> isinstance(a,None) Traceback (most
这是我的 build.gradle (Module:app) 文件: apply plugin: 'com.android.application' android { compileSdkV
我是 android 的新手,我的项目刚才编译和运行正常,但在我尝试实现抽屉导航后,它给了我这个错误 FAILURE: Build failed with an exception. What wen
谁能解释一下?我想我正在做一些非常愚蠢的事情,并且急切地等待着启蒙。 我得到这个输出: phpversion() == 7.2.25-1+0~20191128.32+debian8~1.gbp108
我是一名优秀的程序员,十分优秀!