Main Content

이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.

푸리에 변환과 푸리에 역변환

이 페이지에서는 Symbolic Math Toolbox™의 푸리에 변환과 푸리에 역변환 워크플로를 보여줍니다. 간단한 예제는 fourierifourier를 참조하십시오. 여기서는 힘으로 인한 빔의 굴절을 계산하여 푸리에 변환의 워크플로를 살펴봅니다. 관련 미분 방정식은 푸리에 변환으로 풉니다.

푸리에 변환 정의

w에서 x에 대한 f(x)의 푸리에 변환은 다음과 같습니다.

F(w)=f(x)eiwxdx.

푸리에 역변환은 다음과 같습니다.

f(x)=12πF(w)eiwxdw.

개념: 기호 워크플로 사용하기

기호 워크플로에서는 계산을 수치 형식이 아닌 자연적인 기호 형식으로 유지합니다. 이 접근 방식은 해의 속성을 이해하고 정확한 기호 값을 사용하게 해줍니다. 수치 결과가 필요할 때나 기호적으로 진행할 수 없을 때만 기호 변수에 숫자를 대입합니다. 자세한 내용은 수치 연산방식 또는 기호 연산방식 선택하기 항목을 참조하십시오. 일반적으로 단계는 다음과 같습니다.

  1. 방정식을 선언합니다.

  2. 방정식을 풉니다.

  3. 값을 대입합니다.

  4. 결과를 플로팅합니다.

  5. 결과를 분석합니다.

푸리에 변환을 사용하여 빔 굴절 계산하기

방정식 정의하기

푸리에 변환은 상미분 방정식과 편미분 방정식을 푸는 데 사용할 수 있습니다. 예를 들어, 탄성 기초 위에 놓인 무한히 긴 빔이 점 힘을 받았을 때의 굴절을 모델링할 수 있습니다. 여기에 대응되는 실제 사례는 기초 위에 있는 철도 선로입니다. 철도 선로는 무한히 긴 빔이고, 기초는 탄성이 있습니다.

다음과 같이 가정하겠습니다.

  • E는 빔(또는 철도 선로)의 탄성입니다.

  • I는 빔 단면의 단면 2차 모멘트입니다.

  • k는 기초의 용수철 경직성입니다.

미분 방정식은 다음과 같습니다.

d4ydx4+kEIy=1EIδ(x), <x<.

함수 y(x)와 변수를 정의합니다. E, I, k는 양수라고 가정합니다.

syms Y(x) w E I k f
assume([E I k] > 0)

symunit을 사용하여 변수에 단위를 할당합니다.

u = symunit;
Eu = E*u.Pa;    % Pascal
Iu = I*u.m^4;   % meter^4
ku = k*u.N/u.m^2;  % Newton/meter^2
X = x*u.m;
F = f*u.N/u.m;

미분 방정식을 정의합니다.

eqn = diff(Y,X,4) + ku/(Eu*Iu)*Y == F/(Eu*Iu)
eqn(x) =
diff(Y(x), x, x, x, x)*(1/[m]^4) + ((k*Y(x))/(E*I))*([N]/([Pa]*[m]^6)) == ...
        (f/(E*I))*([N]/([Pa]*[m]^5))

f를 디랙 델타 함수 δ(x)로 나타냅니다.

eqn = subs(eqn,f,dirac(x))
eqn(x) =
diff(Y(x), x, x, x, x)*(1/[m]^4) + ((k*Y(x))/(E*I))*([N]/([Pa]*[m]^6)) == ...
        (dirac(x)/(E*I))*([N]/([Pa]*[m]^5))

방정식 풀기

eqn의 양변에 fourier를 사용하여 eqn의 푸리에 변환을 계산합니다. 푸리에 변환은 미분을 w의 지수로 변환합니다.

eqnFT = fourier(lhs(eqn)) == fourier(rhs(eqn))
eqnFT =
w^4*fourier(Y(x), x, w)*(1/[m]^4) + ((k*fourier(Y(x), x, w))/(E*I))*([N]/([Pa]*[m]^6)) ...
        == (1/(E*I))*([N]/([Pa]*[m]^5))

방정식에서 fourier(Y(x),x,w)를 분리합니다.

eqnFT = isolate(eqnFT, fourier(Y(x),x,w))
eqnFT =
fourier(Y(x), x, w) == (1/(E*I*w^4*[Pa]*[m]^2 + k*[N]))*[N]*[m]

우변의 푸리에 역변환을 계산하여 Y(x)를 계산합니다. 결과를 단순화합니다.

YSol = ifourier(rhs(eqnFT));
YSol = simplify(YSol)
YSol =
((exp(-(2^(1/2)*k^(1/4)*abs(x))/(2*E^(1/4)*I^(1/4)))*sin((2*2^(1/2)*k^(1/4)*abs(x) + ...
        pi*E^(1/4)*I^(1/4))/(4*E^(1/4)*I^(1/4))))/(2*E^(1/4)*I^(1/4)*k^(3/4)))*[m]

YSoleqn에 대입하고 checkUnits 함수를 사용하여 YSol이 올바른 크기를 갖는지 확인합니다. checkUnits는 논리값 1(true)을 반환합니다. 즉, eqn은 이제 동일한 물리적인 크기와 호환되는 단위를 갖는다는 의미입니다.

checkUnits(subs(eqn,Y,YSol))
ans = 
  struct with fields:

    Consistent: 1
    Compatible: 1

separateUnits를 사용하여 단위에서 표현식을 분리합니다.

YSol = separateUnits(YSol)
YSol =
(exp(-(2^(1/2)*k^(1/4)*abs(x))/(2*E^(1/4)*I^(1/4)))*sin((2*2^(1/2)*k^(1/4)*abs(x) + ...
        pi*E^(1/4)*I^(1/4))/(4*E^(1/4)*I^(1/4))))/(2*E^(1/4)*I^(1/4)*k^(3/4))

값 대입하기

E = 106 Pa, I = 10-3 m4k = 106 N/m2을 사용합니다. 이들 값을 YSol에 대입한 다음 vpa와 16자리 정확도를 사용하여 부동소수점으로 변환합니다.

values = [1e6 1e-3 1e5];
YSol = subs(YSol,[E I k],values);
YSol = vpa(YSol,16)
YSol =
0.0000158113883008419*exp(-2.23606797749979*abs(x))*sin(2.23606797749979*abs(x) + ...
        0.7853981633974483)

결과 플로팅하기

fplot을 사용하여 결과를 플로팅합니다.

fplot(YSol)
xlabel('x')
ylabel('Deflection y(x)')

결과 분석하기

이 플롯을 통해 점 힘으로 인한 빔 굴절은 고도로 국소화된 것을 알 수 있습니다. 굴절은 충격 점에서 가장 크고 이후에는 빠르게 줄어듭니다. 기호 결과를 사용하면 결과의 속성을 분석할 수 있습니다. 이는 수치 결과를 사용할 때는 가능하지 않습니다.

YSol은 항들의 곱입니다. sin이 있는 항은 응답 변수가 진동 동작으로 진동하고 있음을 보여줍니다. exp가 있는 항은 충격 점으로부터의 거리가 늘어날수록 진동 동작이 지수 감쇠에 의해 빠르게 감쇠됨을 보여줍니다.