2017-11-17 33 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는 동일하게 0이됩니다. 독립 변수 t (FourierTrigSeries에 대한 두 번째 입력)조차도 0이되어 아무 의미가 없습니다. 단지 그 후, n을 처음 값으로 대체되도록 함수 S [t, N]를 정의하고자하고 :

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

요약하기는 : 결과는 다음과 같이 매쓰 내 마음 되돌아 읽을 수 없다는 , 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의 정의를 혼란시킵니다. –