用模型方程numpy拟合曲线

用模型方程numpy拟合曲线,numpy,least-squares,Numpy,Least Squares,我试图用一个模型方程,用非线性最小二乘法来重现一条曲线,从而得到一个特定的β值。y和x实验数据是两个尺寸相同的一维numpy阵列,分别为a和angle_图。我使用的代码产生错误:“float”对象不可调用。我的代码有什么问题?多谢各位 import numpy as np import matplotlib.pyplot as plt from scipy.optimize import leastsq a = array([ 0.04022493, 0.04287536, 0.03983

我试图用一个模型方程,用非线性最小二乘法来重现一条曲线,从而得到一个特定的β值。y和x实验数据是两个尺寸相同的一维numpy阵列,分别为a和angle_图。我使用的代码产生错误:“float”对象不可调用。我的代码有什么问题?多谢各位

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq

a = array([ 0.04022493,  0.04287536,  0.03983657,  0.0393201 ,  0.03810298,
    0.0363814 ,  0.0331144 ,  0.03074823,  0.02795767,  0.02413816,
    0.02180802,  0.01861309,  0.01632699,  0.01368056,  0.01124232,
    0.01005323,  0.00867196,  0.00940864,  0.00961282,  0.00892419,
    0.01048963,  0.01199101,  0.01533408,  0.01855704,  0.02163586,
    0.02630014,  0.02971127,  0.03511223,  0.03941218,  0.04280329,
    0.04689105,  0.04960554,  0.05232003,  0.05487037,  0.05843364,
    0.05120701])

angle_plot = array([ 0.        ,  0.08975979,  0.17951958,  0.26927937,  0.35903916,
    0.44879895,  0.53855874,  0.62831853,  0.71807832,  0.80783811,
    0.8975979 ,  0.98735769,  1.07711748,  1.16687727,  1.25663706,
    1.34639685,  1.43615664,  1.52591643,  1.61567622,  1.70543601,
    1.7951958 ,  1.88495559,  1.97471538,  2.06447517,  2.15423496,
    2.24399475,  2.33375454,  2.42351433,  2.51327412,  2.60303391,
    2.6927937 ,  2.78255349,  2.87231328,  2.96207307,  3.05183286,
    3.14159265])



def residual(vars, x, data):
   beta = vars[0]
   model = 1/(4*np.pi)(1+beta*(3/2*np.cos(x)**2-1/2)) 
   return data-model

vars = [0.2]
out = leastsq(residual, vars, args=(angle_plot, a))

我想您缺少一个乘法运算符,介于4*np.pi和1+beta*3/2*np.cosx**2-1/2之间

应该是:

def residual(vars, x, data):
   beta = vars[0]
   model = 1/(4*np.pi)*(1+beta*(3/2*np.cos(x)**2-1/2)) 
   return data-model

如果没有*函数,您实际上是在尝试将1/4*np.pi作为函数调用,例如np.cos。

这是正确的。我看不见。现在似乎可行,但我想绘制实验与模型的对比图,看看拟合的好坏。我在哪里可以买到配件?谢谢这是一个完全不同的问题,你应该单独问。