我想定义一个函数s [t,n],它返回给定函数f(t)的n个项的FourierTrigSeries的t点处的值。例如,对于f(t)= t ^ 2:
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个术语的傅立叶特里格系列"。
然而,s [0,3]使得t = 0"太早",所以原始函数f(t)= t ^ 2变为相同的0;即使是自变量t(FourierTrigSeries的第二个输入)也变为0,这没有任何意义。结果是Mathematica无法读懂我的想法并返回如下:
s[0, 3]
Out = FourierTrigSeries[0,0,3]
总结:我想定义函数s [t,n],使得n首先替换它的值,并且只有在此之后,t才被其值用于评估。
我尝试过s [n,t]而不是s [t,n];也试过:=(延迟评价)而不是以不同的方式,并结合像
这样的东西ss[tdelay_, n_] = s[t, n] /. t -> tdelay
但似乎没有任何效果。我怎样才能得到我想要的行为?
提前谢谢!
答案 0 :(得分:1)
使用SetDelayed和临时(本地)变量。
s[t_, n_] := Module[{t0}, FourierTrigSeries[t0^2, t0, n] /. t0 -> t]
s[0, 3]
-(31/9) + Pi^2/3
答案 1 :(得分:0)
在看到克里斯的回答之后,我试图了解为什么需要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
显然可以在没有Module
的情况下完成......
无论如何,谢谢!