MATLAB, implicit Euler Method, Global Truncation Error, BVPs, Fourier Transform
Implicit Euler Method 를 구현한다
|
Forward, Backward and central difference formulas 를 이용해 Local Truncation Error 를 구현하는 script를 구현
|
second order BVPs 를 푸는 함수 구현
function [A,b] = bvpfd(p,q,r,xspan,BC,N) h = (xspan(2) - xspan(1))/(N+1); Q = ones(1,N); P1 = ones(1,N-1); P2 = ones(1,N-1); b = ones(1,N); for i = 1:1:N Q(i) = Q(i) * (2+q(i)*h^2); end b(1) = (p(1)*h/2+1)*BC(1) + (-p(1)*h/2+1)*BC(2) - h^2*r(1); if N > 1 for i = 1:1:N-1 P1(i) = P1(i) * (-p(i+1)*h/2 - 1); P2(i) = P2(i) * (p(i)*h/2 - 1); end b(1) = (p(1)*h/2 + 1)*BC(1) - h^2*r(1); b(end) = (-p(N)*h/2+1)*BC(2) - h^2*r(N); for i = 2:1:N-1 b(i) = b(i) * (-h^2 * r(i)); end end A = eye(N) .* Q + diag(P2,1) + diag(P1,-1); b = b'; end |
ones(m,n): m * n 크기의 1 행렬을 만든다.
eye(N): N * N 크기의 행렬을 만든다. 대각선방향의 성분은 1로 채워진다
diag(M,n): M Matrix 를 n만큼 이동시켜 diagonal 하게 만들어준다. 나머지 항에는 0이 채워진다.
예)
>> A = [1 2 3 4 5];
>> diag(A,2)
ans =
0 0 1 0 0 0 0
0 0 0 2 0 0 0
0 0 0 0 3 0 0
0 0 0 0 0 4 0
0 0 0 0 0 0 5
0 0 0 0 0 0 0
0 0 0 0 0 0 0
푸리에 급수를 반환하는 함수를 구현
function [X,Y] = partial_fourier(a0,a,b,L,x)
X = x;
Y = ones(1,length(X)) .* a0/2;
for n = 1:1:length(a)
Y = Y + a(n) .* cos(n*pi.*x/L) + b(n) .* sin(n*pi.*x/L);
end
end
1 - Dimensinal Heat Equation에 관한 PDE를 푸는 함수 구현
function U = heat1D(k,b,L,x,t) p = length(t); q = length(x); N = length(b); U = zeros(p,q); for n = 1:1:N U = U + b(n) .* sin(n*pi.*x/L) .* exp(-n^2 * pi^2 / L^2 * k .* t'); end end |