You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

欧拉法(Euler Method)绘图异常:数值解曲线远低于精确解求助

欧拉法数值解与精确解偏差问题修复

问题根源

你的代码存在两个核心错误:

  1. 初始值索引错误:x0=0是自变量的初始值,不是数组x的索引。直接执行y[x0] = y0会把x=-10(数组x的第一个元素)处的y值设为2,和初始条件x=0,y=2完全不符,导致整个数值解的起点偏移。
  2. 单向积分遗漏:原循环只从数组起始位置向右积分,x<0的部分y值始终为0,没有利用初始条件向左计算这部分的数值解。

修复后的代码

import numpy as np
import matplotlib.pyplot as plt

# Define parameters
f = lambda x, y: 2*x
h = 0.1
x = np.arange(-10, 10, h)
x0 = 0
y0 = 2

# 找到初始值x0在数组x中的索引(处理浮点数精度问题)
idx0 = np.argmin(np.abs(x - x0))

# Explicit Euler Method
y = np.zeros(len(x))
y[idx0] = y0

# 向右积分(x从0到10)
for i in range(idx0, len(x) - 1):
    y[i + 1] = y[i] + h * f(x[i], y[i])

# 向左积分(x从0到-10)
for i in range(idx0, 0, -1):
    y[i - 1] = y[i] - h * f(x[i - 1], y[i - 1])

plt.figure(figsize=(12, 8))
plt.plot(x, y, 'b--', label='Euler')
plt.plot(x, 2 + x**2, 'g', label='Exact')
plt.title('Numerical integration methods')
plt.xlabel('x')
plt.ylabel('y')
plt.grid()
plt.legend()
plt.show()

关键修改说明

  • 修正初始索引:用np.argmin(np.abs(x - x0))精准定位x=0在数组中的位置,确保初始值赋值给正确的点。
  • 双向积分:分别从初始点向右(x增大方向)和向左(x减小方向)执行欧拉法,覆盖整个x区间的数值解计算。

运行修复后的代码,欧拉法曲线会和精确解几乎重合(步长h=0.1下误差很小)。

内容的提问来源于stack exchange,提问作者user19571137

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 21:09:32