일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- python3
- Laminar
- heap
- 회귀
- 예제
- 디스크 컨트롤러
- Turbulent
- Boundary Layers
- 힙
- 유체역학
- 프로그래머스
- Navier-Stokes
- Fluids
- Crank-Nicolson
- regression
- Statistics
- Python
- Compressible Flow
- 우선순위큐
- Fluid Dynamics
- projecteuler
- Finite Difference Method
- programmers
- FTCS
- Heat Equation
- Blasius
- 이중우선순위큐
- 파이썬
- 통계학
- 프로젝트오일러
- Today
- Total
Sudal's Garage
FTCS Method 의 Stability 본문
앞서 포스팅했던 Forward Time Central Space Method의 안정성을 알아보자
결론부터 얘기하자면,
를 만족 할 때, FTCS 는 stable 하다.
하지만 이를 증명시키기는 굉장히 어려워서, experimentally 계산해보자.
를 만족하는 간단한 예,
위 조건을, 앞서 포스팅했던 function heatFTCS 에 넣고,
h와 k를 조절해줘서, 의 값이 0과 가까우면 stable 한 것이다. 반대의 경우는 stable 하지 않다.
clear; close; alpha = 0.1; L = 1; tf = 2; F = @(x) ones(size(x)); G0 = @(t) zeros(size(t)); GL = @(t) zeros(size(t)); H = linspace(0.01,0.1); K = linspace(0.001,0.05); T = ones(length(K), length(H)); i = 1; j = 1; for h = H for k = K U = heatFTCS(alpha,L,G0,GL,F,h,k,tf); Ta = mean(abs(U(:,end))); if Ta >= 1 || isnan(Ta) == 1 T(i,j) = 1; elseif Ta < 1 T(i,j) = 0; end i = i + 1; end i = 1; j = j + 1; end [H,K] = meshgrid(H,K); pcolor(H,K,T); colormap(jet(2)); colorbar('ticks',[0,1]); title('FTCS Stability Region'); xlabel('h'); ylabel('k');
h 는 0.01 부터 0.1, k 는 0.001 부터 0.05로 설정해준다.
후에 h,k는 for 룹에 넣을 것과 구별하기 위해 대문자로 지정해준다.
H = linspace(0.01,0.1);
K = linspace(0.001,0.05);
계산한 결과를 저장해 놓을 Matrix T를 지정한다.
T = ones(length(K), length(H));
그 후 for loop에서는 각 h,k 값마다 U를 heatFTCS Function으로 구해주고,
Ta = mean(abs(U(:,end)));
Ta 의 값이 0 인지 아닌지를 판별한다.
Ta 가 1 보다 크거나 NaN인 값을 가지면 1의 값을 저장하고,
1보다 작으면 0의 값을 저장한다.
if Ta >= 1 || isnan(Ta) == 1
T(i,j) = 1;
elseif Ta < 1
T(i,j) = 0;
end
* isnan function: NaN Value, 예를 들면 2/0 같은 수가 아닌 값인지 판별해주는 함수.
예) A = 0./[-2 -1 0 1 2]
A = 1×5 0 0 NaN 0 0
isnan(A)
ans =
0 0 1 0 0
후에 그래프 생성을 해준다
[H,K] = meshgrid(H,K);
pcolor(H,K,T);
colormap(jet(2)); colorbar('ticks',[0,1]);
title('FTCS Stability Region');
xlabel('h'); ylabel('k');
Result:
짙은 파란색의 구간에서 FTCS Method는 Stable 하다
Theoretical 방법의 결과와 비교해 보자!
두번째 for loop에 다음을 추가하자
Ba = alpha * k / h^2; if Ba > 0.5 B(i,j) = 1; elseif Ba <= 0.5 B(i,j) = 0; end
Result:
얼추 experimental stability zone 과 들어맞는다
'Programming > MATLAB' 카테고리의 다른 글
Finite Differential Method for the Heat Equation, CN Method (0) | 2019.03.16 |
---|---|
MATLAB, pause를 이용한 움직이는 그래프, animation using pause (0) | 2019.03.03 |
Finite Difference Method for the Heat Equation, FTCS Method (0) | 2019.02.27 |
MATLAB, implicit Euler Method, Global Truncation Error, BVPs, Fourier Transform (0) | 2019.02.16 |
MATLAB, second order differential equation, ode45 (0) | 2019.01.30 |