2011-12-07 33 views
1

我想使用它傳遞給函數以這樣的方式,我可以列表操作在數學在數學

  • 獲取列表的長度
  • 獲取列表關於拉格朗日插值多項式個體x和y的值來操縱

我試圖操縱該列表可以看到下面:

dataTan = Table[{x, Tan[x]}, {x, -1.5, 1.5, .75}]; 

這個問題是對here問題的一種跟進。我最終想要寫數學我自己的函數產生的拉格朗日插值多項式對於一個給定的點

{{x0, y0}, ... , {xn, yn}} 

我需要一些方法來訪問上面,這樣我可以使用下面的代碼點:

Sum[Subscript[y, j]*Product[If[j != m, (x - Subscript[x, m])/ 
     (Subscript[x, j] - Subscript[x, m]), 1], {m, 0, k}], {j, 0, k}] 
+3

馬修,你能澄清一下你的問題嗎?[對後人有用](http://xkcd.com/979/)? – Simon

+2

Matthew:我會在你解決問題之前降低你的問題... – Simon

+0

@Simon我會立即修復它! –

回答

4

鑑於your last question,我猜你的意思是一個Lagrange Polynomial,所以

LagrangePoly[pts_?MatrixQ, var_: x] /; MatchQ[Dimensions[pts], {_, 2}] := 
    With[{k = Length[pts]}, Sum[pts[[j, 2]] Product[ 
    If[j != m, (var - pts[[m, 1]])/(pts[[j, 1]] - pts[[m, 1]]), 1], 
    {m, 1, k}], {j, 1, k}]] 

我們可以測試它反對切線˚F油膏,

In[2]:= points = Table[{x, Tan[x]}, {x, -1.2, 1.2, .2}] 
Out[2]= {{-1.2, -2.57215}, {-1., -1.55741}, {-0.8, -1.02964}, 
     {-0.6, -0.684137}, {-0.4, -0.422793}, {-0.2, -0.20271}, 
     {0., 0.}, {0.2, 0.20271}, {0.4, 0.422793}, 
     {0.6, 0.684137}, {0.8, 1.02964}, {1., 1.55741}, {1.2, 2.57215}} 

In[3]:= Plot[Evaluate[Expand[LagrangePoly[points, x]]], {x, -1.2, 1.2}, 
    Epilog -> Point[points]] 

tan

在這種情況下,插好,從原來的功能,最大偏差

In[4]:= FindMaximum[{Abs[Tan[x] - LagrangePoly[points, x]], -1.2<x<1.2}, x] 
Out[4]= {0.000184412, {x -> 0.936711}} 

還要注意,interpolating polynomials實際建成Mathematica:

In[5]:= InterpolatingPolynomial[points, x]-LagrangePoly[points, x]//Expand//Chop 
Out[5]= 0 

我不得不在比較之前擴展它們,因爲InterpolatingPolynomial返回效率爲HornerForm的結果,而我的LagrangePoly以非常低效的形式返回。

+0

非常感謝。雖然我有一些奇怪的輸出。我會發布關於它的另一個問題。我希望這很好。輸出工作,我只是有一個奇怪的「$」符號,我從來沒有見過。 –

+1

@MatthewKemnetz你應該upvote幫助你/有用的答案......例如,像西蒙在這裏。 – abcd

+0

@yoda我以爲我接受了它,但我一定錯過了它。感謝您的提醒! –

2

如果你有一個列表l那麼你可以通過使用[email protected]@l得到該列表的長度。假設列表的形式爲{{x1,y1},{x2,y2},...},那麼只需使用Part[l,index]或其簡寫形式l[[index]]即可獲得位置index上的任何xy值。

編輯:如果你想做的事情的簡單方法,你可以想象使用[email protected]列表的長度。

+1

有一個函數可以查找列表的長度。它被稱爲...'長度':) – abcd

+0

@Yoda:天空中有月亮,它被稱爲月亮。 – Simon

+0

@Yoda:Doh!我只是習慣了Dimensions,因爲它讓我看看列表中是否有格式錯誤。 – Timo