Numerical Analysis Spring Semester 2011 Homework (part 1) 환경공학과 20061446 김중호
I.1 Taylor 급수를 유도하고 절단 오차를 설명하라.
절단오차 수학적으로 엄밀하게 주어지는 함수f 의 값을, 유한의 사칙 연산의 반복 계산 식fa 로 근사하는 경우, (fa-f)의 오차가 생긴다. 이것을, 절단 오차(truncation error)라 한다. 예를 들면, 테일러급수를 이용하여 삼각함수를 계산할 때, 무한급수의 계산을 유한 항까지의 계산으로 중단하기 위해서, 절단오차가 발생한다.
I.2 다음의 역행렬을 구하는 문제에 대하여 1) 알고리즘을 설명하고 프로그램을 작성 실행하라. 2) 책의 프로그램을 Visual Fortran, Visual C 등의 Compiler를 이용하여 실행하고 알고리즘 및 계산 결 과를 설명하라. 3) 본 프로그램을 Visual Basic 프로그램으로 변환하라.
(1)알고리즘 알고리즘:알고리즘: 어떠한 문제를 해결하기 위한 여러 동작들의 유한한 모임이다. 입력 : 외부에서 제공되는 자료가 0개 이상 존재한다. 출력 : 적어도 1개 이상의 결과를 내어야 한다. 명확성 : 각 명령어들은 명확하고 모호하지 않아야 한다. 유한성 : 알고리듬의 명령어들은 유한번의 수행후에 종료되어야 한다. 이것 은 수행 시간의 현실적인 유한성을 의미한다. 효과성 : 모든 명령어들은 원칙적으로 종이와 연필만으로 수행될 수 있는 기본적인 것이어야 한다.
#include <stdio.h> #include <stdlib.h> main() { int i, j; ↑ 전처리 선언부 ↓ /* < 주 프로그램 > */ #include <stdio.h> #include <stdlib.h> main() { int i, j; double a[2][2];/* 2×2 입력행렬 */ double b[2][2];/* 2×2 출력행렬 */ double d;/* A의 행렬식 */ 자료 입력부 /*** step 1 자료의 입력 ***/ printf("2×2 행렬의 역행렬 계산. \n"); for (i=0 ; i<2 ; i++){ for (j=0 ; j<2 ; j++){ printf ("a%d%d=", i+1, j+1); scanf ("%lf", &a[i][j]); }
↑ 계산부 ↓ /*** step 2 행렬식의 계산 ***/ d=a[0][0]*a[1][1]-a[0][1]*a[1][0]; /*** step 3 에러 처리 ***/ if(d==0.0){ printf("행렬이 정칙이 아닙니다\n"); exit(1); } /*** step 4 역행렬 계산 ***/ b[0][0] = a[1][1]/d; b[0][1] = -a[0][1]/d; b[1][0] = -a[1][0]/d; b[1][1] = a[0][0]/d; 자료출력부 /*** step 5 결과의 출력 ***/ printf ("\n <해> \n"); printf ("B \n"); for (i=0 ; i<2 ; i++){ for (j=0 ; j<2 ; j++){ printf (" % lf", b[i][j]); printf ("\n");
Visual Fortran 2) 책의 프로그램을 Visual Fortran, Visual C 등의 Compiler를 이용하여 실행하고 알고리즘 및 계산 결과를 설명하라. <Visual Fortran> c < 주 프로그램 > implicit double precision (a-h, o-z) parameter (nmax=8) dimension a(nmax,nmax), wv(nmax), lsw(nmax) c *** 단계 1 자료 입력 *** write(6,*) 'LU 분해에 따른 역행렬의 계산' write(6,*) 'LU 분해의 계산' write(6,*) '행렬의 크기 n =' read(5,*) n write(6,*) '행렬 요소의 입력' call s_inmg(a,n,n,'a')
c. 단계 2 X=A^-1의 계산. call s_invm(a,wv,n,lsw,ierr) c. 단계 3 계산 결과의 표시 c *** 단계 2 X=A^-1의 계산 *** call s_invm(a,wv,n,lsw,ierr) c *** 단계 3 계산 결과의 표시 *** if(ierr.eq.1) then write(6,*) '행렬이 정칙이 아님' else write(6,*) '계산 결과' call s_outm(a,n,n,'x') end if stop end c < LU 분해에 따른 역행렬 계산의 subroutine > subroutine s_invm(a,wv,n,lsw,ierr) c a : n*n 입력 행렬 /계산 결과 (in/out) c wv : n 워크 벡터 (work) c n : 스칼라 행렬의 크기 (in) c lsw : n*1 행의 교환 정보 (work) c ierr : 스칼라 에러 코드 0:정상 1:비 정상 (out) implicit double precision (a-h, o-z) dimension a(n,n), wv(n), lsw(n)
c *** 단계 1 Doolittle법에 따른 LU 분해 *** call s_dot(a,n,lsw,ierr) if(ierr.eq.1) then return end if c *** 단계 2 y의 반복 계산 *** do i=1,n do j=i+1,n sum=0.0 do k=i+1,j-1 sum=sum+a(j,k)*a(k,i) enddo a(j,i)=-a(j,i)-sum
c *** 단계 3 x의 반복 계산 *** do j=n,1,-1 do k=j,n wv(k)=a(j,k) enddo do i=1,n sum=0.0 do k=j+1,n sum=sum+wv(k)*a(k,i) if(j.lt.i) a(j,i)=-sum/wv(j) if(j.eq.i) a(j,i)=(1.0-sum)/wv(j) if(j.gt.i) a(j,i)=(a(j,i)-sum)/wv(j) c *** 단계 4 pivot 교환에 따른 열의 교환 *** do j=1,n wv(j)=a(i,j) do k=1,n a(i,lsw(k))=wv(k) ierr=0 return end
<Visual C> /. < 주 프로그램 >. / #include "smp <Visual C> /* < 주 프로그램 > */ #include "smp.h" main() { int i,N,*LSW; double *a, *wv; /*** 단계 1 자료 입력 ***/ printf("LU 분해에 따른 역행열의 계산\n"; printf("행렬 A의 크기 N = "); scanf("%d", &N); a=calloc(N*N, sizeof (double)); wv=calloc(N, sizeof (double)); LSW=calloc(N, sizeof (int)); if(a==NULL || wv==NULL || LSW==NULL){ printf("\n 메모리가 확보되지 않았음"); exit(1); } printf("행렬 A의 요소의 입력\n"); S_INMG(a,N,N,"a");
/. 단계 2 X=A^-1의 계산. / i=S_INVM(a,wv,N,LSW); /. 단계 3 계산 결과의 표시 /*** 단계 2 X=A^-1의 계산 ***/ i=S_INVM(a,wv,N,LSW); /*** 단계 3 계산 결과의 표시 ***/ if(i){ printf("행렬이 정칙이 아님") }else{ printf("계산 결과\n"); S_OUTM(a,N,N,"x") } /* < LU 분해에 따른 역행열 계산의 함수 > */ int S_INVM(double *a, double *wv, int N, int *LSW) /* 반환값 : 에러 코드 0:정상 1:이상 a : N*N 입력 행렬 /역행 열 (In/Out) wv : N*1 작업 용 (Work) N : 스칼라 행렬의 크기 (In) LSW : N*1 행의 교환 정보 (Work) */ { int i, j, k, ks; double sum;
/. 단계 1 Doolittle법에 따른 LU 분해. / i=S_DOT(a,N,LSW) if(i==1) return 1; / /*** 단계 1 Doolittle법에 따른 LU 분해 ***/ i=S_DOT(a,N,LSW) if(i==1) return 1; /*** 단계 2 Y의 반복 계산 ***/ for(i=0;i<N;i++){ for(j=i+1;j<N;j++){ sum=0.0; for(k=i+1;k<j;k++) sum=sum+a[N*j+k]*a[N*k+i]; a[N*j+i]=-a[N*j+i]-sum; } /*** 단계 3 X의 반복 계산 ***/ for(j=N-1;j>=0;j--){ for(k=j;k<N;k++) wv[k]=a[N*j+k]; sum=0; for(k=j+1;k<N;k++) sum=sum+wv[k]*a[N*k+i]; if(j<i) a[N*j+i]=-sum/wv[j]; if(j==i) a[N*j+i]=(1.0-sum)/wv[j]; if(j>i) a[N*j+i]=(a[N*j+i]-sum)/wv[j];
/*** 단계 4 Pivot 교환에 따른 열의 교환 ***/ for(i=0;i<N;i++){ for(j=0;j<N;j++) wv[j]=a[N*i+j]; for(k=0;k<N;k++) a[N*i+LSW[k]]=wv[k]; } return 0;
III.1 3원 연립방정식에 대하여 행렬식(Determinant)을 이용하여 역행렬을 구하는 방법과 연립방정식을 푸는 방법을 설명하라 (수학책 참조).
행렬식 정방 행렬A의 LU분해가 A=LU인 경우, 그 행 렬식|A| 는 |A|=|L| |U| 로 표현할 수 있다. Doolittle법에 따라LU 분 해에서는, L의 대각 요소는 모두 1이고, 삼각 행렬의 행렬식은 그 대각 요소의 적(積)이기 때문에 가 된다. 따라서, |A| 은 U의 모든 대각 요소의 적으로서 구해진다. 단,LU 분해에 있어서 Pivot의 선택이 있는 경우는, Pivot을 교환할 때마 다 행렬식의 부호를 바꾸어주기 위해, 교환 회수가 m인 경우
가 된다. 따라서, |A| 은 U의 모든 대각 요소의 적으로서 구해진다. 단,LU분해에 있어서 Pivot의 선택이 있는 경우는, Pivot을 교환할 때마다 행렬식의 부호를 바꾸어주기 위해, 교 환 회수가 m인 경우 가 된다. Doolittle법에 따른LU분해의 결과, 구해진U와 Gauss의 소거법에 있어서 전진 소거가 끝난 단계에서의 식 (4.14)의 계수 행렬이 같은 것 은 앞서 서술하였다. 이것으로부터, Gauss 소 거법에 있어서도 모든 Pivot의 적
에 따라 행렬식을 구하는 것이 가능하다. 행렬식만 구하는 경우는, Gauss의 단순 소거법에 있어서 우변의 계산과 후진 대입의 계산을 생략하고, 전진 소거를 하여, 모든 Pivot의 적을 구하면 된다. 따라서, 행렬식의 계산 순서는 다음과 같다.
역행렬 행렬 A의 역행렬 이란, 다음의 관계를 만족시키는 행렬이다. 여기에서,I는 단위 행렬이다. 역행렬의 계산은, 식(4.4)로부터 구하는 것보다, 소거법 등을 이용하는 편이 계산 횟수가 적게 든다. 여기에서는,LU분해에 따른 계산 방법을 서술한다.
은 미지이므로 X라고 치환하면, 식 (5.5)로부터 AX=I (5.6)으로 나타내진다. Doolittle법의 LU 분해에 따라 A=LU를 구하여 LY=I 의 관계로부터 행렬 를 계산하고, 계속해서 UX=Y
의 관계로부터 행렬X를 계산할 수 있다. 여기에서, 는 LY=I 의 관계로부터 대각 요소가 모두 1인 하삼각행렬이 되고, 의 순서로, 그리고 j를 1부터 n까지라고 하면
으로 구해진다. 또, 는 의 순서로, 그리고 j를 n부터 1까지라고 하면 으로 구해진다. 또한, Y는 하삼각행렬이기 때 문에 L의 배열에 중복되며, X도 U의 영역에 중복되어, 이에 따라 배열 영역을 절약할 수 있다. 나아가, LU분해의 결과를 A에 중복시키 면, X의 계산 결과도 A에 중복시키는 것이 가 능하다. 단, LU분해에 있어서 Pivot을 교환하 는 경우는, 그것에 대응하는 X의 열교환이 필 요하게 된다. Pivot 교환이 있는 경우의 계산 순서 를 서술하였다.
III.2 3원 연립방정식을 이용하여 Gauss 소거법의 알고리즘을 유도하라.
III.3 다음의 3원 연립방정식의 해를 Gauss의 단순 소거법 및 Pivot 선택법을 이용하여 구하라. (1) (2) (3)
III.4 위의 3원 연립방정식의 해를 교과서에서 제시된 C 및 Fortran 프로그램을 운영하여 구하라.
<Fortran프로그램> c < 주 프로그램 > implicit double precision (a-h, o-z) integer ierr parameter (max=8) dimension x(max), a(max, max), b(max) c *** 단계 1 자료 입력 *** write(6,*) 'Gauss의 소거법에 따른 ax=b (a:n*n, x, b:n*1)의 계산‘ write(6,*) 'n=' read(5,*) n call s_inmg(a,n,n,'a') call s_inmg(b,n,1,'b') c *** 단계 2 Gauss 소거법의 계산 *** call s_gaus(x,a,b,n,ierr) c *** 단계 3 계산 결과의 표시 *** if(ierr.eq.1) then write(6,*) '부정확 또는 불능' stop end if call s_outm(x,n,1,'x') end
c < Gauss 소거법의 subroutine > subroutine s_gaus(x,a,b,n,ierr) c c x : n * 1 방정식의 해 (out) c a : n * n 입력 행렬 (in/work) c b : n * 1 입력 벡터 (in/work) c n : scalar 방정식의 원래 해 (in) c ierr : scalar 에러 코드 0 : 정상 1 : 이상 (out) implicit double precision (a-h, o-z) dimension x(n), a(n,n), b(n) parameter (e_eps=1.0e-14)
c *** 단계 2 후진 대입 *** do k=n,1,-1 if(abs(a(k,k)).le.e_eps) then ierr=1 return end if s=0.0 do j=k+1,n s=s+a(k,j)*x(j) enddo x(k)=(b(k)-s)/a(k,k) ierr=0 end c *** 단계 1 전진 소거 *** do k=1,n-1 call s_pivo(a,lc,n,k,ierr) if(ierr.eq.1) then return else if(lc.ne.k) then tmp = b(k) b(k) = b(lc) b(lc) = tmp end if do i=k+1,n p=a(i,k)/a(k,k) do j=k+1,n a(i,j)=a(i,j)-p*a(k,j) enddo b(i)=b(i)-p*b(k)
c < pivot 선택(행의 교환)의 subroutine > subroutine s_pivo(a,m,n,k,ierr) c a : n * n pivot 교환을 하는 행렬 (out/in) c m : 스칼라 교체된 번호 (out) c n : 스칼라 행렬의 크기 (in) c k : 스칼라 pivot의 선택의 열의 위치 (in) c ierr : 스칼라 에러 코드 0 : 정상 1 : 이상 (out) implicit double precision (a-h, o-z) dimension a(n,n) parameter (e_eps=1.0e-14) c *** 단계 1 초기 설정 *** m = k d = abs(a(k,k)) c *** 단계 2 최대 pivot의 탐색 *** do i=k+1,n if(abs(a(i,k)).gt.d) then m = i d = abs(a(i,k)) end if enddo
c *** 단계 3 이상 처리 *** if(abs(d).le.e_eps) then ierr=1 return else if(m.eq.k) then ierr=0 end if c *** 단계 4 pivot의 교환 *** do i=k,n tmp = a(k,i) a(k,i) = a(m,i) a(m,i) = tmp enddo end
c < 행렬의 key 입력 subroutine > subroutine s_inmg(a,n,m,name) c a : n * m key 입력을 하는 행렬 (out) c n : 스칼라 행의 크기 (in) c m : 스칼라 열의 크기 (in) c name : 1문자 행렬의 이름 (in) implicit double precision (a-h, o-z) character name*1 dimension a(n,m) write(6,*) do i=1,n if(m.eq.1) then write(6,30) name, i 30 format(a,'(',i2,')의 입력') else write(6,10) name, i, name, i, m 10 format(a,'(',i2,', 1)~',a,'(',i2,',',i2,')의 입력') end if read(5,*)(a(i,j),j=1,m) enddo return end
c < 행렬의 화면 표시 subroutine > subroutine s_outm(a,n,m,name) c a : n * m 화면 표시를 하는 행렬 (out) c n : 스칼라 행의 크기 (in) c m : 스칼라 열의 크기 (in) c name : 1 문자 행렬의 이름 (in) implicit double precision (a-h, o-z) character*1 name dimension a(n,m) write(6,10) name 10 format(1h,a,'=') do i=1,n write(6,20)(a(i,j),j=1,m) 20 format(8f15.6) enddo return end
<C 프로그램> #include<stdio.h> #include<conio.h> void main() { int i,j,k,h; float l,m,n,o,p,q,r; clrscr(); float A[3][4]={0, }; for(i=0;i<3;i++) for(j=0;j<4;j++) printf("Input number A[%d][%d]=",i,j); scanf("%f",&A[i][j]); }
for(j=3;j>=0;j--) { A[0][j]=A[0][j]/A[0][0]; } l=A[1][0]/A[0][0]; m=A[2][0]/A[0][0]; for(k=1;k<2;k++) for(j=0;j<4;j++) A[k][j]=A[k][j]-A[0][j]*l; A[k+1][j]=A[k+1][j]-A[0][j]*m; for(j=3;j>0;j--) A[1][j]=A[1][j]/A[1][1]; o=A[0][1]/A[1][1]; p=A[2][1]/A[1][1]; for(k=0;k<1;k++)
{ for(j=1;j<4;j++) A[k][j]=A[k][j]-(A[1][j]*o); A[k+2][j]=A[k+2][j]-(A[1][j]*p); } for(j=3;j>1;j--) A[2][j]=A[2][j]/A[2][2]; q=A[0][2]/A[2][2]; r=A[1][2]/A[2][2]; for(k=0;k<1;k++) for(j=2;j<4;j++) A[k][j]=A[k][j]-(A[2][j]*q); A[k+1][j]=A[k+1][j]-(A[2][j]*r); for(i=0;i<3;i++) for(j=0;j<4;j++) printf(" %5.1f",A[i][j]); printf("\n");
III.5 위의 3원 연립방정식의 해를 Gauss-Jordan 법에 의하여 구하라.
(해) 행렬식으로 표현한다면 제 1단계는, 계수 행렬의 제1열의 대각 요소만 1로 하고 이외는 0으로 한다. 이 때문에, 제1행을 1/2배로 한다.
다음에, 제2행-제1행, 제3행-4×제1행을 계산하여 제 2 단계는, 계수 행렬의 제2열의 대각 요소만 1로 하고 이외는 0으로 한다. 이 때문에, 제2행을 -1/3배 한다.
다음에, 제1행-2×제2행, 제3행-(-7)×제2행을 계산하여 제 3 단계는, 계수 행렬의 제3열의 대각 요소만 1로 하고 이외는 0으로 한다. 이 때문에, 제3행을 -3/56배 한다.
다음에, 제1행-(13/3)×제3행, 제2행-(-2/3)×제3행을 계산하여 이것으로부터, 의 해를 얻는다.
III.6 4원 연립방정식을 이용하여 LU 분해법의 알고리즘을 Doolittle 방법 및 Crout 방법에 대하여 유도하라.
III.7 위의 3원 연립방정식의 해를 LU 분해법으로 계산기와 Excel을 이용하여 구하라.
III.8 다음의 연립 1차 방정식을 초기값 로서 Jacobi법, Gauss Seidel 법, SOR 법으로 계산기, Excel, 프로그램을 이용하여 구하라.
IV.1 Derive the all the algorithms using graphs for the case of Bisection, Secant, and Newton Methods.
IV.2 Compile and run the given programs by using Visual Fortran, Visual Basic and Visual C Compilers.
법으로 계산기, Excel, 프로그램(Fortran, IV.3 Solve the example problems by hands, using Excel program, and by the given programs. 의 실근을 2분법, 선형역보간법, Newton 법으로 계산기, Excel, 프로그램(Fortran, Basic, C)을 이용하여 구하라. 단 , , , 으로 해라. (실제값은 1이다)
IV.4 연립비선형방정식을 구하기 위한 Newton 법의 알고리즘을 Newton-Raphson법의 알고리즘과 비교하여 유도하라.
6.2 Newton-Raphson법 (6.6) ❖그림6.5: 1차도함수의 기울기 (6.5) ❖근을 구하는 공식들 중 가장 넓게 사용됨 (1)초기 가정값이 라면 (2)점 에 접하는 접선을 구할 수 있고 (3)이 접선이 축과 교차하는 점 개선된 근 ❖그림6.5: 1차도함수의 기울기 (6.5) (6.6) Newton-Raphson공식
6.2.2 Newton-Raphson 법의 문제점. Newton-Raphson법은 매우 효율적이지만 제대로 수행되지 못하는 경우도 있다. (예6.5)Newton-Raphson법의 사용시 느리게 수렴하는 함수의 예. Newton-Raphson법을 사용해서 의 양의 근을 구하라. 초기가정은 한다. (Sol.) ❖근의 참값 1에 수렴은 하지만 수렴속도가 매우 느림
❖Newton-Raphson법이 수렴하지 않는 네 가지 경우 ❖Newton-Raphson법에 대한 일반적인 수렴 판정의 기준은 존재(X) ❖수렴=함수의 성질 & 초기가정의 정확도에 의존함. ❖유일한 해결책 = 근에 ‘’충분히’’ 가까운 초기 가정을 사용하는 것. ❖훌륭한 초기가정 얻기 (i) 문제에 대한 물리적 이해 (ii) 해의 형태에 대한 정보를 제공하는 그래프 사용.
IV.5 다음의 2원 연립 비선형 방정식의 해를 Newton법에 이용하여 구하라. 초기값은 , 이다.
VII.1 최소자승법을 이용하여 선형회귀분석을 수행하는 알고리즘을 BOD 분해능 계수를 추정하는 문제와 시계열 모형중 ARMA 모형의 선형 1차모형 문제에 대하여 설명하라(그림 포함). 선형회귀함수의 계수를 유도하라.
여기서, 평균 하천 유 속(u)은 유량을 단면적으로 나눈 값(Q/A)이다. VII.1 최소자승법을 이용하여 선형회귀분석을 수행하는 알고리즘을 BOD 분해능 계수를 추정하는 문제와 시계열 모형중 ARMA 모형의 선형 1차모형 문제에 대하여 설명하라(그림포함). 선형회귀함수의 계수를 유도하라. 1) 물질이동식 및 해 하천에서의 오염현상은 총체적인 개념으로 BOD 농도를 사용하여 해석하며, 이러한 BOD 농도에 대한 물질이동식으로 해석한다. 물질이동식은 유속에 의한 이류유송과 생화학적 분해 반응을 고려하면 다음의 편미분방정식으로 표현된다. 여기서, 평균 하천 유 속(u)은 유량을 단면적으로 나눈 값(Q/A)이다. 위의 식을 정상 상태의 상미분 방정식으로 표현하면 다음과 같다. 변수분리법으로 위의 상미분 방정식을 다음과 같이 풀 수 있다. 위의 적분은 x=0일 때의 Co에서부터 하류 거리 x일 때 농도 C까지 설정되었다. 적분하면 다음과 같은 식을 얻을 수 있다. (1) 양변에 지수를 취하면, 다음과 같다. 여기서, Co는 원점 X=0에서의 초기 농도이다.
2) 반응계수 추정을 위한 선형회귀분석방법의 적용 식을 농도와 이동 거리에 대한 식으로 정리하면 다음과 같다. 이동 거리에 따라 측정된 BOD 농도/초기농도에 ln를 취하여 y축으로 이동거리/유속을 x 축으로 설정하여 측정된 자료를 도시한다. 이 도시된 그래프의 기울기는 이다. 따라서, 기울기가 BOD 분해능 계수이다. 다음에 이러한 판정 기법의 예를 나타내었다. 실험오차나 기타 오차에 의하여 측정된 값이 그래프에 정확히 일치하지 않는 경우에는 선형회귀분석 기법을 이용하여 그래프에 가장 일치하는 경우의 기울기를 구하면 된다. Excel의 메뉴에 있는 Regression(상관분석)을 사용하여 이러한 분석을 수행한 후 그래프를 도시하여 실측값과 계산치와의 비교 분석을 수행한다.(r결과클릭)
VIII.1 막대공식, 사다리꼴공식, Sympson 공식의 수치적분법을 그림을 이용하여 설명하라. 막대공식: 를 구하는 것이 곤란한 경우가 있다. 이러한 경우에는, 수치 해석에 따라 근사값을 구하면 된다. (클릭하면 그림) 정적분은 X=a, X=b, y=f(x) 및 축으로 둘러싸인 면적을 의미한다. 이것으로부터, 구간 [a,b]를 n개의 등간격 의 소구간 으로 나누면, 정적분은 로 정의할 수 있다. 여기에서, , 이다. 이 정의로부터, n을 충분히 큰 유한의 정수라 하면, 그림 8.1에 보여지는 정적분의 근사값은
VIII.1 막대공식, 사다리꼴공식, Sympson 공식의 수치적분법을 그림을 이용하여 설명하라.
VIII.1 막대공식, 사다리꼴공식, Sympson 공식의 수치적분법을 그림을 이용하여 설명하라. 막대공식: 를 구하는 것이 곤란한 경우가 있다. 이러한 경우에는, 수치 해석에 따라 근사값을 구하면 된다. (클릭하면 그림) 정적분은 X=a, X=b, y=f(x) 및 축으로 둘러싸인 면적을 의미한다. 이것으로부터, 구간 [a,b]를 n개의 등간격 의 소구간 으로 나누면, 정적분은 로 정의할 수 있다. 여기에서, , 이다. 이 정의로부터, n을 충분히 큰 유한의 정수라 하면, 그림 8.1에 보여지는 정적분의 근사값은
VIII. 2 을 막대공식, 사다리꼴 공식과 Sympson 공식으로 계산하고 (계산기, Excel, Program을 이용(유체역학 교과서 부록에 있음), 실제값과 비교하라. 단, 세분 폭은 h=0.1 이라고 한다.
VIII. 2 을 막대공식, 사다리꼴 공식과 Sympson 공식으로 계산하고 (계산기, Excel, Program을 이용(유체역학 교과서 부록에 있음), 실제값과 비교하라. 단, 세분 폭은 이라고 한다. (해) 의 값은 이다. 사다리꼴 공식으로는 Sympson의 공식으로는 가 된다. 실제값은 이다. 따라서, 사다리꼴 공식의 오 차는, Sympson 공식의 오차는 이다.
VII.1 선형함수에 대하여 최소자승법을 이용하는 선형회귀분석 알고리즘을 유도 혹은 설명하라.
VII.2 선형함수에 대하여 최소자승법을 이용하는 선형회귀분석 알고리즘을 유도 혹은 설명하라. 파라미터 이 함수 에 선형으로 나타나는 경우로 (7.15) 으로 표현할 수 있다. 여기에서, 는 X의 다항식 이거나, 직교 다항식이다
VII.2 ARMA 모형에서의 최소자승법을 설명하라.
VII.3 ARMA 모형에서의 최소자승법을 설명하라.
VIV.1 상미분방정식에 대한 다음의 해를 구하라. 1) 다음의 상미분 방정식을 세분 폭 h=0.1으로 x=0.5까지 Euler법, 수정된 오일러법, Runge-Kuttan법으로 구하라 (계산기, Excel, 프로그램). y'(x)=y y(0)=1.0 2) 위의 방정식을 3단의 Adams-Bashforth법 및 Adams-Moulton법으로 구하라. 단, 수정자 공식의 최대 반복 회수를 Nmax=4, 수렴 판정 정수를 ε=10^-7이라고 한다 (계산기, Excel, 프로그램).
VIV. 1 상미분방정식에 대한 다음의 해를 구하라. 1) 다음의 상미분 방정식을 세분 폭 h=0. 1 으로 x=0 VIV.1 상미분방정식에 대한 다음의 해를 구하라. 1) 다음의 상미분 방정식을 세분 폭 h=0.1 으로 x=0.5 까지 Euler법, 수정된 오일러법, Runge-Kuttan법으로 구하라 (계산기, Excel, 프로그램). Euler법: (풀이) Euler법으로 계산하면 이것으로부터, 근사 값으로서 1.61051을 얻는다. 이 상미분 방정식의 해석 해는 이다. 에서의 절대치 오차는 가 된다.
수정된 오일러법: (풀이) 수정된 Euler법으로 계산하면 이 상미분 방정식의 해석 해는 이다. 에서의 절대 값 오차는 이다 수정된 오일러법: (풀이) 수정된 Euler법으로 계산하면 이 상미분 방정식의 해석 해는 이다. 에서의 절대 값 오차는 이다. Euler법보다 정밀도가 좋은 것을 알 수 있다.
Runge-Kuttan법: (풀이) Runge-Kutta법으로 계산하면, 으로부터 가 된다 Runge-Kuttan법: (풀이) Runge-Kutta법으로 계산하면, 으로부터 가 된다. 이후 을 초기 값으로 하여 이 계산을 반복하면 가 된다. 이 상미분 방정식의 해석 해는 이므로, 에서의 절대 값 오차는 이다. 수정된 Euler법보다 정밀도가 좋은 것을 알 수 있다.
(풀이) 계산 결과를 표에 보여 준다. 계산 값은 이고, 실제 값과 비교하면 오차는 이다. 2) 위의 방정식을 3단의 Adams-Bashforth법 및 Adams-Moulton법으로 구하라. 단, 수정자 공식의 최대 반복 회수를 Nmax=4, 수렴 판정 정수를 ε=10^-7이라고 한다 (계산기, Excel, 프로그램). (풀이) 계산 결과를 표에 보여 준다. 계산 값은 이고, 실제 값과 비교하면 오차는 이다. 1 2 3 4 5 0.0000000 0.1000000 0.2000000 0.3000000 0.4000000 0.5000000 1.0000000 1.1051708 1.2214026 1.3498153 1.3498620 1.3498639 1.3498640 1.4917830 1.4918342 1.4918363 1.4918364 1.6486816 1.6487384 1.6487407 1.6487408
VIV.2 수정된 Euler법을 2차의 Taylor 전개식으로부터 유도하라.
VIV.2 수정된 Euler법을 2차의 Taylor 전개식으로부터 유도하라.
VIV.3 외삽법과 내삽법의 알고리즘을 이용하여 다단법중 Adams-Basforth법과 Adams-Moulton법의 알고리즘을 유도하라.
VIV.3 외삽법과 내삽법의 알고리즘을 이용하여 다단법중 Adams-Basforth법과 Adams-Moulton법의 알고리즘을 유도하라.
국소절단오차 2 3/2 -1/2 3 23/12 -16/12 5/12 4 55/24 -59/24 37/24 -9/24 5 1901/720 -2774/720 2616/720 -1274/720 251/720
Adams-Moulton법의 계수 2 1/2 3 5/12 8/12 -1/12 4 9/24 19/24 -5/24 1/24 5 국소 절단 오차 2 1/2 3 5/12 8/12 -1/12 4 9/24 19/24 -5/24 1/24 5 251/720 646/720 -264/720 106/706 -19/720