计算抛物线:我做错了什么?

时间:2010-04-30 12:59:30

标签: math

我正在关注this thread并复制了我项目中的代码。玩弄它看起来似乎不是很精确。

回想一下公式:y = ax ^ 2 + bx + c

由于我的第一个给定点是x1 = 0,我们已经有c = y1。我们只需要找到a和b。使用:

y2 = ax2 ^ 2 + bx2 + c y3 = ax3 ^ 2 + bx3 + c

求解b的方程式:

b = y / x - ax - cx

现在将两个方程设置为彼此相等,以便b掉出

y2 / x2 - ax2 - cx2 = y3 / x3 - ax3 - cx3

现在求解一个给我:

a =(x3 *(y2 - c)+ x2 *(y3 - c))/(x2 * x3 *(x2 - x3))

(这是正确的吗?!)

然后再次使用b = y2 / x2 - ax2 - cx2来找到b。但到目前为止,我还没有找到正确的a和b系数。我做错了什么?

修改

好的我想通了,但不得不使用CAS,因为我不知道如何手动反转符号矩阵。 (高斯算法似乎不起作用)

以矩阵形式写下来:

| 0     0   1 |   |a|
| x2^2  x2  1 | * |b| = Y
| x3^2  x3  1 |   |c|

让我们调用矩阵M并从左边乘以M ^( - 1)

|a|
|b| = M^(-1)*Y
|c|

然后我离开了枫树:

a = (-y1 * x2 + y1 * x3 - y2 * x3 + y3 * x2) / x2 / x3 / (-x2 + x3)

猜猜我在上面某处犯了一个愚蠢的错误。

这给我的结果与上面引用的主题中的公式相同。

1 个答案:

答案 0 :(得分:4)

你的问题是你有三个未知数(系数a,b和c),我只能看到一个方程:当x = 0时y = y1;正如你所说,这给出了c = y1。

如果没有更多信息,您所能做的就是告诉b如何与a相关。而已。没有一种解决方案,有很多解决方案。

如果你告诉我你有两个其他点(x2,y2)和(x3,y3),那么你应该将它们全部替换成等式并求解。从:

开始

alt text http://www.equationsheet.com/latexrender/pictures/41a2186ee8f0fcad42693e5c6211e258.gif

现在替换三个点(x1,y1),(x2,y2)和(x3,y3):

alt text http://www.equationsheet.com/latexrender/pictures/4929b2060c4fe90914da0ac237f68e38.gif

这是您需要反转的矩阵方程。您可以使用Cramer的规则或LU分解。另一种可能性是Wolfram Alpha

http://www.wolframalpha.com/input/?i=inverse{{x1*x1,+x1,+1},+{x2*x2,+x2,+1},+{x3*x3,+x3,+1}}

取链接给你的反转并乘以右边的矢量来求解你的三个系数。

如果你注意到

那么代码就很容易了
  

det =(x2 x1 ^ 2-x3 x1 ^ 2-x2 ^ 2 x1 + x3 ^ 2   x1-x2 x3 ^ 2 + x2 ^ 2 x3)

将矩阵中的所有条目除以此值。分子非常简单:

alt text http://www.equationsheet.com/latexrender/pictures/93fc1a5b2cfddcc8685045937396cee3.gif

将此除以行列式,你得到了反转。

如果您的分数超过三分,则需要进行最小二乘拟合。用你所有的点(x1,y1)替换相同的技巧(xn,yn)。你将拥有比未知数更多的方程式。通过nx3矩阵的转置将两侧相乘并求解。 Voila - 你将拥有一系列系数来最小化点和函数值之间的误差平方。