演算法的數學描述圖解 實例 用Euler演算法求解初值問題 $$ \frac{dy}{dx}=y+\frac{2x}{y^2}$$ 初始條件$y(0)=1$,自變數的取值範圍$x \in [0, 2]$ 演算法Python3代碼求解 代碼中的部分函數理解 numpy.array "參考numpy.arra ...
演算法的數學描述圖解
實例
用Euler演算法求解初值問題
\[ \frac{dy}{dx}=y+\frac{2x}{y^2}\]
初始條件\(y(0)=1\),自變數的取值範圍\(x \in [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