当前位置: 首页 > news >正文

使用欧拉法数值求解微分方程的 Python 实现

编写函数y=Eular(x,h),使用欧拉法数值求解微
分方程初值为函数Eular(x,h)中Cx为计算结束时微分方程x的值,h为计算步长再编写脚本,通过调用函数分别以不同步长(例如h=1.0,h=0.5,h=0.25)计算y(3),并分析步长和误差之间的关系。

以下是使用欧拉法数值求解微分方程的 Python 实现。假设我们要求解的微分方程是 d y d x = f ( x , y ) \frac{dy}{dx} = f(x, y) dxdy=f(x,y),并且已知初始条件 y ( x 0 ) = y 0 y(x_0) = y_0 y(x0)=y0。这里我们以一个简单的微分方程 d y d x = y \frac{dy}{dx} = y dxdy=y,初始条件 y ( 0 ) = 1 y(0) = 1 y(0)=1 为例,它的解析解是 y = e x y = e^x y=ex

import math


def Eular(x, h):
    # 初始条件
    x0 = 0
    y0 = 1
    steps = int((x - x0) / h)
    y = y0
    for _ in range(steps):
        # 这里的 f(x, y) = y
        f = y
        y = y + h * f
    return y


# 精确解
def exact_solution(x):
    return math.exp(x)


# 不同步长
step_sizes = [1.0, 0.5, 0.25]
x_end = 3

for h in step_sizes:
    numerical_solution = Eular(x_end, h)
    exact = exact_solution(x_end)
    error = abs(numerical_solution - exact)
    print(f"步长 h = {h} 时,y({x_end}) 的数值解为: {numerical_solution},精确解为: {exact},误差为: {error}")

    

步长和误差之间的关系分析

欧拉法是一种一阶数值方法,其局部截断误差是 O ( h 2 ) O(h^2) O(h2),全局截断误差是 O ( h ) O(h) O(h)。这意味着,当步长 h h h 减小时,误差会大致线性地减小。在上述代码的输出中,你可以观察到,随着步长 h h h 的减小,数值解会越来越接近精确解,误差也会越来越小。

相关文章:

  • Windows 和 Linux 系统下,如何查看 Redis 的版本号?
  • 4.2、网络安全体系与建设内容
  • 游戏引擎学习第179天
  • Django跨域问题解决方法
  • 用Selenium+lxml库完成淄博链家网数据的爬取
  • 微服务中的服务发现
  • 基于人工智能的扫阅卷和数据分析服务需求文档
  • 虚幻基础:UI
  • fastapi+playwright爬取google搜索1-3页的关键词返回json
  • C++——引用
  • xy轴不等比缩放问题——AUTOCAD c#二次开发
  • Node.js 端口占用错误及解决方案:从 EADDRINUSE 到成功启动服务器
  • gin学习
  • Blender导出fbx到Unity找不到贴图的问题
  • Android笔记之项目引用第三方库(如:Github等)
  • 单片机引脚的电气属性Electrical properties
  • python 学习基本语法整理
  • Vue3+Vite单页面应用(SPA)改造为多页面应用(MPA)
  • PTA 1097-矩阵行平移
  • UNIX网络编程笔记:客户/服务器程序示例
  • 陕西一村民被冒名贷款40余万续:名下已无贷款,将继续追责
  • 美国和沙特签署上千亿美元军售协议
  • 【社论】人工智能将为教育带来什么
  • 巴基斯坦全国航班仍持续延误或取消
  • 何立峰:中方坚定支持多边主义和自由贸易,支持世贸组织在全球经济治理中发挥更大作用
  • 图集|俄罗斯举行纪念苏联伟大卫国战争胜利80周年阅兵式