实验五 用matlab求解常微分方程

1.微分方程的概念

未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程。常微分方程的一般形式为

F(t,y,y',y\,?,y(n))?0

如果未知函数是多元函数,成为偏微分方程。联系一些未知函数的一组微分方程组称为微分方程组。微分方程中出现的未知函数的导数的最高阶解数称为微分方程的阶。若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,一般表示为

y(n)?a1(t)y(n?1)???an?1(t)y'?an(t)y?b(t)

若上式中的系数

ai(t),i?1,2,?,n均与t无关,称之为常系数。

dy 2.常微分方程的解析解

有些微分方程可直接通过积分求解.例如,一解常系数常微分方程dtdyy?1?dty?ce?1t?y?1可化为

,两边积分可得通解为.其中c为任意常数.有些常微分方程可用一些

技巧,如分离变量法,积分因子法,常数变异法,降阶法等可化为可积分的方程而求得解析解.

线性常微分方程的解满足叠加原理,从而他们的求解可归结为求一个特解和相应齐次微分方程的通解.一阶变系数线性微分方程总可用这一思路求得显式解。高阶线性常系数微分方程可用特征根法求得相应齐次微分方程的基本解,再用常数变异法求特解。

一阶常微分方程与高阶微分方程可以互化,已给一个n阶方程

y(n)?f(t,y',y\,?,y(n?1))

,可将上式化为一阶方程组 ?y1'?y2?y'?y3?2????y'?yn?n?1??yn'?f(t,y1,y2,?,yn)

反过来,在许多情况下,一阶微分方程组也可化为高阶方程。所以一阶微分方程组与高阶常微分方程的理论与方法在许多方面是相通的,一阶常系数线性微分方程组也可用特征根法求解。

3.微分方程的数值解法

除常系数线性微分方程可用特征根法求解,少数特殊方程可用初等积分法求解外,大部分微分方程无限世界,应用中主要依靠数值解法。考虑一阶常微分方程初值问题

?y'(t)?f(t,y(t)),t0?t?tf??y(t0)?y0

y1?y,y2?y',?,yn?y(n?1)其中

y?(y1,y2,?,ym)',f?(f1,f2,?,fm)',y0?(y10,y20,?,ym0)'.所谓数值解法,就

t?t1???tn?tfy,k?0,1,?,n是寻求y(t)在一系列离散节点0上的近似值k称

hk?tk?1?tk为步长,通常取为常量h。最简单的数值解法是Euler法。

Euler法的思路极其简单:在节点出用差商近似代替导数

y(tk?1)?y(tk)hy'(tk)?

这样导出计算公式(称为Euler格式)

yk?1?yk?hf(tk,yk),k?0,1,2,?

他能求解各种形式的微分方程。Euler法也称折线法。

Euler方法只有一阶精度,改进方法有二阶Runge-Kutta法、四阶Runge-Kutta法、五阶Runge-Kutta-Felhberg法和先行多步法等,这些方法可用于解高阶常微分方程(组)初值问题。边值问题采用不同方法,如差分法、有限元法等。数值算法的主要缺点是它缺乏物理理解。

4.解微分方程的MATLAB命令

MATLAB中主要用dsolve求符号解析解,ode45,ode23,ode15s求数值解。

s=dsolve(‘方程1’, ‘方程2’,…,’初始条件1’,’初始条件2’ …,’自变量’) 用字符串方程表示,自变量缺省值为t。导数用D表示,2阶导数用D2表示,以此类推。S返回解析解。在方程组情形,s为一个符号结构。 [tout,yout]=ode45(‘yprime’,[t0,tf],y0) 采用变步长四阶Runge-Kutta法和五阶Runge-Kutta-Felhberg法求数值解,yprime是用以表示f(t,y)的M文件名,t0表示自变量的初始值,tf表示自变量的终值,y0表示初始向量值。输出向量tout表示节点(t0,t1, …,tn)T,输出矩阵yout表示数值解,每一列对应y的一个分量。若无输出参数,则自动作出图形。 ode45是最常用的求解微分方程数值解的命令,对于刚性方程组不宜采用。ode23与ode45类似,只是精度低一些。ode12s用来求解刚性方程组,是用格式同ode45。可以用help dsolve, help ode45查阅有关这些命令的详细信息. 例1 求下列微分方程的解析解

(1)y'?ay?b

(2)y''?sin(2x)?y,y(0)?0,y'(0)?1 (3)f'?f?g,g'?g?f,f'(0)?1,g'(0)?1 方程(1)求解的MATLAB代码为:

>>clear;

>>s=dsolve('Dy=a*y+b')

结果为

s =-b/a+exp(a*t)*C1 方程(2)求解的MATLAB代码为:

>>clear;

>>s=dsolve('D2y=sin(2*x)-y','y(0)=0','Dy(0)=1','x') >>simplify(s) %以最简形式显示s

结果为

s =(-1/6*cos(3*x)-1/2*cos(x))*sin(x)+(-1/2*sin(x)+1/6*sin(3*x))*cos(x)+5/3*sin(x) ans =-2/3*sin(x)*cos(x)+5/3*sin(x) 方程(3)求解的MATLAB代码为:

>>clear;

>>s=dsolve('Df=f+g','Dg=g-f','f(0)=1','g(0)=1') >>simplify(s.f) %s是一个结构 >>simplify(s.g)

结果为

ans =exp(t)*cos(t)+exp(t)*sin(t) ans =-exp(t)*sin(t)+exp(t)*cos(t) 例2 求解微分方程

y'??y?t?1,y(0)?1,

先求解析解,再求数值解,并进行比较。由

>>clear;

>>s=dsolve('Dy=-y+t+1','y(0)=1','t') >>simplify(s)

可得解析解为

y?t?e?t。下面再求其数值解,先编写M文件fun8.m

%M函数fun8.m

function f=fun8(t,y) f=-y+t+1; 再用命令

>>clear; close; t=0:0.1:1;

>>y=t+exp(-t); plot(t,y); %化解析解的图形

>>hold on; %保留已经画好的图形,如果下面再画图,两个图形和并在一起 >>[t,y]=ode45('fun8',[0,1],1);

>>plot(t,y,'ro'); %画数值解图形,用红色小圈画 >>xlabel('t'),ylabel('y')

结果见图7.1

1.41.351.31.251.21.151.11.051y00.20.4t0.60.81 图16.6.1 解析解与数值解

由图16.6.1可见,解析解和数值解吻合得很好。 例3 求方程

ml?\?mgsin?,?(0)??0,?'(0)?0

的数值解.不妨取l?1,g?9.8,?(0)?15.则上面方程可化为

?\?9.8sin?,?(0)?15,?'(0)?0

先看看有没有解析解.运行MATLAB代码

>>clear;

>>s=dsolve('D2y=9.8*sin(y)','y(0)=15','Dy(0)=0','t') >>simplify(s)

知原方程没有解析解.下面求数值解.令y1??,y2??'可将原方程化为如下方程组

?y1'?y2??y2'?9.8sin(y1)?y(0)?15,y(0)?02?1

建立M文件fun9.m如下

%M文件fun9.m

function f=fun9(t,y)

f=[y(2), 9.8*sin(y(1))]'; %f向量必须为一列向量

运行MATLAB代码

>>clear; close;

>>[t,y]=ode45('fun9',[0,10],[15,0]);

>>plot(t,y(:,1)); %画?随时间变化图,y(:2)则表示?'的值 >>xlabel('t'),ylabel('y1')

结果见图7.2

16.516y115.51501234 5t678910 图7.2 数值解

由图7.2可见,?随时间t周期变化。

习题

1.求下列微分方程的解析解

2.求方程

(1?x)y\?2xy',y(0)?1,y'(0)?32

的解析解和数值解,并进行比较

3.分别用ode45和ode15s求解Van-del-Pol方程

的数值解,并进行比较.

?d2xdx2?x?0?2?1000(1?x)dt?dt?x(0)?0,x'?0)?1??

matlab求解常微分方程的实验,实验五 - - 用matlab求解常微分方程相关推荐

  1. MATLAB实战系列(三十五)-MATLAB基于BP神经网络的光伏发电太阳辐照度预测

    前言 光伏发电功率主要受太阳辐照度影响,所以准确预测太阳辐照度对光伏功率预测十分重要.程序采用小波分解先对辐照度数据进行分解,然后再用bp神经网络对分解的辐照度数据分别预测,再组合作为最后的预测结果. ...

  2. MATLAB实战系列(二十五)-MATLAB交错并联BUCK电路闭环PID设计及分析

    前言 本文涉及的代码可参见: 基于Matlabsimulink的小电流接地系统单向故障仿真分析 喜欢的小伙伴可自行订阅 交错并联技术应用于Buck变换器,以两支路交错并联Buck为例进行研究,在与传统 ...

  3. 无失真传输matlab原理,信号与系统实验(MATLAB版)实验23综合实验4——无失真传输系统.ppt...

    一.实验目的 在掌握相关基础知识的基础上,学会自己设计实验,学会运用MATLAB语言编程,并具有进行信号分析的能力.在本实验中学会利用所学方法,加深了解和掌握无失真的概念和条件. 二.实验内容 1 ...

  4. matlab系统的根轨迹,实验五 利用MATLAB绘制系统根轨迹

    <实验五 利用MATLAB绘制系统根轨迹>由会员分享,可在线阅读,更多相关<实验五 利用MATLAB绘制系统根轨迹(6页珍藏版)>请在人人文库网上搜索. 1.实验五 利用MAT ...

  5. 【通信原理】实验五 基于Matlab的2ASK和2FSK调制解调

    目录 一.实验目的 二.实验器材 三.实验原理 1.二进制振幅键控(2ASK) 2.二进制频移键控(2FSK) 四.示例演示 1.2ASK的模拟调制程序如下: 2.2ASK的开关键控法,调制程序如下: ...

  6. 利用matlab实现卷积实验报告,实验五 使用matlab实现卷积的运算

    实验五 使用matlab实现卷积的运算 一 实验目的 1. 2. 二 实验内容 学习MATLAB语言的编程方法及熟悉MATLAB指令: 深刻理解卷积运算,利用离散卷积实现连续卷积运算: 1. 完成f1 ...

  7. matlab求解参数线性规划问题,实验三十用MATLAB求解线性规划问题

    <实验三十用MATLAB求解线性规划问题>由会员分享,可在线阅读,更多相关<实验三十用MATLAB求解线性规划问题(27页珍藏版)>请在人人文库网上搜索. 1.实验三十 用MA ...

  8. matlab 信号的频谱分析,实验五基于Matlab的信号频谱分析(复杂)

    实验五基于Matlab的信号频谱分析(复杂) 本次实验注意:<实验五MALTAB基础知识(简单)> <实验五 基于Matlab的信号频谱分析(复杂)> 选作一个即可 实验五 基 ...

  9. matlab复杂周期信号类建立,实验五 基于Matlab的信号频谱分析(复杂)

    本次实验注意:<实验五MALTAB基础知识(简单)> <实验五 基于Matlab的信号频谱分析(复杂)> 选作一个即可 实验五 基于Matlab的信号频谱分析 (一) 实验目的 ...

  10. 一般单纯形法的matlab程序,实验报告(单纯形法的matlab程序)

    <实验报告(单纯形法的matlab程序)>由会员分享,可在线阅读,更多相关<实验报告(单纯形法的matlab程序)(5页珍藏版)>请在人人文库网上搜索. 1.实验一:线性规划单 ...

最新文章

  1. UDP用打洞技术穿透NAT的原理与实现
  2. linux+eth0+流量监控,linux流量监控脚本 | 旺旺知识库
  3. 在kubernetes集群中运行nginx
  4. 用一句话证明你是程序员,你会怎么说
  5. 送书 | 耗时很长的程序忘加nohup就运行了怎么办?
  6. leetcode题解50-Pow(x,n)
  7. 物联网大数据如何改善农业运营
  8. http协议,postget请求
  9. cxonev4验证用户_欧姆龙编程组态软件Omron CX-ONE V4.50 简体中文版
  10. Protel99SE教程(一)——原理图封装
  11. 无人机底层开发-MPU6050六轴传感器+磁力计初始化
  12. 【CGAL】编译(windos)
  13. A-priori算法的简单实现
  14. 24bit,192KHz 双通道数模转换电路/立体声数模转换芯片MS4344 可替代CS4344-CZZR
  15. 数据传输服务包年包月_包年包月转按月付费
  16. UE4-如何做一个简单的TPS角色(一)-创建一个基础角色
  17. 2017 php 免费空间,免费空间免费php空间
  18. 光学遥感影像的几何校正
  19. C++ MFC 文字转语音
  20. HC-05蓝牙模块AT指令设置教程

热门文章

  1. GDAL自带的 rpc纠正和金字塔文件生成方法
  2. 2018.10.22~23总结
  3. JAVA-JDK配置-JDK下载安装以及环境变量配置(win10)
  4. Koo叔说Shader-描边效果
  5. 计算机网络【最终版】
  6. 火车头采集的文件发布到服务器上,火车头采集器图片采集上传设置
  7. aix系统日志转存日志服务器,AIX查看系统日志
  8. 两平面平行但不重合的条件是_____怎样证明平行
  9. 腐蚀rust图纸怎么找_rust腐蚀建家图纸 | 手游网游页游攻略大全
  10. 历史重演?元宇宙会走上世纪交替时的互联网老路么?