일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 회귀
- 통계학
- python3
- projecteuler
- Navier-Stokes
- Crank-Nicolson
- FTCS
- Python
- 예제
- 프로젝트오일러
- 우선순위큐
- Blasius
- 힙
- Statistics
- programmers
- Fluid Dynamics
- 파이썬
- 이중우선순위큐
- regression
- Turbulent
- Heat Equation
- Finite Difference Method
- Boundary Layers
- heap
- Fluids
- 유체역학
- Laminar
- 디스크 컨트롤러
- 프로그래머스
- Compressible Flow
- Today
- Total
Sudal's Garage
MATLAB, implicit Euler Method, Global Truncation Error, BVPs, Fourier Transform 본문
MATLAB, implicit Euler Method, Global Truncation Error, BVPs, Fourier Transform
_Sudal 2019. 2. 16. 07:25Implicit 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 |
'Programming > MATLAB' 카테고리의 다른 글
Finite Differential Method for the Heat Equation, CN Method (0) | 2019.03.16 |
---|---|
MATLAB, pause를 이용한 움직이는 그래프, animation using pause (0) | 2019.03.03 |
FTCS Method 의 Stability (0) | 2019.02.28 |
Finite Difference Method for the Heat Equation, FTCS Method (0) | 2019.02.27 |
MATLAB, second order differential equation, ode45 (0) | 2019.01.30 |