테일러 급수, 오일러, 수정 오일러, Euler, Runge-Kutta, Runge-Kutta-Fehlberg
본 자료는 7페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
해당 자료는 7페이지 까지만 미리보기를 제공합니다.
7페이지 이후부터 다운로드 후 확인할 수 있습니다.

목차

1. 다음 초기치 문제를 0t 2에서 구간간격을 h=0.1로 하여 Taylor 급수법으로 풀어라.
만약 엄밀해가 존재한다면 그 해와 수치결과를 비교하라.

2. 다음 초기치 문제를 0t 2에서 구간간격을 h=0.1과 h=0.01로 하여 Euler 법의 양함수법과 음함수법으로 각각 풀어라. 또한, Euler법의 양함수법으로 풀 때 구간간격을 얼마 이하로 하여야만 수치해가 안정되는지를 조사하여라.

3. 문제 2를 수정 Euler 법으로 다시 풀어라.

9. 다음 초기치 문제를 구간 0t 10에서 구간간격을 h=0.1로 하여 4계 Runge-Kutta법으로 풀어라. 또한, 적응 구간간격 제어를 이용하여 Runge-Kutta-Fehlberg법으로 풀어라. 단, 적응구간간격 제어를 이용할 때 최대허용오차는 0.05%이고 최소허용오차는 0.005%이다.

본문내용

rce >
#include
#include
void main()
{
int i=0;
double j,t,h=0,yr,E;
double y[2000]={0};
y[0]=2;
printf(" \n***Euler법으로 풀어보기!!***\n");
printf(" \n(2) 음함수법 \n");
printf(" \n y(0)값을 입력하세요 ",y[0]); scanf("%d",&y[0]);
printf(" \n 구간간격 h 값을 입력하세요 ",h); scanf("%lf",&h);
printf(" \n =============================================\n ");
for (t=0;t<0.1;t=t+0.01)
{
j=t;
j=t+0.01;
y[i+1]=(y[i]+h*j-h*j*j)/(1-4*h);
i=i+1;
printf("\n t가 %lf 일 때 함수 값은 %lf 입니다.",t+0.01,y[i]);
yr=1.90625*exp(4*(t+0.01))+0.09375-0.125*(t+0.01)+0.25*(t+0.01)*(t+0.01);
E=fabs(yr-y[i])*100/yr;
printf("\n엄밀해는 %lf이고 상대오차는 %lf 퍼센트입니다.\n",yr,E);
}
}
3. 문제 2를 수정 Euler 법으로 다시 풀어라.
y' - 4y = t - t2, y(0) = 2
*** h=0.1 일 때의 Source ***
< C++ Source >
#include
#include
void main()
{
int i=0;
double y0,t,yp,yt,yc,f,h,yr,E;
printf(" \n***수정 Euler법으로 풀어보기!!***\n");
printf(" \n y(0)값을 입력하세요 ",y0); scanf("%lf",&y0);
printf(" \n 구간간격 h 값을 입력하세요 ",h); scanf("%lf",&h);
printf(" \n =============================================\n ");
for (t=0.1;t<2.1;t=t+0.1)
{
f=4*y0+(t-0.1)-(t-0.1)*(t-0.1);
yp=y0+h*f;
yt=4*yp+t-t*t;
yc=y0+0.5*h*(f+yt);
y0=yc;
printf("\n t가 %lf 일 때 함수 값은 %lf 입니다.",t,yc);
yr=1.90625*exp(4*t)+0.09375-0.125*t+0.25*t*t;
E=fabs(yr-yc)*100/yr;
printf("\n엄밀해는 %lf이고 상대오차는 %lf 퍼센트입니다.\n",yr,E);
}
}
*** h=0.01 일 때의 Source ***
< C++ Source >
#include
#include
void main()
{
int i=0;
double y0,t,yp,yt,yc,f,h,yr,E;
printf(" \n***수정 Euler법으로 풀어보기!!***\n");
printf(" \n y(0)값을 입력하세요 ",y0); scanf("%lf",&y0);
printf(" \n 구간간격 h 값을 입력하세요 ",h); scanf("%lf",&h);
printf(" \n =============================================\n ");
for (t=0.01;t<2.01;t=t+0.01)
{
f=4*y0+(t-0.01)-(t-0.01)*(t-0.01);
yp=y0+h*f;
yt=4*yp+t-t*t;
yc=y0+0.5*h*(f+yt);
y0=yc;
printf("\n t가 %lf 일 때 함수 값은 %lf 입니다.",t,yc);
yr=1.90625*exp(4*t)+0.09375-0.125*t+0.25*t*t;
E=fabs(yr-yc)*100/yr;
printf("\n엄밀해는 %lf이고 상대오차는 %lf 퍼센트입니다.\n",yr,E);
}
}
(너무 길어서 중간 생략...)
9. 다음 초기치 문제를 구간 0t 10에서 구간간격을 h=0.1로 하여 4계 Runge-Kutta법으로 풀어라. 또한, 적응 구간간격 제어를 이용하여 Runge-Kutta-Fehlberg법으로 풀어라. 단, 적응구간간격 제어를 이용할 때 최대허용오차는 0.05%이고 최소허용오차는 0.005%이다.
(d) y' - y = 1 - sin t + e-t, y(0) = 0
< C++ Source >
#include
#include
void main()
{
int i=0;
double k[4]={0};
double t,t2,y0=0,y2,f,h=0,y,yr,E;
printf(" \n***Runge-Kutta법으로 풀어보기!!***\n");
printf(" \n y(0)값을 입력하세요 ",y0); scanf("%lf",&y0);
printf(" \n 구간간격 h 값을 입력하세요 ",h); scanf("%lf",&h);
printf(" \n =============================================\n ");
for (t=0.1;t<10;t=t+0.1)
{
f=y0+1-sin(t-0.1)+exp(-1*(t-0.1));
k[0]=f;
t2=(t-0.1)+0.5*h;
y2=y0+0.5*h*k[0];
f=y2+1-sin(t2)+exp(-1*t2);
k[1]=f;
y2=y0+0.5*h*k[1];
f=y2+1-sin(t2)+exp(-1*t2);
k[2]=f;
t2=(t-0.1)+h;
y2=y0+h*k[2];
f=y2+1-sin(t2)+exp(-1*t2);
k[3]=f;
y=y0+h*(k[0]+2*(k[1]+k[2])+k[3])/6;
printf("\n t가 %lf 일 때 함수 값은 %lf 입니다.",t,y);
yr=exp(t)-0.5*exp(-1*t)+0.5*cos(t)+0.5*sin(t)-1;
E=fabs((yr-y)/yr)*100;
printf("\n엄밀해는 %lf 이며, 상대오차는 %lf 퍼센트입니다.\n",yr,E);
y0=y;
}
}
(너무 길어서 중간생략....)
  • 가격2,000
  • 페이지수20페이지
  • 등록일2007.10.12
  • 저작시기2007.5
  • 파일형식한글(hwp)
  • 자료번호#431486
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니