1. 程式人生 > 其它 >尤拉方法解決微分方程初值問題

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

微分方程初值問題

初值問題\(\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()