방정식의 해법
1. 시작법
2. 이등분법
3. 가위치기법
4. 수정 가위치기법
근에 가까운 시작접을 잡는것과 하지 않는 것의 차이
- 반복법 사용시 오차를 최대한 줄일 수 있음
시작점
- 반복법으로 방정식의 근을 구하기 위해 대략적으로 추측한 근사값 x0에서부터 시작대로 x1, x2 ..를 구해가는 기법으로 x0를 시작점이라 함.
- 시작점 x0을 어떻게 잡느냐에 따라 -> x1, x2, ...가 근에 -> 수렴하는 속도가 빠르거나/느리거나 발산하는 경우가 존재
=> 가능한 주어진 함수의 성질로 근에 가까운 시작점 x0을 잡는 것이 바람직함.
* x_0가 근에 멀리 떨어진 값이라면 x_100의 근을 취하더라도 큰 오차 발생 가능
반복법
- 어떤 정해진 과정을 차례대로 되풀이하여 구하는 방법
- x0부터 시작하여 x1, .. 를 정해진 방법으로 구하여 최대한 오차를 줄여가면서 방정식의 근을 구하는것
반복법 사용 예시
- f(x) = 13.42 x^2 - 14.21x + 34.45 = 0
->근의 공식으로 쉽게 구할 수 있음.
- f(x) = 3x^8 + 5x^5 + 7x - 21 = 0
- f(x) = e^x ln x + sin x - 1.2 = 0
-> 구하기 어려운 방정식의 근은 반복법으로 구함
-> 위 방정식의 근을 구하는 공식이 없음
매트랩으로 시작점 구하기
clc;
clear all;
N=5;
x0 = -2;
y(1) = x0*x0;
x(1) = x0;
z(1) = x0/2 + 2;
x1(1) = x0;
for n=1:4
x(n+1) = x(n) + 1;
y(n+1) = x(n+1) * x(n+1);
end
plot(x, y);
hold on
for n=1:4
x1(n+1) = x1(n) + 1;
z(n+1) = x1(n+1)/2 +2;
end
plot(x1,z);
- 두 곡선 사이 교점은 -2과 -1 사이 하나와 1과 2 사이 하나가 존재함
-> 시작점은 -1, 2
이등분법에서 중간값 정리를 사용하는 이유
- 폐구간 함수일 경우 구간에 적어도 근이 하나 존재한다고 함
이등분법
- 구간 (a, b)를 P점을 포함하도록 계속 이등분 하는것
- 아래의 가정이 필요
1. 구간 (a, b)에서 연속 함수 f(x)가 주어지고, f(a), f(b)가 반대 부호를 갖는다고 가정
2. 중간값 정리에 의해 f(p)=0을 만족하는 점 P가 a, b 사이에 존재함
3. 구간 (a, b)안에 2개 이상의 근이 있는 경우도 있으나 근이 한개만 있다고 가정
중간값 정리
- f(x)가 폐구간 [a, b]에서 연속일 때 f(a) < f(b)라 하면, f(a) < a< f(b)인 임의의 값 a에 대하여 f(c) = a가 되는 c가 구간 (a, b)에 적어도 하나 존재한다고 하는 정리
이등 분법 bisection method
- p1 = (a1 + b1)/2라 하고, f(p1) = 0이면, p=p1이고 f(p1) != 0이면 f(p1)은 f(a1)이나 f(b1)중 하나와 같은 부호를 가짐
- f(p1)이 f(a1)과 같은 부호를 갖는 경우 -> p는 p1과 b1사이에 존재하게 되므로 a2= p1, b2=b1라 가정
- f(p1)이 f(b1)과 같은 부호를 가지는 경우 -> p는 a와 p1 사이에 존재하므로, a2 = a1, b2 = p1이라 놓고 구간 (a2, b2)에서 앞의 과정을 반복
멈춤 과정
-매트랩을 이용할 때 시행되는 반복 횟수에 대한 조건을 결정하는 것이 좋음
- 코딩을 잘못한 경우 무한번 반복 시행에 대한 가능성을 제거하기 위해 N은 최대 한계치를 결정하고 횟수를 더 초과하면 멈춤 과정을 실시함
매트랩으로 근사해 구하기
- f(x) = x^2 - 4
clc;
clear all;
f='x^2 - 4';
n =0;
a=1;
b=2;
c = (a+b)/2;
eps = 0.000001;
fprintf(' n a b c f(c) \n');
while b-c >= eps
n = n + 1;
x = b;
fb = eval(f);
x = c;
fc = eval(f);
if fb * fc <= 0
a = c;
c = ( a + b)/2;
else
b=c;
c = (a+b)/2;
end
fprintf("%2.0f %2.10f %2.10f %2.10f %2.5f \n", n, a, b, c, fc);
end
'수학 > 수학, 수치해석' 카테고리의 다른 글
대학수학 - 1. 시작 (0) | 2020.08.06 |
---|---|
수치해석 - 1. 수치해석학 소개 (0) | 2020.07.10 |
수치해석 및 실습 - 6 분할 차분표와 보간표 (0) | 2020.06.07 |
수치해석 및 실습 - 5 보간다항식 (0) | 2020.06.06 |
수치해석 및 실습 - 4 오차 해석 (0) | 2020.06.06 |