3

このアルゴリズムを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}]; 

(幾何平均を実装しようとしましたが、合計を計算することさえできないため失敗しました。)

再帰を正しく実装するにはどうすればよいですか?(幾何平均)

4

2 に答える 2

3

次のように関数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
于 2011-12-27T05:44:26.940 に答える
3

余談ですが、Mathematicaには組み込み関数がありますInterpolatingPolynomialpts多項式を見つけたい点のリストであると仮定すると、次の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
*)
于 2011-12-27T11:11:21.527 に答える