天天看點

顯式Euler公式和隐式Euler公式精确度(Python)

目錄

​​1、概述​​

​​(1)常微分初值問題​​

​​(2)數值微分方法 ​​

​​2、顯式Euler公式和隐式Euler公式精度比較​​

​​(1)代碼​​

​​(2)結果​​

​​3、圖像直覺圖​​

1、概述

(1)常微分初值問題

顯式Euler公式和隐式Euler公式精确度(Python)

(2)數值微分方法 

顯式Euler公式和隐式Euler公式精确度(Python)

2、顯式Euler公式和隐式Euler公式精度比較

(1)代碼

import numpy as np
import matplotlib.pyplot as plt

#y'=-30y,y(0)=1,0<=x<=0.6
def funEval(x,y):
    fxy=-30*y
    return fxy
def funture(x):
    ft=np.e**(-30*x)
    return ft
def ImplictEuler(a,b,n):
    h=np.abs(b-a)/(n-1)
    y=np.zeros((n,1))
    x=np.zeros((n,1))
    y0=1
    y[0]=y0
    x[0]=a
    for i in range(1,n,1):
        x[i]=a+i*h
        y[i]=(1-30*h)*y[i-1]
        #y[i]=y[i-1]/(1+30*h)
    yt=np.e**(-30*x)
    return x,y,yt
def main():
    x,y=0,0
    n = [5,10,20,40,80,160]
    for i in n:
        x,y,yt=ImplictEuler(0,0.6,i)
        plt.plot(x,y,label='Euler-solution-'+str(i))
        plt.plot(x,yt,label='Ture-solution-'+str(i))
        plt.legend()
        plt.show()
        print(x[0:5],[y-yt][0:5])
        print(y)

if __name__ =='__main__':
    main()
      

(2)結果

#顯式n=20
[[0.        ]
 [0.03157895]
 [0.06315789]
 [0.09473684]
 [0.12631579]] [array([[ 0.00000000e+00],
       [-3.35128524e-01],
       [-1.47587815e-01],
       [-5.81570001e-02],
       [-2.25998240e-02],
       [-8.76588167e-03],
       [-3.39919453e-03],
       [-1.31807914e-03],
       [-5.11098880e-04],
       [-1.98183774e-04],
       [-7.68477618e-05],
       [-2.97984961e-05],
       [-1.15546679e-05],
       [-4.48043923e-06],
       [-1.73733558e-06],
       [-6.73669424e-07],
       [-2.61222125e-07],
       [-1.01291518e-07],
       [-3.92768096e-08],
       [-1.52299797e-08]])]
[[1.00000000e+00]
 [5.26315789e-02]
 [2.77008310e-03]
 [1.45793847e-04]
 [7.67336039e-06]
 [4.03861073e-07]
 [2.12558460e-08]
 [1.11872874e-09]
 [5.88804597e-11]
 [3.09897157e-12]
 [1.63103767e-13]
 [8.58440877e-15]
 [4.51810988e-16]
 [2.37795257e-17]
 [1.25155398e-18]
 [6.58712623e-20]
 [3.46690854e-21]
 [1.82468871e-22]
 [9.60362476e-24]
 [5.05453935e-25]]

Process finished with exit code 0      
隐式n=20
[[0.  ]
 [0.15]
 [0.3 ]
 [0.45]
 [0.6 ]] [array([[0.        ],
       [0.17070919],
       [0.03293444],
       [0.00600915],
       [0.00109281]])]
[[1.        ]
 [0.18181818]
 [0.03305785]
 [0.00601052]
 [0.00109282]]
[[0.        ]
 [0.06666667]
 [0.13333333]
 [0.2       ]
 [0.26666667]] [array([[0.00000000e+00],
       [1.97998050e-01],
       [9.27954722e-02],
       [3.45582849e-02],
       [1.20102164e-02],
       [4.06982641e-03],
       [1.36559790e-03],
       [4.56415842e-04],
       [1.52303255e-04],
       [5.07900334e-05]])]
[[1.00000000e+00]
 [3.33333333e-01]
 [1.11111111e-01]
 [3.70370370e-02]
 [1.23456790e-02]
 [4.11522634e-03]
 [1.37174211e-03]
 [4.57247371e-04]
 [1.52415790e-04]
 [5.08052634e-05]]      

3、圖像直覺圖

顯式Euler公式和隐式Euler公式精确度(Python)
顯式Euler公式和隐式Euler公式精确度(Python)
顯式Euler公式和隐式Euler公式精确度(Python)