목차
1.Euler법
2.Heun법
3.Runge-Kutta법
4.소스코드
2.Heun법
3.Runge-Kutta법
4.소스코드
본문내용
수치해석 과제
1.Euler법
2.Heun법
3.Runge-Kutta법
4.소스코드
Do it. 임의의 미분방정식 y' = f(t, y)를 정하고, 아래 방식을 사용하여 구간 0 에서 4 까지 간격 1로 설정하여 적분하시오.
#11-1
▣ Euler 방식
접근 1.
접근 2.
#11-2
▣ Heun 방식
접근 1.
접근 2.
#11-3
▣ Range Kutta 방식
접근 1.
접근 2.
검증. 손풀이와 일치합니다.
한학기 고생하셨습니다 교수님!
남은 한해 마무리 잘하시고
내년에는 다른 자리에서 찾아뵙도록 하겠습니다!
% 여기서부터 끝까지 블록지정하여야합니다.
clear all
clc
F='9*t^2-y' % 함수식
fprintf(' 어느것으로 검증하시겠습니까? \n\n 1 .지정함수에 저의 구간과 초기값\n 2 .지정함수에 다른 구간과 초기값 \n\n');
start=input('번호를 입력하여 주십시오 (숫자만 입력하십시오) : ');
if start==1
fprintf('\n 저의 구간은 [a,b]=[0,4] 이고 y0=1, h=1 입니다. \n ');
a=0; b=4; y0=1; h=1;
else
fprintf('\n 다음값을 차례로 입력하여 주십시오 \n\n')
a=input('구간 최저값( a )을 입력하시오 : '); % a
b=input('구간 최댓값( b )을 입력하시오 : '); % b
y0=input('초기값( y0 )을 입력하시오 : '); % y0
h=input('간격( h )을 입력하시오 : '); % h
end
%------------------------------------------------ Euler 방식 --------------
n=0; Y=y0;
fprintf('\n Euler 방식 \n y%d = %2.6f \n',n,Y);
for i=a:h:b;
t=i; y=Y; f=eval(F);
yi=y+f*h; % 결과
n=n+1;
Y=yi;
fprintf(' y%0.0f = %2.6f \n',n,yi);
end
%------------------------------------------------ Heun 방식 ---------------
yup0=y0; n=0; beforeY=yup0; Y=yup0;
fprintf('\n Heun 방식 \n y%d = %2.6f \n',n,Y);
for i=a:h:b;
t=i; y=Y; f=eval(F);
yup0=y+f*h; % 예측자 방정식 y임시값
t=i+h; y=yup0; g=eval(F);
yi=beforeY+((f+g)/2)*h; % 결과
n=n+1;
Y=yi;
beforeY=Y;
fprintf(' y%0.0f = %2.6f \n',n,yi);
end
%--------------------------------------------- Runge-Kutta 방식 -----------
Y=y0; n=0;
fprintf('\n Runge-Kutta 방식 \n y%d = %2.6f \n',n,Y);
for i=a:h:b;
t=i; y=Y; f1=eval(F); k1=f1;
t=i+(h/2); y=Y+(k1*h/2); f2=eval(F); k2=f2;
t=i+(h/2); y=Y+(k2*h/2); f3=eval(F); k3=f3;
t=i+h; y=Y+k3*h; f4=eval(F); k4=f4;
yi=Y+(k1+2*k2+2*k3+k4)*(h/6); % 결과
n=n+1;
Y=yi;
fprintf(' y%0.0f = %2.6f \n',n,yi);
end
1.Euler법
2.Heun법
3.Runge-Kutta법
4.소스코드
Do it. 임의의 미분방정식 y' = f(t, y)를 정하고, 아래 방식을 사용하여 구간 0 에서 4 까지 간격 1로 설정하여 적분하시오.
#11-1
▣ Euler 방식
접근 1.
접근 2.
#11-2
▣ Heun 방식
접근 1.
접근 2.
#11-3
▣ Range Kutta 방식
접근 1.
접근 2.
검증. 손풀이와 일치합니다.
한학기 고생하셨습니다 교수님!
남은 한해 마무리 잘하시고
내년에는 다른 자리에서 찾아뵙도록 하겠습니다!
% 여기서부터 끝까지 블록지정하여야합니다.
clear all
clc
F='9*t^2-y' % 함수식
fprintf(' 어느것으로 검증하시겠습니까? \n\n 1 .지정함수에 저의 구간과 초기값\n 2 .지정함수에 다른 구간과 초기값 \n\n');
start=input('번호를 입력하여 주십시오 (숫자만 입력하십시오) : ');
if start==1
fprintf('\n 저의 구간은 [a,b]=[0,4] 이고 y0=1, h=1 입니다. \n ');
a=0; b=4; y0=1; h=1;
else
fprintf('\n 다음값을 차례로 입력하여 주십시오 \n\n')
a=input('구간 최저값( a )을 입력하시오 : '); % a
b=input('구간 최댓값( b )을 입력하시오 : '); % b
y0=input('초기값( y0 )을 입력하시오 : '); % y0
h=input('간격( h )을 입력하시오 : '); % h
end
%------------------------------------------------ Euler 방식 --------------
n=0; Y=y0;
fprintf('\n Euler 방식 \n y%d = %2.6f \n',n,Y);
for i=a:h:b;
t=i; y=Y; f=eval(F);
yi=y+f*h; % 결과
n=n+1;
Y=yi;
fprintf(' y%0.0f = %2.6f \n',n,yi);
end
%------------------------------------------------ Heun 방식 ---------------
yup0=y0; n=0; beforeY=yup0; Y=yup0;
fprintf('\n Heun 방식 \n y%d = %2.6f \n',n,Y);
for i=a:h:b;
t=i; y=Y; f=eval(F);
yup0=y+f*h; % 예측자 방정식 y임시값
t=i+h; y=yup0; g=eval(F);
yi=beforeY+((f+g)/2)*h; % 결과
n=n+1;
Y=yi;
beforeY=Y;
fprintf(' y%0.0f = %2.6f \n',n,yi);
end
%--------------------------------------------- Runge-Kutta 방식 -----------
Y=y0; n=0;
fprintf('\n Runge-Kutta 방식 \n y%d = %2.6f \n',n,Y);
for i=a:h:b;
t=i; y=Y; f1=eval(F); k1=f1;
t=i+(h/2); y=Y+(k1*h/2); f2=eval(F); k2=f2;
t=i+(h/2); y=Y+(k2*h/2); f3=eval(F); k3=f3;
t=i+h; y=Y+k3*h; f4=eval(F); k4=f4;
yi=Y+(k1+2*k2+2*k3+k4)*(h/6); % 결과
n=n+1;
Y=yi;
fprintf(' y%0.0f = %2.6f \n',n,yi);
end