【数值分析实验】常微分方程初值问题:显示欧拉法、隐式欧拉法、欧拉改进法、四阶龙格库塔(python)
2022/1/4 1:08:58
本文主要是介绍【数值分析实验】常微分方程初值问题:显示欧拉法、隐式欧拉法、欧拉改进法、四阶龙格库塔(python),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
常微分方程初值问题的数值解法
调包
import math import numpy as np import matplotlib.pyplot as plt
显示欧拉法
fStr为函数str名
#显式欧拉法 def EulerExplicit(x0,y0,h,fStr): xn = x0 yn = y0 n = 0 ns = [n] xs = [xn] ys = ['%.8f'%yn] while n < 50: n += 1 xn += h yn = yn + globals()[fStr](xn,yn) * h ns.append(n) xs.append('%.2f'%xn) ys.append('%.8f'%yn) return (ns,xs,ys)
ns为迭代次数,xs为x值列表,ys为y值列表
隐式欧拉法
#隐式欧拉法 def EulerImplicit(x0,y0,h,fStr): xn = x0 yn = y0 n = 0 ns = [n] xs = [xn] ys = ['%.8f'%yn] while n < 50: n += 1 xn +=h yp = yn + globals()[fStr](xn,yn) * h yn = yn + globals()[fStr](xn,yp) * h ns.append(n) xs.append('%.2f'%xn) ys.append('%.8f'%yn) return (ns,xs,ys)
欧拉改进法
#欧拉改进法 def EulerImproved(x0,y0,rlimX,h,fStr): xn = x0 yn = y0 n = 0 ns = [n] xs = [xn] ys = ['%.8f'%yn] while True: yp = yn + globals()[fStr](xn,yn) * h xn += h n += 1 if xn > rlimX: return (ns,xs,ys) yc = yn + globals()[fStr](xn,yp) * h yn = (yp + yc) / 2 ns.append(n) xs.append('%.2f'%xn) ys.append('%.8f'%yn)
四阶龙格库塔
#四阶龙格库塔 def Runge_kutta(x0,y0,rlimX,h,fStr): xn = x0 yn = y0 n = 0 ns = [n] xs = [xn] ys = ['%.8f'%yn] while xn < rlimX: n += 1 xn += h k1 = globals()[fStr](xn,yn) k2 = globals()[fStr](xn + (h / 2),yn + (h * k1) / 2) k3 = globals()[fStr](xn + (h / 2),yn + (h * k2) / 2) k4 = globals()[fStr](xn + h,yn + h * k3) yn = yn + (h / 6) * (k1 + 2 * k2 + 2 * k3 + k4) ns.append(n) xs.append('%.2f'%xn) ys.append('%.8f'%yn) return (ns,xs,ys)
演示示例
def ft(x,y): return x**2 + x -y xs = np.linspace(0,5,51) qt_E1 = EulerExplicit(0,0,0.1,"ft") qt_E2 = EulerImplicit(0,0,0.1,"ft") qt_E3 = EulerImproved(0,0,5,0.1,"ft") qt_R = Runge_kutta(0,0,4.9,0.1,"ft") plt.figure( figsize=(24,16) ) print(qt_R[2]) for i in range(51): qt_E1[2][i] = float(qt_E1[2][i]) qt_E2[2][i] = float(qt_E2[2][i]) qt_E3[2][i] = float(qt_E3[2][i]) qt_R[2][i] = float(qt_R[2][i]) plt.plot(xs,qt_E1[2],label = "显式欧拉") plt.plot(xs,qt_E2[2],label = "隐式欧拉") plt.plot(xs,qt_E3[2],label = "欧拉改进") plt.plot(xs,qt_R[2],label = "四阶龙格库塔") plt.legend() plt.show()
结果如下:
这篇关于【数值分析实验】常微分方程初值问题:显示欧拉法、隐式欧拉法、欧拉改进法、四阶龙格库塔(python)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-21Python编程基础教程
- 2024-11-20Python编程基础与实践
- 2024-11-20Python编程基础与高级应用
- 2024-11-19Python 基础编程教程
- 2024-11-19Python基础入门教程
- 2024-11-17在FastAPI项目中添加一个生产级别的数据库——本地环境搭建指南
- 2024-11-16`PyMuPDF4LLM`:提取PDF数据的神器
- 2024-11-16四种数据科学Web界面框架快速对比:Rio、Reflex、Streamlit和Plotly Dash
- 2024-11-14获取参数学习:Python编程入门教程
- 2024-11-14Python编程基础入门