matlab-常微分方程数值解法
- 格式:ppt
- 大小:1.92 MB
- 文档页数:53


欧拉法(euler)求解常微分方程的matlab程序及案例
欧拉方法是最初用于求解常微分方程的数值方法之一,它是一种显式的一步法,具有易于实施的优点,特别适合初学者使用。本文将介绍欧拉法的原理和使用MATLAB求解常微分方程的具体方法,同时给出一个简单的实例进行说明。
一、欧拉法原理
考虑一个一阶常微分方程y'=f(t,y),欧拉法的基本思想是将时间步长Δt均分成n个小步长,从y(t0)开始依次计算每个时刻的值,得到一列估计值y1, y2, …, yn。
欧拉法的计算公式为:
(1)y1=y(t0+Δt)=y(t0)+Δtf(t0, y0)
(2)y2=y(t0+2Δt)=y(t0+Δt)+Δtf(t0+Δt, y1)
(3)yn=y(t0+nΔt)=y(t0+(n-1)Δt)+Δtf(t0+(n-1)Δt, yn-1)
可以看出,欧拉法的核心在于利用已知的t和y计算f(t,y),从而获得y的逼近值。但是需要注意的是,步长Δt越小,计算所需的时间和内存就越多,而精度却并不一定提高。因此在实际应用中需要结合具体问题选择合适的步长。
二、MATLAB求解常微分方程的具体方法
(1)定义常微分方程 我们以一个简单的例子开始,考虑求解y'=1-y,y(0)=0.5在[0,1]区间内的积分。首先定义匿名函数dydt,将其传到ode45中求解:
dydt=@(t,y)1-y;
[t,y]=ode45(dydt,[0 1],0.5);
plot(t,y,'-o')
运行以上代码可以得到结果,其中plot函数用于绘制图像。但是,由于求解过程中计算机执行到ode45函数时可能需要很长时间,因此需要更快捷的方法。
(2)利用欧拉法求解方程
欧拉法求解方程首先需要定义步长Δt,这里设Δt为0.1。定义起始值y=[0.5]、时间向量t=0:Δt:1,然后计算列向量y的估计值:
t=0:0.1:1;
y=zeros(size(t));
欧拉法(matlab)一阶常微分方程
一、概述
微分方程是描述自然界中许多现象的数学模型,它在物理、化学、生物等领域有着广泛的应用。而欧拉法是求解微分方程的一种数值计算方法,通过利用微分方程的切线近似曲线上的点,来逼近微分方程的解。在matlab中,欧拉法是求解微分方程的常用方法之一。本文将介绍欧拉法在matlab中求解一阶常微分方程的具体步骤和实现过程。
二、欧拉法的原理
欧拉法是一种基本的数值方法,用于求解形如y' = f(x, y)的一阶常微分方程初值问题。其基本思想是将微分方程转化为差分方程,通过逐步逼近微分方程的解。具体步骤如下:
1. 确定初值条件,即确定微分方程的初始值(x0, y0)
2. 根据微分方程y' = f(x, y)计算斜率f(x, y) = dy/dx
3. 根据斜率计算下一个点的坐标,即y1 = y0 + h*f(x0, y0),其中h为步长
4. 更新坐标,即(x0, y0) = (x0+h, y1)
5. 重复上述步骤直至达到所需的精度或特定的终止条件
通过以上步骤,可以得到微分方程的近似解。在matlab中,可以利用欧拉法求解一阶常微分方程,具体步骤如下。
三、欧拉法在matlab中的实现
1. 编写求解函数
我们需要编写一个求解一阶常微分方程的函数。这个函数的输入参数包括微分方程的函数表达式、初始值、步长和终止条件等。函数的基本框架如下:
```matlab
function [x, y] = euler_method(f, x0, y0, h, x_end)
x = x0:h:x_end; 生成x的序列
y = zeros(size(x)); 初始化y的序列
y(1) = y0; 设置初始值
for i = 2:length(x)
y(i) = y(i-1) + h*f(x(i-1), y(i-1)); 根据欧拉法更新y值
end
end
实验四求微分方程的解
一、问题背景与实验目的
实际应用问题通过数学建模所归纳而得到的方程,绝大多数都是微分方程,
真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限
的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)
的解法,既要研究微分方程(组)的解析解法(精确解),更要研究微分方程(组)
的数值解法(近似解).
对微分方程(组)的解析解法(精确解),Matlab有专门的函数可以用,本实
验将作一定的介绍.
本实验将主要研究微分方程(组)的数值解法(近似解),重点介绍Euler折线
法.
二、相关函数(命令)及简介
1.dsolve('equ1','equ2',…):Matlab求微分方程的解析解.equ1、equ2、…为
方程(或条件).写方程(或条件)时用Dy表示y关于自变量的一阶导数,用
用D2y表示y关于自变量的二阶导数,依此类推.
2.simplify(s):对表达式s使用maple的化简规则进行化简.
例如:
symsx
simplify(sin(x)^2+cos(x)^2)
ans=1
3.[r,how]=simple(s):由于Matlab提供了多种化简规则,simple命令就是
对表达式s用各种规则进行化简,然后用r返回最简形式,how返回形成这种
形式所用的规则.
例如:
symsx
[r,how]=simple(cos(x)^2-sin(x)^2)
r=cos(2*x)
how=combine
4.[T,Y]=solver(odefun,tspan,y0)求微分方程的数值解.
说明:
(1)其中的solver为命令ode45、ode23、ode113、ode15s、ode23s、ode23t、
ode23tb之一.
(2)odefun是显式常微分方程:
00)(),(
ytyytf
dtdy
(3)在积分区间tspan=],[
0ftt上,从
0t到
ft,用初始条件
0y求解.(4)要获得问题在其他指定时间点
常微分方程数值解法
【作用】
微分方程建模是数学建模的重要方法,因为许多实际问题的数学描述将导致求解微
分方程的定解问题。把形形色色的实际问题化成微分方程的定解问题,大体上可以按以
下几步:
1. 根据实际要求确定要研究的量(自变量、未知函数、必要的参数等)并确定坐标系。
2. 找出这些量所满足的基本规律(物理的、几何的、化学的或生物学的等等)。
3. 运用这些规律列出方程和定解条件。
基本模型
1.发射卫星为什么用三级火箭
2.人口模型
3.战争模型
4.放射性废料的处理
通常需要求出方程的解来说明实际现象,并加以检验。如果能得到解析形式的解固然是便于分析和应用的,但是我们知道,只有线性常系数微分方程,并且自由项是某些特殊类型的函数时,才可以得到这样的解,而绝大多数变系数方程、非线性方程都是所谓“解不出来”的于是对于用微分方程解决实际问题来说,数值解法就是一个十分重要的手段。
1. 改进Euler 法:
2. 龙格—库塔(Runge—Kutta)方法:
【源程序】
1. 改进Euler 法:
function [x,y]=eulerpro(fun,x0,x1,y0,n);%fun为函数,(x0,x1)为x区间,y0为初始值,n为子区间个数
if nargin<5,n=50;end
h=(x1-x0)/n;
x(1)=x0;y(1)=y0;
for i=1:n
x(i+1)=x(i)+h;
y1=y(i)+h*feval(fun,x(i),y(i));
y2=y(i)+h*feval(fun,x(i+1),y1);
y(i+1)=(y1+y2)/2;
end
调用 command窗口
f=inline('-2*y+2*x^2+2*x')
[x,y]=eulerpro(f,0,0.5,1,10)
求解函数y'=−2y+2x2+2x ,(0 ≤ x ≤ 0.5), y(0) = 1
2. 龙格—库塔(Runge—Kutta)方法: