2013-06-02 46 views
1

我知道我可以使用Mathematica,但可惜我沒有。 我只是想找到A,B,C,d 形式矩陣Sombody可以爲我簡化這個等式嗎?

| X1^3 x1^2 X1 1 | |A| |y0| 
| X2^3 x2^2 X2 1 | |B| |y1| 
| X3^3 x3^2 X3 1 | X |C| = |y2| 
| X4^3 x4^2 X4 1 | |D| |y3| 

我只是想找到A,B,C和D.

其實我試圖簡化方程在arduino做一個程序,需要使用4個點的曲線擬合,這樣我可以預測未來的點。我看過this post,但拋物線對於我的需求不夠準確。我已經試過http://www.wolframalpha.com/

linearSolve [{{(x1)^3, (x1)^2, x1, 1}, 
       {(x2)^3, (x2)^2, x2, 1}, 
       {(x3)^3, (x3)^2, x3, 1}, 
       {(x4)^3, (x4)^2, x4, 1}}, {{y1},{y2},{y3},{y4}}] 

它返回一個很長的結果,可以簡化。但是,我無法在搜索欄中輸入完整的結果以進行簡化(它給了我錯誤:輸入太長!)。

什麼想法?嗯,我想這將是可能的桌面版本。

即使在此之後,如果結果很長,請用x1 = 0代替並讓我知道簡化結果。

回答

1
// 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 
+0

這正是我想要的。非常感謝@Egor – matt007

0

如果你沒有數學就可以使用wolframalpha

Your equation

+0

Thanyou for input。其實我已經試過了。但是,它並不能解決A,B,C,D的問題。我也曾嘗試使用linearSolve。它確實解決了,但結果太長,我不能簡單地解決它。搜索欄中的輸入空間小於公式。 對不起,它不能解決我的朋友, – matt007

+0

[矩陣求逆](http://www.wolframalpha.com/input/?i=inverse+matrix+ {x1^3%2Cx1^2%2Cx1%2C1}% 2C {x2^3%2Cx2^2%2Cx2%2C1}%2C {x3^3%2Cx3^2%2Cx3%2C1}%2C {x4^3%2Cx4^2%2Cx4%2C1})是第一步。 –

0

如果可能的話,這將是簡單的數字上解決這個問題。

順便說一下,你仍然可以計算一個封閉的表單解決方案,但它很長。它只需要一個4x4矩陣inverison。

令P =((X1 - X2)(X1 - X3)(×2 - X 3)(X 1 - X 4)(X2 - X4)(X3 - X4))

你的解決方法是:

A = [x1(x1-x4)x4(y1-y2)+ x3^2(x4 y0 + x1 y1 - x4 y1 - x1 y3)+ x2^2(-x4 y0 - x1 y2 + x4 y2 + x3 y0-y3)+ x1^2(y2-y3)+ x3^2(-y0 + y3)+ x3(x4^2(-y0 + y1)+ x1^2(-y1 + y3))]/P

B = [-x1(x1-x4)x4(x1 + x4)(y1-y2)+ x3(x4^3(y0- y1)+ x1^3(y1-y3))+ x3^3(-x4 y0 -x1 y1 + x4 y1 + x1 y3)+ x2^3(x4 y0 + x1 y2 - x4 y2 - x1 y3 + x3 y0 + y3)+ x1^3(-y2 + y3))]/P

C = [x1^2(y0 + y3)+ x3^(x1-x4)x4^2(y1-y2)+ x3^3(x4^2(y0-y1)+ x1^2(y1-y3))+ x2^2(x4^3(y0-y2)+ x1^3(y2-y3)+ x3^3(-y0 + y3))+ x3^2(x4^3(-y0 + y1)+ x1^3(-y1 + y3))+ x2^3 (x1-x3)x3(x1-x4)×2(-y0 + y2)+ x3^2(y0-y3)+ x1^2(-y2 + y3))]/P

D = [x1 (x3-x4)x4 y1 + x2 x4^2(-x3^3 y0 + x3^2 x4 y0 + x1^2(x1-x4)y2)+ x1^2 x2 x3^2(-x1 + x3)y3 + x2^3(x4(-x3^2 y0 + x3 x4 y0 + x1(x1-x4)y2)+ x1 x3(-x1 + x3)y3)+ x2^2(x1 x4(-x1^2 + x4^2)y2 + x3^3(x4 y0 - x1 y3)+ x3(-x4^3 y0 + x1^3 y3))]/P

(小心奇點,即wh en P爲0)

+0

謝謝@mescalinum,這肯定比我得到的等式小。但它仍然讓我感到害怕,因爲我要在arduino中編程,而這麼長的等式肯定會減慢執行速度。 那麼,我能做出的唯一犧牲就是用x1 = 0代替。 你能否把x1 = 0並告訴我結果? – matt007

+0

得到: A = [x3 x4^2(-y0 + y1)+ x3^2(x4 y0 - x4 y1)+ x2^2(-x4 y0 + x4 y2 + x3(y0 - y3)) + x2(x4^2(y0-y2)+ x3^2(-y0 + y3))]/P B = [x3 x4^3(y0-y1)+ x3^3(-x4 y0 + x4 y1)+ x2(x4^3(-y0 + y2)+ x3^3(y0-y3))+ x2^3(x4 y0 - x4 y2 + x3(-y0 + y3))]/P C = [x3^3 x4^2(y0-y1)+ x3^2 x4^3(-y0 + y1)+ x2^3(x4^2(-y0 + y2)+ x3^2(y0-y3 )+ x2^2(x4^3(y0-y2)+ x3^3(-y0 + y3))]/P D = [x2^3 x4(-x3^2 y0 + x3 x4 y0) + x2 x4^2(-x3^3 y0 + x3^2 x4 y0)+ x2^2(x3^3 x4 y0 - x3 x4^3 y0)]/P – fferri