【发布时间】:2020-02-01 00:30:22
【问题描述】:
我正在拟合一条非常简单的三点曲线。使用 minimumsq 方法,遵循所有规则。但我仍然收到错误。我不明白。任何人都可以帮忙。非常感谢
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import leastsq
x = np.array([2.0,30.2,15.0])
y = np.array([45.0,56.2,30.0])
print(x)
print(y)
# model
def t(x,a,b,c):
return a*x**2 + b*x + c
#residual fucntion
def residual_t(x,y,a,b,c):
return y-t(x,a,b,c)
#initial parameters
g0 = np.array([0.0,0.0,0.0])
#leastsq method
coeffs, cov = leastsq(residual_t, g0, args=(x,y))
plt.plot(x,t(x,*coeffs),'r')
plt.plot(x,y,'b')
plt.show()
#finding out Rsquared and Radj squared value
absError = residual_t(y,x,*coeffs)
se = np.square(absError) # squared errors
Rsquared = 1.0 - (np.var(absError) / np.var(y))
n = len(x)
k = len(coeffs)
Radj_sq = (1-((1-Rsquared)/(n-1)))/(n-k-1)
print (f'Rsquared value: {Rsquared} adjusted R saquared value: {Radj_sq}')
TypeError:residual_t() 缺少 2 个必需的位置参数:'b' 和 'c'
为什么? coeffs 已经是一个数组,其中包含 a、b、c 的最佳 it 值。 coeffs 也显示未定义,residual_t 也显示问题。你能帮我理解吗。
【问题讨论】:
-
也许你的意思是
residual_t(y,x,*coeffs)?。正如您定义的那样,该函数接受 5 个参数,但您只传入 3 个。 -
函数有 5 个参数,你只传递了 3 个。为什么??
-
*coeffs 本身包含最佳拟合 a,b,c。我不能通过任何其他的
-
Esha,pault 是正确的,添加星号。在线
absError = residual_t(y,x,*coeffs) -
仍然有同样的错误
标签: python numpy scipy least-squares