2011-12-17 22 views
2

私は各区間[x_{i}, x_{i + 1}], i = 0, ..., nのためにすべてP_{i}(もちろん、次数3の多項式です)を持っているので、Mathematica 8の関数として3次スプラインを定義しようとしています。私がしたいのは、[x_{0}, x_{n + 1}]の間にss(x) = P_{i}(x) if x is in [x_{i}, x_{i+1}]と定義することです。 nがどのように変わるのですか?私はPiecewiseを考えていたが、うまくいかなかった。一般的なPiecewiseのようなものがMathematicaにありますか?

+0

あなたは 'Piecewise'を使用してみました何を示してください。また、読みにくいので、テキストに書式を追加することを検討してください。 –

+0

私はPiecewiseを全く試していませんでした。そうすることには何の役にも立ちません。私はドキュメンテーションを見て、Piecewiseが固定数のパラメータで動作することを見ただけです。私は変化するものが必要です。 – svs

+0

私はあなたの要求を理解していません。 'n'多項式はどこから来ますか?なぜあなたは 'Piecewise'式をプログラムで満たすことができませんか?多項式が 'i'の関数なら' Piecewise'が必要ですか?この機能はどのように使用されますか? –

答えて

4

私が間違っていない場合、これはあなたが求めるものです。それは少し醜いですが。より良い選択肢があります。

n = 5; 
ClearAll[f]; 
f[x_] = Piecewise[Table[{x^k, (k - 1)/n < x <= k/n}, {k, 0, n}]] 

enter image description here

f[1/2] 

(* ==> 1/8 *) 

あなたがSet(=)に置き換えることができthne(私が提唱しません)グローバル変数nの現在の状態に依存の結果を作りたい場合fの定義がSetDelayed(:=)ですが、これはfの呼び出しごとにTableを再評価することを意味します。小さな値のnではそれほど悪くはありませんが、私はそれが気に入らないのです。その場合の結果は次のようになります。

n = 2; f[1/2] 
n = 5; f[1/2] 

(* ==> 1/2 

    ==> 1/8 
*) 
+0

これはまさに私が探していたものです。それで、私の主な質問に対する答えは、次のようになります。s [t_] = Piecewise [Table [{P [i] [t]、x [i] <= t <= x [i + n}]] ' – svs

+0

私に教えてくださいSjoerd、これは彼が望んだことをいつ理解しましたか?また、「ピースワイズ」がうまくいかないとの声明を聞いたことはありませんか? –

+1

@IvanPetkov x [i] <= x <= x [i + 1]は面倒です。あなたは関数xと変数xを混合しています。 –

1

私は本当にあなたが求めているものを理解していないが、私の最高の推測と一緒に行く、あなたはこの中で値を見つけることがあります。

p = {func1, func2, func3, func4, func5}; 

s = If[ 
     1 <= # <= [email protected], 
     p[[Floor[#]]][#], 
     "Undefined" 
    ] &; 

s /@ {2.4, 1.2, 3.3, 4.8, 1.3, -2.5} 
{func2[2.4], func1[1.2], func3[3.3], func4[4.8], func1[1.3], "Undefined"}

これは便利ではない場合、私は申し訳ありません。

+0

私がするべきことは基本的に次のようなものです: 'f:(0、1) - > R. f [x_] = x^kが(k-1)/ n、k /したがって、n = 5の場合、1/2は(2/5、3/5)にあるので、f 1/2 = 1/8 ' 定義方法Mathematicaのこの関数? – svs

1

イワン、私は私の最初の答えにあなたのコメントをもとに、多かれ少なかれ不自然あなたが欲しいものを行う方法、の数は、あると思います。おそらく、あなたは最も一般的にInterpolationの機能性を探しています。例:

n = 5; 
Table[{k/n, k}, {k, 0, n}] 
f = Interpolation[%, InterpolationOrder -> 0]; 
Plot[f[i], {i, 0, 1}, PlotRange -> All] 

Mathematica graphics

関連する問題