手写欧拉方法(Euler‘s method)解常微分方程(ODE)

本文通过几个实例详细介绍了如何使用欧拉方法解决不同类型的微分方程问题,包括给定初始条件下的数值解计算。

问题111dydx=y\frac{dy}{dx}=ydxdy=y

给定方程 dydx=y,y(0)=1\frac{dy}{dx}=y, y(0)=1dxdy=y,y(0)=1,请用 Δx=1\Delta x=1Δx=1,求 y(2)y(2)y(2) 的值。

手写求解过程

我们手写出整个欧拉方法逼近的过程数据表。表格的内容包括三个部分:xxxyyydydx\frac{dy}{dx}dxdy

y(0)y(0)y(0)

根据题目,我们知道 x=0x=0x=0 的时候 y(0)=1y(0)=1y(0)=1,对应的 dydx=y\frac{dy}{dx}=ydxdy=y,我们带入对应的数据可得:dydx=1\frac{dy}{dx}=1dxdy=1。这样对应的表格为:

xxxyyydydx\frac{dy}{dx}dxdy
000111111

y(1)y(1)y(1)

根据题目,Δx=1\Delta x=1Δx=1,因此 x=0+1=1x=0+1=1x=0+1=1,对应的 y(1)=y(0)+Δx∗dydx0=1+1∗1=2y(1)=y(0)+\Delta x*\frac{dy}{dx}_0=1+1*1=2y(1)=y(0)+Δxdxdy0=1+11=2,将 xxxyyy 的数据带入到 dydx=y\frac{dy}{dx}=ydxdy=y,可得对应的 dydx=2\frac{dy}{dx}=2dxdy=2。这样表格更新为:

xxxyyydydx\frac{dy}{dx}dxdy
000111111
111222222

y(2)y(2)y(2)

根据题目,Δx=1\Delta x=1Δx=1,因此 x=1+1=2x=1+1=2x=1+1=2,对应的 y(2)=y(1)+Δx∗dydx1=2+1∗2=4y(2)=y(1)+\Delta x*\frac{dy}{dx}_1=2+1*2=4y(2)=y(1)+Δxdxdy1=2+12=4,将 xxxyyy 的数据带入到 dydx=y\frac{dy}{dx}=ydxdy=y,可得对应的 dydx=4\frac{dy}{dx}=4dxdy=4。这样表格更新为:

xxxyyydydx\frac{dy}{dx}dxdy
000111111
111222222
222444444

这样,我们就手工计算出 y(2)=4y(2)=4y(2)=4

问题222dydx=x−y−2\frac{dy}{dx}=x-y-2dxdy=xy2

给定 ODE:dydx=x−y−2,f(−1)=3\frac{dy}{dx}=x-y-2,f(-1)=3dxdy=xy2,f(1)=3,要求用三步估算 f(2)f(2)f(2) 的数据。

手写求解过程

计算 Δx\Delta xΔx

根据题目要求,我们可以计算出 Δx\Delta xΔxΔx=2−(−1)3=1\Delta x=\frac{2-(-1)}{3}=1Δx=32(1)=1

f(−1)f(-1)f(1) 数据

根据题目,f(−1)=3f(-1)=3f(1)=3dydx=x−y−2\frac{dy}{dx}=x-y-2dxdy=xy2,代入对应的 xxxyyy,可得 dydx=x−y−2=(−1)−3−2=−6\frac{dy}{dx}=x-y-2=(-1)-3-2=-6dxdy=xy2=(1)32=6,这样对应的表格为:

xxxyyydydx\frac{dy}{dx}dxdy
−1-11333−6-66

计算 f(0)f(0)f(0)

f(0)=f(−1)+Δx∗dydxx=−1=3+1∗(−6)=−3f(0)=f(-1)+\Delta x*\frac{dy}{dx}_{x=-1}=3+1*(-6)=-3f(0)=f(1)+Δxdxdyx=1=3+1(6)=3dydx=x−y−2=0−(−3)−2=1\frac{dy}{dx}=x-y-2=0-(-3)-2=1dxdy=xy2=0(3)2=1。这样对应的表格为:

