【问题标题】:List Manipulation in Mathematica pertaining to Lagrange Interpolation Polynomials in Mathematica与 Mathematica 中的拉格朗日插值多项式有关的 Mathematica 中的列表操作
【发布时间】:2011-12-07 05:01:37
【问题描述】:

我正在尝试以我可以的方式使用传递给函数的列表

  • 获取该列表的长度
  • 获取要操作的单个 x 和 y 值

我试图操纵的列表如下所示:

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

这个问题是here 所见问题的后续问题。我最终想在mathematica中编写自己的函数,为给定的一组点生成拉格朗日插值多项式

 {{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}]

【问题讨论】:

  • 马修,你能澄清你的问题,以便它是useful to later generations吗?
  • 马修:在你解决它之前,我会否决你的问题......
  • @Simon 我现在就修!
  • @Simon 支持使用 XKCD!我希望我能为此投更多票!

标签: math wolfram-mathematica


【解决方案1】:

鉴于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}]]

我们可以用正切函数来测试它,

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]]

这种情况下插值好,与原函数的最大偏差为

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 以非常低效的形式返回。

【讨论】:

  • 非常感谢。我有一些奇怪的输出。我将发布另一个关于它的问题。我希望那很好。输出有效,我只是有一个我以前从未见过的奇怪的“$”符号。
  • @MatthewKemnetz 你应该投票赞成对你/有用的答案......例如,西蒙在这里。
  • @yoda 我以为我接受了它,但我一定错过了它。谢谢提醒!
【解决方案2】:

如果您有一个列表l,那么您可以使用First@Dimensions@l 获取该列表的长度。假设列表具有 {{x1,y1},{x2,y2},...} 的形式,那么您只需使用 Part[l,index] 或其简写形式 l[[index]] 即可在位置 index 处获取任何 xy 值。

编辑:如果您想以简单的方式做事,您可以使用Length@l 作为列表长度。

【讨论】:

  • 有一个函数可以找到一个列表的长度。它被称为...Length :)
  • @Yoda:天上有月亮,就叫月亮。
  • @Yoda:Doh!我已经习惯了Dimensions,因为它可以让我查看列表中是否有任何格式错误。
猜你喜欢
  • 1970-01-01
  • 2022-08-15
  • 2021-12-16
  • 2011-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-26
相关资源
最近更新 更多