2017-11-17 23 views
1

与えられた関数f(t)のn項のFourierTrigSeriesの点tの値を返す関数s [t、n]を定義したいと思います。例えば、f(t)= t^2の場合:Mathematica:代入の関数の制御順序を定義する

s[t_, n_] = FourierTrigSeries[t^2, t, n]; (* 2nd input = indep. variable *) 
s[t, 3] 
    Out = Pi^2/3 + 4 (-Cos[t] + 1/4 Cos[2 t] - 1/9 Cos[3 t]) 

(tの関数)です。 t = 0で、それを評価する:

s[t, 3] /. t -> 0 
    Out = -31/9 + Pi^2/3 

これは私がSの出力[0]、[3]、意味する "T = 0 3項のFourierTrigSeriesで評価する" と見たいものです。

しかし、s [0,3]を実行すると、t = 0は「早すぎる」ので、元の関数f(t)= t^2は同じになります。独立変数t(FourierTrigSeriesへの第2の入力)さえも0になり、意味をなさない。唯一その後、Iはnは最初にその値を代入するように、関数S [T、N]を定義したいと:

s[0, 3] 
    Out =  FourierTrigSeries[0,0,3] 

要約は:結果は次のようにMathematicaは心と戻りを読み取ることができないということです、tは評価のためにその値によって置換される。

s [t、n]の代わりにs [n、t]を実行しようとしました。また、=の代わりに=(遅延評価)を使用すると、さまざまな方法で組み合わせることができます。

ss[tdelay_, n_] = s[t, n] /. t -> tdelay 

しかし、何も動作していないようです。私が望む行動をどうやって得ることができますか?

ありがとうございます!

答えて

1

SetDelayedと一時変数(ローカル変数)を使用します。

s[t_, n_] := Module[{t0}, FourierTrigSeries[t0^2, t0, n] /. t0 -> t] 

s[0, 3] 
-(31/9) + Pi^2/3 
+0

偉大な、それは動作します! ありがとうございます。 –

0

クリスの答えを見た後、私はModuleが必要だった理由を参照しようとしたと私は私が最初に試した時に何らかの理由で、私を脱出し、別の方法を発見した:

どうやらそれは Moduleことなく行うことができる

f[t_] = t^2; (* or write t0^2 in line below *) 
s[t_, n_] := FourierTrigSeries[f[t0], t0, n] /. t0 -> t 
s[0, 3] 
    Out = -(31/9) + Pi^2/3 
...

Tとにかくあなたをハンク!

+0

はい、モジュールはt0のローカライゼーションを容易にします。それ以外の場合は、t0という変数が以前の計算の値を持つ場合、sの定義が中断されます。 –

関連する問題