Numerical Analysis Spring Semester 2011 Homework (part 1)

Slides:



Advertisements
Similar presentations
1. 2 차원 배열  배열은 동일한 데이터 유형으로 여러 개의 변수를 사용할 경우 같은 이 름으로 지정하여 간편하게 사용할 수 있도록 하는 것으로서 앞에서 1 차원 배열을 공부하였습니다.  2 차원 배열은 바둑판을 생각하면 되며, 1 차원 배열에서 사용하는 첨자를 2.
Advertisements

제 2 장. 비선형 방정식의 해법 1. 방정식의 근 2. 방정식의 실근을 구하는 해법 3. 다항식의 복소수 근을 구하는 해법.
수치해석 (Numerical Analysis) 보간법 (Interpolation). Page 2 보간법 (Interpolation) In this chapter … 보간법이란 ? 통계적 혹은 실험적으로 구해진 데이터들 (x i ) 로부터, 주어진 데이터를 만족하는 근사.
Add Your Text 5. 지수함수와 로그함수 1. 지수함수 2. 로그함수 · 지수함수와 그 그래프 · 지수방정식과 지수부등식 · 로그 함수와 그 그래프 · 로그방정식과 로그부등식.
재료수치해석 HW # 박재혁.
적분방법의 연속방정식으로부터 Q=AV 방정식을 도출하라.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
(Numerical Analysis of Nonlinear Equation)
제 3장. 연립 방정식의 해법 행렬과 방정식의 행렬 표현 소거법 행렬식과 역 행렬 노름과 조건수 반복법
#include <stdio.h> int main(void) { float radius; // 원의 반지름
제 9 장 구조체와 공용체.
수치해석 6장 예제문제 환경공학과 천대길.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
- 1변수 방정식의 solution 프로그램 (Bisection method, Newton-Raphson method)
제 6 장. 수치미분과 수치적분.
역행렬 구하는 프로그램 C와 Fortran 환경공학과 천대 길.
Chapter 02 순환 (Recursion).
P150 문제를 프로그래밍 할 것 Source file (헤더파일포함), 실행화면 (학번_이름_1.txt)
제Ⅲ부 상미분 방정식의 근사해법과 유한요소해석
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
수치해석 2011 Homework Part.1 환경공학과 정수교.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
CAS (Computer Algebra System) 소개
6장. printf와 scanf 함수에 대한 고찰
Numerical Methods for Material Scientists
행렬 기본 개념 행렬의 연산 여러가지 행렬 행렬식 역행렬 연립 일차 방정식 부울행렬.
근사값과 반올림 오차 절단 오차와 Taylor 급수 오차의 전파
14장. 포인터와 함수에 대한 이해.
11장. 1차원 배열.
제4장 제어 시스템의 성능.
Ⅲ. 이 차 방 정 식 1. 이차방정식과 그 풀이 2. 근 의 공 식.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
프로그래밍 개요
어서와 C언어는 처음이지 제14장.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
Metal Forming CAE Lab., Gyeongsang National University
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
8장. spss statistics 20의 데이터 변환
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
홍수추적 담당교수명 : 서 영 민 연 락 처 :
CAS (Computer Algebra System) 소개
9장. C 언어의 핵심! 함수. 9장. C 언어의 핵심! 함수 9-1 함수의 정의와 선언 main 함수 다시 보기 : 함수의 기본 형태 { } 그림 9-1.
미분방정식.
수학10-나 1학년 2학기 Ⅳ.삼각함수 4. 삼각방정식과 삼각부등식(9/12) 삼각함수 수업계획 수업활동.
수학10-나 1학년 2학기 Ⅱ.부등식의 영역 2. 연립부등식의 영역 (3/5) 부등식 영역 수업계획 수업활동.
수학10-나 1학년 2학기 Ⅱ.부등식의 영역 1. 부등식의 영역(2/5) 부등식 영역 수업계획 수업활동.
알고리즘 알고리즘이란 무엇인가?.
에어 PHP 입문.
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
수학10-나 1학년 2학기 Ⅳ.삼각함수 3. 삼각함수의 그래프( 8 / 12 ) 삼각함수 수업계획 수업활동.
제 5장 제어 시스템의 성능 피드백 제어 시스템 과도 성능 (Transient Performance)
Chapter 1 단위, 물리량, 벡터.
1. 접선의 방정식 2010년 설악산.
CAS (Computer Algebra System) 소개
쉽게 배우는 알고리즘 2장. 점화식과 점근적 복잡도 분석
상관계수.
Week 4: 다변수(2변수) 데이터분석 5장_1(산포도: scatter plot) 동영상 1,2,3,4,5
실습과제 (변수와 자료형, ) 1. 다음 작업 (가), (나), (다)를 수행하는 프로그램 작성
Numerical Analysis Homework(part2)
수치해석 ch3 환경공학과 김지숙.
어서와 C언어는 처음이지 제21장.
수학 2 학년 1 학기 문자와 식 > 미지수가 2개인 연립방정식 ( 4 / 4 ) 계수가 소수 분수인 연립방정식.
수학10-나 1학년 2학기 Ⅱ.부등식의 영역 3. 부등식의 영역에서 최대, 최소(5/5) 부등식 영역 수업계획 수업활동.
수학 2 학년 1 학기 문자와 식 > 미지수가 2개인 연립방정식 ( 1 / 1 ) 연립일차방정식의 해.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
수학 2 학년 1 학기 문자와 식 > 미지수가 2개인 연립방정식 ( 3 / 4 ) 대입법으로 풀기.
2019 2학기 9장 배열과 포인터 1. 주소, 주소연산자(&) 2. 포인터, 역참조연산자(*) 3. 배열과 포인터.
Presentation transcript:

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