与涉及积分的函数拟合



我试图用一个涉及积分的函数来拟合一个图形。如果我不使用np.array((,就会出现错误:"函数调用的结果不是一个合适的浮点数组。"如果我使用np.array((,则会出现另一个错误:x和y必须具有相同的第一维度,但具有形状(501,(和(1,(。我该怎么解决这个问题?

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
import sympy as sp

x1=[1,2,3,4,5]
y=[6,12,18,24,30]

x,a,t=sp.symbols('x a t')
def f(x,a):
return np.array([sp.integrate(t*x*a,(t,0,2))],dtype=float)
xFit=np.arange(0,5.01,0.01)
popt, pcov=curve_fit(f,x1,y)
plt.scatter(x1,y)
plt.plot(xFit,f(xFit,*popt),color="r")
print(popt[0])

函数f(x,a)需要标量参数,即使x是向量,也会返回标量值。尝试用以下内容替换plot()行:

ystar = [f(_x, popt[0]) for _x in xFit]
plt.plot(xFit, ystar, color="r")

好吧。。。在我看来,这个问题解决了:

import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
from scipy.optimize import curve_fit
import sympy as sp

x1=[1,2,3,4,5]
y=[6,12,18,24,30]

x,a,t=sp.symbols('x, a, t', real=True)
g=sp.integrate(t*x*a,(t,0,2))
f=sp.lambdify((x,a),g)
xFit=np.arange(0,5.01,0.01)
popt, pcov=curve_fit(f,x1,y)
plt.scatter(x1,y)
ystar = [f(_x, popt[0]) for _x in xFit]
plt.plot(xFit, ystar, color="r")
print(popt[0])

最新更新