歐拉方法解決微分方程初值問題


微分方程初值問題

初值問題\(\begin{cases}y^{\prime}=f(x, y)\\ y(x_{0})=y_{0}\end{cases}\)的解\(y=y(x)\)代表通過點\((x_0, y_0)\)的一條稱為微分方程的積分曲線。積分曲線上的每一個點\((x, y)\)的切線斜率等於函數\(y^{\prime}\)在這點的值.

歐拉方法畫出函數圖像

在最一開始的\((x_0, y_0)\)位置開始,每次我們都給\(x\)一個步長\(\Delta x\),如果這個步長比較小我們就可以認為\((x, g(x))\)\((x+\Delta x, g(x+\Delta x))\)兩點構成的直線的斜率近似為函數在\(x\)處的導數。

這樣每次都畫出這樣一條“線段”,然后\(x\)跳到\(x+\Delta x\)這個位置,重復上面的過程就可以近似的畫出這條直線的圖像。

代碼實現

import matplotlib.pyplot as plt

x, y = 0.0, 1.0
step = 0.1
X, Y = [x], [y]

def f(x:float, y:float):
    return y - 2 * x / y

while x < 10.0:
    k = f(x, y)
    y = y + k * step
    x = x + step
    X.append(x)
    Y.append(y)

print(X, Y, sep='\n')
plt.plot(X, Y)
plt.show()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM