python 最小二乘法拟合的问题

%matplotlib notebook
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.widgets import MultiCursor
from scipy.optimize import leastsq
d=np.pi/180 
def Fun(p,x):
    a1,a2 = p
    return np.arctan(np.sin(74.2*d)*np.np.sin((x-a1)*d)/(np.cos(74.2*d)*np.sin(66.9*d)-np.cos(66.9*d)*np.sin(74.2*d)*np.cos((x-a1)*d)))+a2
def error(p,x,y): 
    return Fun(p,x)-y
a=np.loadtxt('/home/dgg/Downloads/test.txt')
k=a[:,2];I=a[:,3];q=a[:,4]; u=a[:,5]; v=a[:,6]; PA=a[:,7]
c=PA[693:1024]
d=(c-178.6927).reshape(331,1)
f=PA[0:693].reshape(693,1)
pa=np.vstack((f,d)).reshape(1024,1) 
k1=k[606:730].reshape(124,1)
I1=I[606:730].reshape(124,1)
q1=q[606:730].reshape(124,1)
u1=u[606:730].reshape(124,1)
v1=v[606:730].reshape(124,1)
phi=(k1/1023*360).reshape(124,1)  
psi=pa[606:730].reshape(124,1)  
x=phi
y=psi    
p0 = [235,-60] # 拟合的初始参数设置
para = leastsq(error, p0, args=(x,y)) # 进行拟合
y_fitted = Fun (para[0],x) # 画出拟合后的曲线
fig, (ax1, ax2)=plt.subplots(2,sharex=True,figsize=(7,9))
fig_ratio=2
plt.figure
ax2.plot(phi, I1)
ax2.plot(phi,np.sqrt(q1**2+u1**2))
ax2.plot(phi,v1)
ax1.plot(x,y,'r', label = 'Original curve')
ax1.plot(x,y_fitted,'-b', label ='Fitted curve')
multi=MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1)
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
plt.figure
def error(p,x,y): 
    return Fun(p,x)-y
a=np.loadtxt('/home/dgg/Downloads/test.txt')
k=a[:,2];I=a[:,3];q=a[:,4]; u=a[:,5]; v=a[:,6]; PA=a[:,7]
c=PA[693:1024]
d=(c-178.6927).reshape(331,1)
f=PA[0:693].reshape(693,1)
pa=np.vstack((f,d)).reshape(1024,1) 
k1=k[606:730].reshape(124,1)
I1=I[606:730].reshape(124,1)
q1=q[606:730].reshape(124,1)
u1=u[606:730].reshape(124,1)
v1=v[606:730].reshape(124,1)
phi=(k1/1023*360).reshape(124,1)  
psi=pa[606:730].reshape(124,1)  
x=phi
y=psi    
p0 = [235,-60] # 拟合的初始参数设置
para = leastsq(error, p0, args=(x,y)) # 进行拟合
y_fitted = Fun (para[0],x) # 画出拟合后的曲线
fig, (ax1, ax2)=plt.subplots(2,sharex=True,figsize=(7,9))
fig_ratio=2
plt.figure
ax2.plot(phi, I1)
ax2.plot(phi,np.sqrt(q1**2+u1**2))
ax2.plot(phi,v1)
ax1.plot(x,y,'r', label = 'Original curve')
ax1.plot(x,y_fitted,'-b', label ='Fitted curve')
multi=MultiCursor(fig.canvas, (ax1, ax2), color='r', lw=1)
plt.subplots_adjust(wspace=0, hspace=0)
plt.show()
plt.figure
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-14-483efad10293> in <module>
     26 y=psi
     27 p0 = [235,-60] # 拟合的初始参数设置
---> 28 para = leastsq(error, p0, args=(x,y)) # 进行拟合
     29 y_fitted = Fun (para[0],x) # 画出拟合后的曲线
     30 fig, (ax1, ax2)=plt.subplots(2,sharex=True,figsize=(7,9))

~/soft/lib/python3.7/site-packages/scipy/optimize/minpack.py in leastsq(func, x0, args, Dfun, full_output, col_deriv, ftol, xtol, gtol, maxfev, epsfcn, factor, diag)
    408     if not isinstance(args, tuple):
    409         args = (args,)
--> 410     shape, dtype = _check_func('leastsq', 'func', func, x0, args, n)
    411     m = shape[0]
    412 

~/soft/lib/python3.7/site-packages/scipy/optimize/minpack.py in _check_func(checker, argname, thefunc, x0, args, numinputs, output_shape)
     22 def _check_func(checker, argname, thefunc, x0, args, numinputs,
     23                 output_shape=None):
---> 24     res = atleast_1d(thefunc(*((x0[:numinputs],) + args)))
     25     if (output_shape is not None) and (shape(res) != output_shape):
     26         if (output_shape[0] != 1):

<ipython-input-14-483efad10293> in error(p, x, y)
      9     return np.arctan(np.sin(74.2*d)*np.np.sin((x-a1)*d)/(np.cos(74.2*d)*np.sin(66.9*d)-np.cos(66.9*d)*np.sin(74.2*d)*np.cos((x-a1)*d)))+a2
     10 def error(p,x,y):
---> 11     return Fun(p,x)-y
     12 a=np.loadtxt('/home/dgg/Downloads/test.txt')
     13 k=a[:,2];I=a[:,3];q=a[:,4]; u=a[:,5]; v=a[:,6]; PA=a[:,7]

<ipython-input-14-483efad10293> in Fun(p, x)
      7 def Fun(p,x):
      8     a1,a2 = p
----> 9     return np.arctan(np.sin(74.2*d)*np.np.sin((x-a1)*d)/(np.cos(74.2*d)*np.sin(66.9*d)-np.cos(66.9*d)*np.sin(74.2*d)*np.cos((x-a1)*d)))+a2
     10 def error(p,x,y):
     11     return Fun(p,x)-y

~/soft/lib/python3.7/site-packages/numpy/__init__.py in __getattr__(attr)
    213             else:
    214                 raise AttributeError("module {!r} has no attribute "
--> 215                                      "{!r}".format(__name__, attr))
    216 
    217         def __dir__():

AttributeError: module 'numpy' has no attribute 'np'

In [ ]:

错在这里,return np.arctan(np.sin(74.2*d)*np.np.sin((x-a1)*d)...,你多写个np了,np是numpy别名,而numpy是没有np属性的,所以代码运行时会报属性错误。删去一个np即可,改np.np.sin((x-a1)*d)为np.sin((x-a1)*d)

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632