數學——Euler方法求解微分方程詳解(python3)


數學——Euler方法求解微分方程詳解(python3)

 

分享是最快樂的一件事兒,寫出好文章,分享新知識,是一件費時費力的事兒,一分耕耘一分收獲,希望自己從菜鳥逐漸轉變為技術原創大神,大家的支持、點贊以及打賞是我持續耕耘的動力。謝謝每一位讀者!

 

算法的數學描述圖解

實例

用Euler算法求解初值問題

dydx=y+2xy2dydx=y+2xy2

初始條件 y(0)=1y(0)=1,自變量的取值范圍x[0,2]x∈[0,2]

 

算法Python3代碼求解

 

# 導入包 import numpy as np import matplotlib.pyplot as plt # 定義求解函數 y_dot = y + 2*x/(y*y) def fx(y, x): return y + 2*x/(y*y) # 算法定義 def ode_euler(f, y0, tf, h): """ Solve and ODE using Euler method. Solve the ODE y_dot = f(y, t) Parameters ------------ :param f: function Function describing the ODE :param y0: array_like Initial conditions. :param tf: float Final time. :param h: float Time step :return: y : array_like Solution to the ODE. t : array_like Time vector. """ y0 = np.array(y0) ts = np.arange(0, tf + h, h) y = np.empty((ts.size, y0.size)) y[0, :] = y0 for t, i in zip(ts[1:], range(ts.size - 1)): y[i + 1, :] = y[i, :] + h * f(y[i, :], t) return y, ts # 實例應用案例 def newton_cooling_example(): print('Solving Newton Cooling ODE...') y, ts = ode_euler(fx, 1, 2, 0.01) print('Done.') plt.figure() plt.plot(ts, y) plt.xlabel('time [s]') plt.title('Solution to the Newton cooling equation') plt.show()

代碼中的部分函數理解

numpy.array

numpy.array(object, dtype=None, copy=True, order='K', subok=False, ndmin=0)
參考numpy.array
output:創建一個array,返回類型為ndarray
實例

np.array([1, 2, 3.0]) # array([1., 2., 3.]) np.array([[1, 2], [3, 4]]) # array([[1, 2], [3, 4]]) np.array([1, 2, 3], dtype=complex) # array([1.+0.j, 2.+0.j, 3.+0.j])

numpy.arange

參考numpy.arange
numpy.arange([start, ]stop, [step, ]dtype=None)
作用:在給定間隔內返回均勻間隔的值。
值在半開區間[start, stop)內生成(換句話說,包括開始但不包括終止)。返回的是ndarray而不是列表。
np.arange()函數返回一個有終點和起點的固定步長的排列,如[1,2,3,4,5],起點是1,終點是5,步長為1。
參數個數情況: np.arange()函數分為一個參數,兩個參數,三個參數三種情況 :

1. 一個參數時,參數值為終點,起點取默認值0,步長取默認值1。 2. 兩個參數時,第一個參數為起點,第二個參數為終點,步長取默認值1。 3. 三個參數時,第一個參數為起點,第二個參數為終點,第三個參數為步長。其中步長支持小數。

案例

np.arange(3,7) # array([3, 4, 5, 6]) np.arange(3,7,2) # array([3, 5])

numpy.ma.size

numpy.ma.size(obj, axis=None)
參考
案例

a = np.array([[1,2,3],[4,5,6]]) np.size(a) # 6 np.size(a,1) # 3 np.size(a,0) # 2

numpy.empty

參考
numpy.empty(shape, dtype=float, order='C')
shape : int or tuple of int Shape of the empty array, e.g., (2, 3) or 2.
out : ndarray
案例

np.empty([2, 2]) # 結果 array([[ -9.74499359e+001, 6.69583040e-309], [ 2.13182611e-314, 3.06959433e-309]]) #random np.empty([2, 2], dtype=int) # 結果 array([[-1073741821, -1067949133], [ 496041986, 19249760]]) #random


免責聲明!

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



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