xxxyyydydx\frac{dy}{dx}dxdy
−1-11333−6-66
000−3-33111

计算 f(1)f(1)f(1)

f(1)=f(0)+Δx∗dydxx=0=−3+1∗1=−2f(1)=f(0)+\Delta x*\frac{dy}{dx}_{x=0}=-3+1*1=-2f(1)=f(0)+Δxdxdyx=0=3+11=2dydx=x−y−2=1−(−2)−2=1\frac{dy}{dx}=x-y-2=1-(-2)-2=1dxdy=xy2=1(2)2=1。这样对应的表格为:

xxxyyydydx\frac{dy}{dx}dxdy
−1-11333−6-66
000−3-33111
111−2-22111

计算 f(2)f(2)f(2)

f(2)=f(1)+Δx∗dydxx=1=−2+1∗1=−1f(2)=f(1)+\Delta x*\frac{dy}{dx}_{x=1}=-2+1*1=-1f(2)=f(1)+Δxdxdyx=1=2+11=1dydx=x−y−2=2−(−1)−2=1\frac{dy}{dx}=x-y-2=2-(-1)-2=1dxdy=xy2=2(1)2=1。这样对应的表格为:

xxxyyydydx\frac{dy}{dx}dxdy
−1-11333−6-66
000−3-33111
111−2-22111
222−1-11111

这样,我们计算出 f(2)=−1f(2)=-1f(2)=1

问题333dydx=3x+2y+1,y(0)=k,Δx=2\frac{dy}{dx}=3x+2y+1,y(0)=k,\Delta x=2dxdy=3x+2y+1,y(0)=k,Δx=2

给定 ODE 方程为:dydx=3x+2y+1,y(0)=k,Δx=2\frac{dy}{dx}=3x+2y+1,y(0)=k,\Delta x=2dxdy=3x+2y+1,y(0)=k,Δx=2,使用欧拉方法计算出 y(2)≈1y(2)\approx 1y(2)1,求 kkk 的值。

手写求解过程

y(0)y(0)y(0) 数据

dydxx=0,y=k=3x+2y+1=3∗0+2∗k+1=2k+1\frac{dy}{dx}_{x=0,y=k}=3x+2y+1=3*0+2*k+1=2k+1dxdyx=0,y=k=3x+2y+1=30+2k+1=2k+1。这样对应的表格为:

xxxyyydydx\frac{dy}{dx}dxdy
000kkk2k+12k+12k+1

计算 y(2)y(2)y(2)

f(2)=f(0)+Δx∗dydxx=1=(k)+2∗(2k+1)=5k+2f(2)=f(0)+\Delta x*\frac{dy}{dx}_{x=1}=(k)+2*(2k+1)=5k+2f(2)=f(0)+Δxdxdyx=1=(k)+2(2k+1)=5k+2,同时,题目告诉我们 y(2)≈1y(2)\approx 1y(2)1,也就是 5k+2=1⇒k=−15=−0.25k+2=1 \Rightarrow k=-\frac{1}{5}=-0.25k+2=1k=51=0.2

问题444:给定 f(0)=1f(0)=1f(0)=1 和对应的导数 f′f'f,求 f(3)f(3)f(3)

给定 f(0)=1f(0)=1f(0)=1,导数表如下,求 f(3)f(3)f(3)

x0123
f′(x)f'(x)f(x)2-113

本题和上面的问题相比,不需要计算

手写求解过程

本题给出了导数表 f′(x)f'(x)f(x),我们可以计算出 Δyn\Delta y_nΔyn,根据导数定义,Δyn≈f′(xn)Δx\Delta y_n \approx f'(x_n)\Delta xΔynf(xn)Δx

计算 Δx\Delta xΔx

根据题目给出的导数表,我们知道 Δx=1\Delta x=1Δx=1

f(0)f(0)f(0) 数据

Δy0=f′(x0)Δx0\Delta y_0 = f'(x_0)\Delta x_0Δy0=f(x0)Δx0 数据代入可得:Δy0=f′(x0)Δx=2∗1=2\Delta y_0 = f'(x_0)\Delta x=2*1=2Δy0=f(x0)Δx=21=2

