使用 Python 将系数拟合到数据和函数



我必须计算下面函数的系数(c1-c9),而温度(to,tc)和解(y)都是通过不同点的测量数据给出的。我试图用numpy.linalg.solv解决它,但它引发了一个奇异矩阵错误,我不确定如何避免。

 c[0] + c[[0]]*to[0] + c[[1]]*tc[0] + c[3]*to[0]^2 + c[4]*to[0]*tc[0] + c[5]*tc[0]^2 + c[6]*to[0]^3 + c[7]*tc[0]*to[0]^2 + c[8]*to[0]*tc[0]^2 + c[9]*tc[0]^3 = y[0]

有人可以给我一个线索或解决方案,说明如何使用Python解决这个问题?这是我到目前为止的代码

import numpy as np
to1 = 10
tc1 = 30
y1  = 148450
to2 = 5
tc2 = 30
y2  = 124955
to3 = 0
tc3 = 30
y3  = 104596
to4 = -5
tc4 = 30
y4  = 86964
to5 = -10
tc5 = 30
y5  = 71704
a = np.array([[1,to1,tc1, to1**2, to1*tc1], [1,to2,tc2,to2**2, to2*tc2],[1,to3,tc3,to3**2, to3*tc3],[1,to4,tc4,to4**2, to4*tc4],[1,to5,tc5,to5**2, to5*tc5]])
b = np.array([y1,y2,y3,y4,y5])
x = np.linalg.solve(a, b)
print x

你的问题

在您的所有数据点中,您都有tc=30

当您尝试使用函数拟合数据时to, tc算法会告诉您(使用它唯一知道的语言,线性代数语言),当数据集中没有tc变化时,您无法估计y的变异性作为tc的函数。

如何纠正您的问题

拥有更多的数据点,

具有两个自变量的不同值,并尽可能使用最小二乘法,使用您可以收集的所有数据点(我的意思是,估计 10 个参数?使用数十或数百个数据点)。 答案的这一部分与要使用的编程语言无关:拥有更多数据。

错误消息告诉您矩阵是奇异的,因此它缺乏秩,因此行列式为零。您可以通过以下方式进行检查:

print np.linalg.matrix_rank(a)

它给出了 3 而不是 5。在这个问题/答案中可以找到关于这意味着什么的非常好的解释:

什么是等级不足以及如何处理它

但是,您可以找到一个"良好拟合"的最小二乘解 - 尽管如前所述,由于某些行彼此线性依赖,因此不是给定矩阵的唯一解。

相关内容

  • 没有找到相关文章

最新更新