用函数a.cos(bpsi)+c导出Jacobian得到0

2024-09-30 20:24:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个cosinus形状的数据集。我试着用函数拟合这个数据集:

a.cos(b-psi)+c

我的目标是估计最符合我的数据的参数a、b和c。所以我试着用西皮·莱斯特斯要将此最小化:data-a.cos(b-psi)+c。在

(psi与数据一起找到)。在

我的初始参数是ndarray x (x=np.array([a0,b0,c0])),我的数据存储在一个元组args=(psi,data),我有我的函数:

^{pr2}$

然后我发射西皮·莱斯特斯使用以下行:

xopt = leastsq(coreg.func,x0,args,full_output=1)

(初始参数:)

Out[30]: array([ 3.8,  1.3,  0. ])

但结果是:

(array([ 3.8,  1.3,  0. ]),
None,
{'fjac': array([[ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan],
       [ nan,  nan,  nan, ...,  nan,  nan,  nan]]),
  'fvec': array([-3.17913524, -2.19610415, -2.06748506, ...,  1.76355583,
    2.32077375,  2.89394884]),
  'ipvt': array([1, 2, 3], dtype=int32),
  'nfev': 4,
  'qtf': array([ nan,  nan,  nan])},
 'The cosine of the angle between func(x) and any column of the\n  Jacobian is at most     0.000000 in absolute value',
4)

我不知道为什么它不能计算雅可比,我想这就是为什么它给我返回的参数和我最初输入的一样。在

如果有帮助,下面是每个对象的值:

Variable   Type        Data/Info
--------------------------------
args       tuple       n=2
np         module      <module 'numpy' from '/us<...>ages/numpy/__init__.pyc'>
psi        ndarray     1201x1201: 1442401 elems, type `float64`, 11539208 bytes (11 Mb)
data     ndarray     1201x1201: 1442401 elems, type `float64`, 11539208 bytes (11 Mb)
x          ndarray     3: 3 elems, type `float64`, 24 bytes

Tags: 数据函数data参数bytestypeargscos
2条回答

你的函数的雅可比矩阵很容易解析地写出。把它交给Leatsq电话。在

谢谢你的回答!在

所以我这样输入雅可比矩阵?(抱歉,我是python初学者)

def jacobi(x,*args):
  psi = args[0].ravel()
  target = args[1].ravel()
  return -x[0]*np.sin(x[1]-psi)

但现在又回来了:

^{pr2}$

相关问题 更多 >