[미분 - 수치 미분] 수치 미분

2026. 1. 31. 20:30·AI/이론
반응형

⭐ 정의

도함수를 구하기 어려운 상황에서, 함수의 값들을 이용해,
미분 계수의 근사치를 계산하는 방법

 

 

여기서, 컴퓨터는 h가 0이될 수 없으므로, 0에 근사한 값으로 h를 보내는 미분

 

🎯 중앙 차분

 

컴퓨터서 0에 근사한 값은 결국 0.xxxxx 이런식으로 부동소수 타입일텐데,

결국 그건 0이 아니고, 그건 오차가 있다는 뜻이다.

 

오차가 있을 수 밖에 없다면, 오차를 줄여가는 방법을 찾아봐야하는데,

그 대표적인 방법이 바로 중앙 차분이다.

 

왜 오차가 주냐면, 앞뒤 값을 같이 보기때문에 오차가 많이 개선된다.

 

실제 코드와 그래프를 살펴보면 조금 더, 이해가 될 것 같다.

 

import numpy as np
import matplotlib.pyplot as plt

# 1. 대상 함수 정의: f(x) = x^2
def f(x):
    return x**2

# 2. 수치미분 함수들
def forward_diff(f, x, h):
    return (f(x + h) - f(x)) / h

def backward_diff(f, x, h):
    return (f(x) - f(x - h)) / h

def central_diff(f, x, h):
    return (f(x + h) - f(x - h)) / (2 * h)

# 설정
x_target = 2.0  # 미분값을 구할 지점
h = 0.5         # 오차를 보여주기 위해 h를 크게 설정
x_range = np.linspace(1, 3, 100) # 그래프 범위

# 그래프 그리기
plt.figure(figsize=(10, 6))
plt.plot(x_range, f(x_range), 'k-', label="f(x) = x^2", linewidth=2) # 원본 함수

# 각 방식의 기울기(m) 계산
m_forward = forward_diff(f, x_target, h)
m_backward = backward_diff(f, x_target, h)
m_central = central_diff(f, x_target, h)
m_exact = 4.0 # 실제 미분값 (2x 이므로 2*2=4)

# 접선 그리기용 함수
def tangent_line(x, x_t, m, f_t):
    return m * (x - x_t) + f_t

f_t = f(x_target)
plt.plot(x_range, tangent_line(x_range, x_target, m_forward, f_t), '--', label=f'Forward (m={m_forward})')
plt.plot(x_range, tangent_line(x_range, x_target, m_backward, f_t), '--', label=f'Backward (m={m_backward})')
plt.plot(x_range, tangent_line(x_range, x_target, m_central, f_t), 'r-', label=f'Central (m={m_central})', linewidth=2)
plt.plot(x_target, f_t, 'ko') # 타겟 지점 점 찍기

plt.title(f"Numerical Differentiation Comparison (h={h})")
plt.legend()
plt.grid(True)
plt.show()

 

 

x = 2.0 근처 오차가 중앙 차분이 가장 적은걸 눈으로 확인할 수 있다.


출처

반응형

'AI > 이론' 카테고리의 다른 글

[미분 - 편미분] 편미분(Partial Derivative)  (0) 2026.02.02
[신경망-손실함수] 손실함수란?  (0) 2026.01.25
[신경망-학습] 학습이란?  (0) 2026.01.24
[신경망-MNIST] MNIST 데이터셋  (1) 2026.01.22
[신경망-활성화 함수] 소프트맥스 함수  (1) 2026.01.14
'AI/이론' 카테고리의 다른 글
  • [미분 - 편미분] 편미분(Partial Derivative)
  • [신경망-손실함수] 손실함수란?
  • [신경망-학습] 학습이란?
  • [신경망-MNIST] MNIST 데이터셋
Hamp
Hamp
남들에게 보여주기 부끄러운 잡다한 글을 적어 나가는 자칭 기술 블로그입니다.
  • Hamp
    Hamp의 분리수거함
    Hamp
  • 전체
    오늘
    어제
    • 분류 전체보기 (325) N
      • CS (30)
        • 객체지향 (2)
        • Network (7)
        • OS (6)
        • 자료구조 (1)
        • LiveStreaming (3)
        • 이미지 (1)
        • 잡다한 질문 정리 (0)
        • Hardware (2)
        • 이론 (6)
        • 컴퓨터 그래픽스 (0)
      • Firebase (3)
      • Programing Langauge (41)
        • swift (34)
        • python (6)
        • Kotlin (1)
      • iOS (133) N
        • UIKit (37)
        • Combine (1)
        • SwiftUI (33) N
        • Framework (7)
        • Swift Concurrency (22)
        • Tuist (6)
        • Setting (11)
        • Modularization (1)
        • Instruments (6)
      • PS (59)
        • 프로그래머스 (24)
        • 백준 (13)
        • LeetCode (19)
        • 알고리즘 (3)
      • Git (18)
        • 명령어 (4)
        • 이론 (2)
        • hooks (1)
        • config (2)
        • action (7)
      • Shell Script (2)
      • Linux (6)
        • 명령어 (5)
      • Spring (20)
        • 어노테이션 (6)
        • 튜토리얼 (13)
      • CI-CD (4)
      • Android (0)
        • Jetpack Compose (0)
      • AI (9)
        • 이론 (9)
        • MCP (0)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    lifecycle
    SwiftUI
    IOS
    GIT
    AVFoundation
    프로그래머스
    백준
    protocol
    UIKit
    dfs
    boostcamp
    투포인터
    Spring
    dp
    property
    concurrency
    Tuist
    CS
    dispatch
    Swift
  • 최근 댓글

  • 최근 글

  • 반응형
  • hELLO· Designed By정상우.v4.10.0
Hamp
[미분 - 수치 미분] 수치 미분
상단으로

티스토리툴바