Divide and Conquer
방정식의 근 구하기 개요 본문
- 방적식의 근 구하기
- 근의 존재 구간
- 중간값 정리
- 평균값 정리
- 근의 존재 여부
- 요약
- 이분법 Bisection Method
- 고정점 방법 Fixed point Method
- Newton Raphson 방법
- 할선법 Secant Method
[데이터/수치해석] - 이분법 Bisection method
[데이터/수치해석] - 고정점 방법 Fixed point Method
[데이터/수치해석] - 뉴튼랩슨 Newton-Raphson
[데이터/수치해석] - 할선법 Secant Method
방정식의 근 찾기
방정식의 근을 구하는 것은 f(c)=0을 만족하는 c를 구하는 것과 같다
- 근이 존재할 가능성이 있는 영역을 찾아(부호가 바뀌어야 함)
- 중간값 정리 Intermediate-value theorem
- 평균값 정리 Mean-value Theorem
- 실제로 근을 찾아내는 것
<수치해석에서 방정식의 근 구하기>해석적 방식이 아닌 반복적인 과정
을 따름
근을 추측하는 것으로부터 시작 ← 넣어보고 아닐 경우 오차가 됨
중간값 정리
Intermediate-value theorem
근의 존재여부를 판단할 수 있는 중요한 이론적 근거를 제공
함수 𝑓(𝑥) 가 𝑎≤𝑥≤𝑏 에서 연속이며 미분 가능하다고 할 때 임의의 함수값 M이 두 점에서의 함수값 f(a), f(b)와 f(a)≤M≤f(b)과 같은 관계가 성립된다면 함수값 M 을 생산하는 값 c가 구간 a<x<b에 존재하며 f(c)=M이다
구간 끝의 함수값 부호가 다르면 구간을 만족하는 𝑓(𝑐)=𝑀 을 만들어내는 𝑐가 있어야 함
𝑀=0 이라면 𝑓(𝑐)=0이 되어 𝑐는 방정식 𝑓(𝑥)의 근이 됨
방정식의 근이 존재하기 위해서는 f(c)=M=0이 되어야 함
즉, f(c)=M=0이면 근이 존재함
중간값 정리 f(a)와 f(b)의 부호가 다를 때 0 이 되는 점이 1 개 이상 존재한다
평균값 정리
Mean-value Theorem
함수 𝑓(𝑥) 가 𝑎≤𝑥≤𝑏 에서 연속이며 미분 가능하다고 할 때 f'(c) = {{f(b) - f(a)} \over {b - a}} 을 만족하는 적어도 하나의 값 c가 구간 a ≤ x ≤ b 사이에 존재한다.
만일 f(a) = f(b)인 경우는 f'(c)=0이 되어 기울기(도함수)가 수평축에 평행하다는 것을 의미하며, 구간 a<x<b에서 평행한 접선을 이루는 한 점 c가 존재함
우변은 두 점 (a, f(a)), (b, f(b))를 지나는 직선의 기울기와 같음을 알 수 있다
양끝 값으로 f'c구하고→f'x와 같다고 풀어서 c 구한다
f'c = (fb-fa)/(f-a) = 상수값
f'x식에 c 대입한 식 = 상수값
평균값 정리 f(a)와 f(b)의 기울기(미분)이 c일 때 같은 기울기를 갖는 점이 항상 있다
방정식의 해를 구하는 방법
- 이분법 Bisection method
- 고정점 방법 Fixed point Method
- 뉴튼랩슨 Newton-Raphson
- 할선법 Secant Method
import numpy as np
import matplotlib.pyplot as plt
def f(x):
return -(x**2)+6*x - 5
x = np.linspace(-2, 4, 100)
y = f(x)
a = -1.0
b = 3.0
fa = f(a)
fb = f(b)
plt.plot(x, y)
plt.stem([a, b], [fa, fb], use_line_collection = True)
plt.grid()
plt.xlabel('x')
plt.ylabel('fx')
plt.show()
# 중간값 정리: fa<M<fb면 a<c<b다
def inter(x):
plt.plot(x, f(x))
plt.grid()
plt.title("inter")
z = np.zeros(len(x))
plt.plot(x, z, 'r') # 빨간 선은 x축
inter(x)
# 평균값 정리: f'c = fb-fa/b-a 이 a<c<b다
def mean(x,a,b):
y = f(x)
fa = f(a)
fb = f(b)
plt.plot(x, y, 'g')
plt.stem([a, b], [fa, fb], use_line_collection = True)
plt.grid()
plt.title("mean")
mean(x, a, b)
import sympy as sym
from sympy import symbols
sym.init_printing()
a, b, c = symbols('a, b, c')
print(a, type(a)) # a는 심볼이라 그냥 a가 출력된다
fx = sym.sqrt(2*b) + c + sym.cos(a**2)
display(fx)
print(fx.subs([(a, 3), (b, 2), (c, 1)])) # subs=치환. a를 3으로 치환
'성장캐 > 수치해석' 카테고리의 다른 글
고정점 방법 Fixed point Method (0) | 2022.04.25 |
---|---|
이분법 Bisection method (0) | 2022.04.25 |
수학 목차 (0) | 2022.02.28 |
오일러공식 (0) | 2021.07.30 |
고차원 그리기 (0) | 2021.07.30 |