【问题标题】:Implement Interpolation Polynomial Algorithm with Mathematica用 Mathematica 实现插值多项式算法
【发布时间】:2011-12-27 04:08:01
【问题描述】:

我必须在 Mathematica 中实现这个算法:

我的问题是我并不真正了解 Mathematica 语法,因为那里没有很多有用的示例。我做了什么:

(* Input: 4 Points*)
Array[sx, 4, 0];
Array[sy, 4, 0];

sx[0] = -1; 
sy[0] = 0;

sx[1] = 0;
sy[1] = 2;

sx[2] = 1;
sy[2] = 4;

sx[3] = 3;
sy[3] = 32;


P[x,0]:=sy[0];

P[x, k_] := 
  P[x, k - 1] + (sy[k] - P[sx[k], k - 1])*
    Sum[(x - sx[j])/sx[k] - sx[j], {j, 0, x}]; 

(我尝试实现几何平均但失败了,因为我什至无法计算总和。)

如何正确实现递归? (几何平均数)

【问题讨论】:

  • (你想要Product 而不是Sum...)

标签: recursion wolfram-mathematica interpolation polynomial-math


【解决方案1】:

你可以像这样定义一个函数 P:

P[x_, 0]  := sy[0] 
P[x_, k_] := P[x, k - 1] + (sy[k] - P[sx[k], k - 1])*
             Product[(x - sx[j])/(sx[k] - sx[j]), {j, 0, k - 1}] // Simplify

设置值 sxsy 如您在上面定义的那样:

In[13]:= P[x, 1] 
Out[13]= 2 (1 + x)

In[14]:= P[x, 2]
Out[14]= 2 (1 + x)

In[15]:= P[x, 3]
Out[15]= 2 + x + x^3

【讨论】:

  • 不客气,该方法就像一个玩具模型,但在 Mathematica 中首选的插值方法是 Heike 提出的方法。
【解决方案2】:

顺便说一句,Mathematica 有一个内置函数InterpolatingPolynomial。假设pts 是您要为其找到多项式的点的列表,那么p[x, k] 可以写成

p[x_, k_] := InterpolatingPolynomial[pts[[;;k+1]] ,x]

对于原始帖子中的示例,您会得到

pts = {{-1, 0}, {0, 2}, {1, 4}, {3, 32}};

p[x, 0] // Simplify
p[x, 1] // Simplify
p[x, 2] // Simplify
p[x, 3] // Simplify

(* output
0
2 (1 + x)
2 (1 + x)
2 + x + x^3
*)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-16
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多