[Python에 의한 과학·기술 계산] 1층 상미분 방정식의 수치 해법, 초기값 문제, 수치 계산
1층 상미분 방정식을 초기 조건 하에서 풀린다.
문제:
$x'(t)+k x(t)=0$, 초기 조건 $x(0)=1$, (k=1은 파라미터)
정확한 해결책은 $x(t)=e^{-t}$이다.
from sympy import * # sympyライブラリから全ての機能をimoprt
import numpy as np # numpyをnpという名前でimport
from scipy.integrate import odeint
import matplotlib.pyplot as plt
"""
例題: 1階常微分方程式:
dx/dt = -kxを x(0)=1の初期条件の下で解く
"""
x=Symbol('x') # 文字 'x'を変数xとして定義
y=Symbol('y') # 文字 'y'を変数yとして定義
t=Symbol('t') # 文字 't'を変数yとして定義
k=Symbol('k')
def func(x, t, k): # dx/dtを関数として定義
dxdt=-k*x
return dxdt
k = 1.0 #パラメータへ値を設定する
x0 = 1.0 # 初期条件
t=np.linspace(0,10,101) # 積分の時間刻み設定: 0から10までを101等分する
sol=odeint(func, x0, t, args=(k,)) # 数値的に微分方程式を解く。結果をsolというリストへ格納する。
#比較のための厳密解(e^-t)をリストexact_solへセット
exact_sol=[]
tt=np.linspace(0,10,101)
for i in tt:
exact_sol.append(exp(-1.0*float(i)))
#
#可視化
plt.plot(t, sol, linewidth=1,label='numerical') # 数値解
plt.plot(tt, exact_sol, color='red',linewidth=1, label='exact') #真の解
plt.xlabel('t', fontsize=18)
plt.ylabel('x', fontsize=18,rotation='horizontal')
plt.legend(loc='upper right')
plt.show()
결과
Reference
이 문제에 관하여([Python에 의한 과학·기술 계산] 1층 상미분 방정식의 수치 해법, 초기값 문제, 수치 계산), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sci_Haru/items/6e0b6c2fc751876bc8e7텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)