Divide and Conquer

방정식의 근 구하기 개요 본문

성장캐/수치해석

방정식의 근 구하기 개요

10살 2022. 4. 15. 19:43
728x90
  1. 방적식의 근 구하기
    1. 근의 존재 구간
    2. 중간값 정리
    3. 평균값 정리
    4. 근의 존재 여부
    5. 요약
  2. 이분법 Bisection Method
  3. 고정점 방법 Fixed point Method
  4. Newton Raphson 방법
  5. 할선법 Secant Method

[데이터/수치해석] - 이분법 Bisection method
[데이터/수치해석] - 고정점 방법 Fixed point Method
[데이터/수치해석] - 뉴튼랩슨 Newton-Raphson
[데이터/수치해석] - 할선법 Secant Method


방정식의 근 찾기

방정식의 근을 구하는 것은 f(c)=0을 만족하는 c를 구하는 것과 같다

  1. 근이 존재할 가능성이 있는 영역을 찾아(부호가 바뀌어야 함)
    • 중간값 정리 Intermediate-value theorem
    • 평균값 정리 Mean-value Theorem
  2. 실제로 근을 찾아내는 것

<수치해석에서 방정식의 근 구하기>
해석적 방식이 아닌 반복적인 과정을 따름
근을 추측하는 것으로부터 시작 ← 넣어보고 아닐 경우 오차가 됨


중간값 정리

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일 때 같은 기울기를 갖는 점이 항상 있다

 


방정식의 해를 구하는 방법

  1. 이분법 Bisection method
  2. 고정점 방법 Fixed point Method
  3. 뉴튼랩슨 Newton-Raphson
  4. 할선법 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
Comments