【发布时间】:2014-05-19 23:29:48
【问题描述】:
我正在尝试在 C 中曲线拟合 5 个点。我使用上一篇文章 (Can sombody simplify this equation for me?) 中的这段代码来做 4 个点,但现在我需要添加另一个点。
// Input data: arrays x[] and y[]
// x[1],x[2],x[3],x[4] - X values
// y[1],y[2],y[3],y[4] - Y values
// Calculations
A = 0
B = 0
C = 0
D = 0
S1 = x[1] + x[2] + x[3] + x[4]
S2 = x[1]*x[2] + x[1]*x[3] + x[1]*x[4] + x[2]*x[3] + x[2]*x[4] + x[3]*x[4]
S3 = x[1]*x[2]*x[3] + x[1]*x[2]*x[4] + x[1]*x[3]*x[4] + x[2]*x[3]*x[4]
for i = 1 to 4 loop
C0 = y[i]/(((4*x[i]-3*S1)*x[i]+2*S2)*x[i]-S3)
C1 = C0*(S1 - x[i])
C2 = S2*C0 - C1*x[i]
C3 = S3*C0 - C2*x[i]
A = A + C0
B = B - C1
C = C + C2
D = D - C3
end-loop
// Result: A, B, C, D
我一直试图将其转换为 5 点曲线拟合,但无法弄清楚循环内部的内容:
// Input data: arrays x[] and y[]
// x[1],x[2],x[3],x[4],x[5] - X values
// y[1],y[2],y[3],y[4],y[5] - Y values
// Calculations
A = 0
B = 0
C = 0
D = 0
E = 0
S1 = x[1] + x[2] + x[3] + x[4]
S2 = x[1]*x[2] + x[1]*x[3] + x[1]*x[4] + x[2]*x[3] + x[2]*x[4] + x[3]*x[4]
S3 = x[1]*x[2]*x[3] + x[1]*x[2]*x[4] + x[1]*x[3]*x[4] + x[2]*x[3]*x[4]
S4 = x[1]*x[2]*x[3]*x[4] + x[1]*x[2]*x[3]*[5] + x[1]*x[2]*x[4]*[5] + x[1]*x[3]*x[4]*[5] + x[2]*x[3]*x[4]*[5]
for i = 1 to 4 loop
C0 = ??
C1 = ??
C2 = ??
C3 = ??
C4 = ??
A = A + C0
B = B - C1
C = C + C2
D = D - C3
E = E + C4
end-loop
// Result: A, B, C, D, E
任何填写 C0...C4 的帮助将不胜感激。我知道这与矩阵有关,但我无法弄清楚。带有伪代码或真实代码的示例将是最有帮助的。
谢谢
【问题讨论】:
-
x值的间距是否相等? -
感谢您的回复。是的,它们或多或少是等距的,最终的曲线应该看起来像钟形曲线,当然会有一些变化。
-
@user3550036 你到底在近似什么?您说“最终曲线应该看起来像钟形曲线”-如果您的意思是所讨论的函数是高斯(即正常)密度,那将产生很大的不同。如果是这样,请直接使用高斯密度而不是多项式 - 即使所有数据点都是正数,也不能保证多项式在所有地方都是正数。
标签: math matrix curve-fitting least-squares