10. 미분과 적분

최지온·2023년 11월 29일

프로그래밍 응용

목록 보기
10/10
post-thumbnail

미적분이란?

미적분(calculus)은 변화(change)에 대한 학문

  • 과학자들은 변화를 예측, 변화의 원인을 이해하기를 원함
  • 운전 예: 시간 당 변화율
  • 거리 <-> 속도 <-> 가속도

미분

적분

파이썬의 미분: SymPy

파이썬의 SymPy

  • 기호 계산을 위한 파이썬 라이브러리
  • Python library for symolic mathematics
  • https://www.sympy.org/
import sympy as sp
## y = 5*x**2 + 3*x + 6
# 심볼(변수) 정의
y, x = sp.symbols('y x')
# 함수 정의
y = 5*x**2 + 3*x + 6
# 미분
diff_y = sp.diff(y)
# 미분 결과 식 출력
print(" y\' = ", diff_y)

주피터 위젯 (Jupyter Widgets)

주피터 노트북에서 사용자와 상호작용 (user interactive)으로 파라미터를 변경해가며 그래프 등을 시각화하는 도구

  • ipywidgets (interactive widgets)

https://ipywidgets.readthedocs.io/en/stable/index.html

https://github.com/jupyterwidgets/ipywidgets/blob/main/docs/source/examples/Index.ipynb

  • 아나콘다에는 ipywidgets 패키지가 내장

상호작용 sine 그래프 예

k 값이 0부터 5까지 0.1 간격으로 변하는 FloatSlider을 작성

  • sin (k * x) 함수 그래프 그리기
  • interact() 함수 사용하여 사용자 인터페이스 (user Interface, UI) 제어를 자동 생성

# 그래프 파라미터 설정
import numpy as np
import matplotlib.pyplot as plt
import ipywidgets as widgets # 인터액티브 그래프, 주피터 ipy 위젯
from ipywidgets import interact # 사용자 인터페이스 생성 함수 interact
# 상호작용 sine 그래프 예 1: interact() 함수 호출

def f(k):
x = np.linspace(0, 10, num=1000) # x축 데이터 1000개 생성
y = np.sin(k*x) # sine 함수
plt.plot(x, y)
plt.show()

# 사용자 인터페이스 생성 함수 interact 호출하여 sine 함수 그리기
interact(f, k=(0.0,5.0,0.1) ) # k 값이 0부터 5까지 0.1간격으로 변하는 FloatSlider을 작성

interact 함수 호출하는 대신 파이썬 함수의 데코레이터를 사용

# 상호작용 sine 그래프 예 2: 데코레이터(decorator)사용
@interact(k=(0.0, 5.0, 0.1))
def f(k):
x = np.linspace(0, 10, num=1000) # x축 데이터 1000개 생성
y = np.sin(k*x) # sine 함수
plt.plot(x, y)
plt.show()

Matplotlib 수학식 표현

Matplotlib에서의 수학식 표현은 Tex 마크업 (markup)을 사용

미적분의 기하학적 이해 구현 예

선형, 이차, 지수, 시그모이드, 사인 함수에 대한 미적분 결과를 그래프로 표현

  • 위젯을 사용하여 인터액티브 그래프로 표시
  • 드롭다운 (dropdown) 메뉴로 함수 선택
  • 체크박스 (checkbox)로 미분, 적분 선택
  • f(t=10)=0 을 만족하도록 적분 상수 C를 선택

고유함수 (Eigenfunction)

지수와 같은 함수는 미분, 적분의 결과가 같은 함수의 스칼라 배의 크기와 같은 함수를 고유함수 (eigen function) 이라고 함

  • 행렬의 고유벡터와 비슷한 개넘

해석적 미분 (Analytical Differentiation)

해석적 미분은 수식을 전개하여 도함수의 식을 구하는 방법

파이썬의 해석적 미분: SymPy

파이썬의 SymPy

  • 기호 계산을 위한 파이썬 라이브러리
  • Python library for symbolic mathematics
  • https://www.sympy.org/

곱의 규칙 (Product Rule)

해석적으로 미분할 때 복잡한 함수를 간단한 함수들의 구성으로 분해해서 미분

같은 변수에 종속된 두 함수의 곱의 미분 규칙

연쇄 법칙 (Chain Rule)

함수 y=f(x)와 함수 z=g(y)를 합성한 도함수 dz/dx를 계산하는 경우 아래와 같은 연쇄 법칙을 적용

  • dz/dx = dz/dy X dy/dx

연쇄 법칙 예

  • z = e^x^4+1

  • z= g(y)=e^y

  • y=x^4+1

  • dz/dx = dz/dy X dy/dx = e^y X (4x^3) = 4x^3e^x^4+1

수치 미분 (Numerical differentiation)

x=a 지점에서 f(x)의 도함수는 아래의 유일차분 (Finite Difference) 식으로 계산

  • h -> 에 가까워질 수록 도함수의 실제 값에 근접

다변수함수

두개 이상의 독립 변수로 구성된 함수가 다변수함수

  • x,y 두 개의 변수를 갖는 다변수함수 예

f(x,y) = x^2 + 2xy + y^2

다변수 함수의 편미분 (Partial Derivative)

두 개 이상의 독립 번수로 구성된 함수가 다변수함수

  • x,y 두 개의 변수를 갖는 다변수함수 예

  • 다변수함수의 하나의 변수에 대한 도함수를 편미분이라고 함

  • 해석적 미분 (정확한 수식 계산) 또는 수치 미분 (근사화)을 통해 편미분 계산

  • 예

편미분 예

편미분 시각화 예

2차원 다변수함수를 3D 표면플롯(surface plot)으로 시각화하는 예

  • 함수와 변수 x,y 값에 대한 편미분한 표면의 그래프 시각화

  • 함수의 값은 색으로 구분
    큰 값은 노랑색, 작은 값은 파랑색으로 표시

  • 표면의 높이가 함수의 수치값

편미분 시각화 실행 예

업로드중..

업로드중..

업로드중..

수치 적분

기하학적으로 적분은 함수의 곡선 아래의 면적

업로드중..

수치 적분: 리만 합 (Riemann Sum)

업로드중..

profile
왕초보입니다

0개의 댓글