当前位置:
文档之家› 科学计算方法20(常微分方程数值解)
科学计算方法20(常微分方程数值解)
引例1. 人口模型
1/45
引例1. 人口模型
2/45
引例1. 人口模型
3/45
引例1. 人口模型
4/45
差分方法
y( x) f ( x, y( x))
y(
x0
)
y0
(离散化)
数值方法
难
y( x)
插值 (连续化)
易
yn , n 0,1, 2,
5/45
前向差分公式
f ( x)= f ( x h) f ( x) h f ( )
xn1 y( x)dx
xn
xn1 f ( x, y( x))dx
xn
左矩形积分公式
xn1 xn
f (x,
y( x))dx
hf
( xn ,
y( xn ))
若用y(xn)的近似值yn代入上式, 并记所得结果为yn+1
Euler公式: yn1 yn hf ( xn ,yn )
13/45
y' = f (x, y)
xn1 y( x)dx xn1 f ( x, y( x))dx
xn
xn
微积分基本定理
b
y( x)dx y(b) y(a)
a
y( xn1) y( xn )
xn1 y( x)dx xn1 f ( x, y( x))dx
xn
xn
右矩形积分公式
xn1 xn
f (x,
y( x))dx hf ( xn1,
y(i+1) = y(i) + h*f(x(i),y(i)); end plot(x,y,'ms-'); hold on, y=(1+2*x).^(1/2); plot(x,y)
10/45
11/45
方程中含有导数项y′, 这是微分方程的本质特征, 也是它难以求解的症结所在。
y f ( x, y)
方程中含有导数项y′, 这是微分方程的本质特征,
也是它难以求解的症结所在。常见解决思路通常为
数值微分和数值积分。
y f ( x, y)
y(
x0
)
y0
将xn 代入方程
y( xn ) f ( xn , y( xn ))
并用前向差分格式代替其中的导数项
y( xn1 ) h
y( xn )
y( xn )
0.3 1.2774 1.2649 0.8 1.6498 1.6125
0.4 1.3582 1.3416 0.9 1.7178 1.6732
0.5 1.4351 1.4142 1.0 1.7848 1.7321
9/45
clear; f = inline('y-2*x/y','x','y'); a = 0; b = 1;n=100; h =(b-a)/n; x=a:h:b; y(1) = 1; for i = 1 : n
f ( xn , y( xn ))
若用y(xn)的近似值yn代入上式, 并记所得结果为yn+1
Euler公式: yn1 yn hf ( xn , yn )
8/45
例1. 用Euler法求初值问题的数值解。
y
y
2x , y
0
x1
y(0) 1
解析解y(x) 1+2x
解: 步长h=0.1, xn= nh (n = 0, 1,···, 10)
12/45
方程中含有导数项y′, 这是微分方程的本质特征, 也是微分方程难以求解的症结所在。常见解决思路 通常为数值微分和数值积分。
y' = f (x, y)
xn1 y( x)dx xn1 f ( x, y( x))dx
xn
xn
微积分基本定理
b
y( x)dx y(b) y(a)
a
y( xn1) y( xn )
Euler公式: yn+1 = yn + 0.1( yn- 2xn /yn) (n = 0, 1, ···,10)
xn
Euler y(xn)
xn
Euler y(xn)
0.1 1.1000 1.0954 0.6 1.5090 1.4832
0.2 1.1918 1.1832 0.7 1.5803 1.5492
yn )
f ( xn1 , yn1 )]
15/45
h 梯形公式: yn1 yn 2 [ f ( xn , yn ) f ( xn1 , yn1 )]
显式格式与隐式格式各有利弊: 显式格式的计算 量小, 但稳定性较差; 与此相反, 隐式格式的稳定性好, 但需要迭代求解, 计算量比较大。
综合使用这两种方法, 先用Euler公式求得一个初 步的近似值, 称为预报值; 预报值的精度不高, 代入右 端的yn+1计算校正值。
xn1 y( x)dx xn1 f ( x, y( x))dx
xn
xn
梯形积分公式:
xn1 xn
f (x,
y( x))dx
h 2 [ f ( xn,
y( xn ))
f ( xn1,
y( xn1 ))]
若用y(xn)的近似值yn代入上式, 并记所得结果为yn+1
梯形公式:
yn1
yn
h 2 [ f ( xn ,
h
2
后向差分公式
f ( x)= f ( x) f ( x h) h f ( )
h
2
中心差分公式
f ( x)=
f ( x h)
f ( x h) h2
f ( )
2h
6
6/45
例1. 用Euler法求初值问题的数值解。
y(
x)
y( x)
2x , y( x)
0
x 1
y(0) 1
解: 步长h=0.1, xn= nh (n = 0, 1,···, 10), 将xn 代入方程
y( xn ) y( xn ) 2 xn / y( xn )
并用前向差分格式代替其中的导数项
y( xn1 ) h
y( xn )
y( xn )
y( xn )
2 xn
/
y( xn )
Euler公式: yn+1 = yn + h( yn- 2xn /yn) (n = 0, 1, ···,10)
7/45
y(
x0
)
y0
将xn+1 代入方程
y( xn1 ) f ( xn1 , y( xn1 ))
并用后向差分格式代替其中的导数项
y( xn1 ) h
y( xn )
y( xn1 )
f ( xn1 , y( xn1 ))
若用y(xn)的近似值yn代入上式, 并记所得结果为yn+1
隐式Euler公式: yn1 yn hf ( xn1 , yn1 )
y( xn1 ))
若用y(xn)的近似值yn代入上式, 并记所得结果为yn+1
隐式Euler公式: yn1 yn hf ( xn1 , yn1 )
14/45
y' = f (x, y)
xn1 y( x)dx xn1 f ( x, y( x))dx
xn
xn
y( xn1) y( xn )