微分方程初值問題
初值問題\(\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()
