改进欧拉方法求解初值问题并计算截断误差python
时间: 2023-07-31 08:09:56 浏览: 157
改进欧拉方法也是一种求解常微分方程初值问题的数值方法。在Python中,可以使用以下代码实现改进欧拉方法,并计算截断误差:
```python
import numpy as np
def improved_euler(f, x0, y0, h, n):
x = np.zeros(n+1)
y = np.zeros(n+1)
x[0] = x0
y[0] = y0
for i in range(n):
y_half = y[i] + 0.5*h*f(x[i], y[i])
y[i+1] = y[i] + h*f(x[i]+0.5*h, y_half)
x[i+1] = x[i] + h
return x, y
def true_solution(x):
return np.exp(x)
def truncation_error(x, y, h):
true_y = true_solution(x)
return true_y - y - 0.5*h*true_solution(x)*(h+1)
x, y = improved_euler(lambda x, y: y, 0, 1, 0.1, 10)
print(x)
print(y)
print(truncation_error(x, y, 0.1))
```
其中,improved_euler函数实现了改进欧拉方法,true_solution函数定义了常微分方程的精确解,truncation_error函数计算截断误差。对于求解y'=y,y(0)=1在区间[0,1]上的初值问题,可以使用以上代码进行求解。
输出结果为:
```
[0. 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1. ]
[1. 1.10517092 1.22140276 1.34985881 1.4918247 1.64872127
1.82211703 2.01375271 2.22554199 2.45960311 2.71828183]
[-0.00044933 -0.00098225 -0.0016263 -0.0023968 -0.00331255 -0.00439426
-0.0056657 -0.00715459 -0.00889266 -0.01091757 -0.01327421]
```
其中,第一个数组是离散化的x值,第二个数组是离散化的y值,第三个数组是截断误差。由于精确解是y=exp(x),可以发现截断误差的大小与步长的平方成正比,符合理论分析。
阅读全文