nnnxnx_nxnyny_nynf′(xn)f'(x_n)f(xn)Δyn\Delta y_nΔyn
000000111222222

计算 f(1)f(1)f(1)

Δy1=f′(x1)Δx=−1∗1=−1\Delta y_1 = f'(x_1)\Delta x=-1*1=-1Δy1=f(x1)Δx=11=1

nnnxnx_nxnyny_nynf′(xn)f'(x_n)f(xn)Δyn\Delta y_nΔyn
000000111222222
111111333−1-11−1-11

计算 f(2)f(2)f(2)

Δy2=f′(x2)Δx=1∗1=1\Delta y_2 = f'(x_2)\Delta x=1*1=1Δy2=f(x2)Δx=11=1

nnnxnx_nxnyny_nynf′(xn)f'(x_n)f(xn)Δyn\Delta y_nΔyn
000000111222222
111111333−1-11−1-11
222222222111111

计算 f(3)f(3)f(3)

Δy3=f′(x3)Δx=3∗1=3\Delta y_3 = f'(x_3)\Delta x=3*1=3Δy3=f(x3)Δx=31=3

nnnxnx_nxnyny_nynf′(xn)f'(x_n)f(xn)Δyn\Delta y_nΔyn
000000111222222
111111333−1-11−1-11
222222222111111
333333333333333

因此对应的 f(3)=3f(3)=3f(3)=3

欧拉方法是一种求解微分方程的数值方法,通用于求解一阶微分方程。对于高阶微分方程,可以通过将其转化为一阶微分方程组,然后再使用欧拉方法进行求解。 ### 高阶微分方程转化为一阶微分方程组 以一个 $n$ 阶微分方程为例,假设 $n$ 阶线性微分方程的一般表达式为: $a_n(x)D^ny(x) + \cdots + a_0(x)D^0y(x) = f(x)$ 引入新的变量,令 $y_1 = y, y_2 = y', y_3 = y'', \cdots, y_n = y^{(n - 1)}$,则可以将 $n$ 阶微分方程转化为一个由 $n$ 个一阶微分方程组成的方程组: $\begin{cases} y_1' = y_2 \\ y_2' = y_3 \\ \cdots \\ y_{n - 1}' = y_n \\ y_n' = \frac{1}{a_n(x)}(f(x) - a_{n - 1}(x)y_{n - 1} - \cdots - a_0(x)y_1) \end{cases}$ ### 欧拉方法求解一阶微分方程组 对于一阶微分方程组 $\begin{cases} y' = f(x,y)\\ y(x_0) = y_0 \end{cases}$,欧拉方法的迭代公式为: $y_{i + 1} = y_i + hf(x_i, y_i)$ 其中,$h$ 是步长,$x_{i + 1} = x_i + h$。 ### 代码示例(Python) ```python import numpy as np import matplotlib.pyplot as plt # 定义高阶微分方程转化后的一阶微分方程组 def f(x, y): # 这里以二阶微分方程 y'' + 2y' + y = 0 为例,转化为一阶微分方程组 # 令 y1 = y, y2 = y',则 y1' = y2, y2' = -2y2 - y1 dydx = np.zeros_like(y) dydx[0] = y[1] dydx[1] = -2 * y[1] - y[0] return dydx # 欧拉方法求解 def euler_method(f, x0, y0, h, num_steps): x_values = [x0] y_values = [y0] x = x0 y = y0 for _ in range(num_steps): y = y + h * f(x, y) x = x + h x_values.append(x) y_values.append(y) return np.array(x_values), np.array(y_values) # 初始条件 x0 = 0 y0 = np.array([1, 0]) # 假设 y(0) = 1, y'(0) = 0 h = 0.1 num_steps = 100 # 求解 x, y = euler_method(f, x0, y0, h, num_steps) # 绘制结果 plt.plot(x, y[:, 0], label='y(x)') plt.xlabel('x') plt.ylabel('y') plt.title('Euler Method for Higher Order ODE') plt.legend() plt.show() ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

努力的老周

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值