matlab求解二阶非线性matlab 二阶微分方程程,已知末状态值,如何求出初值?

用matlab求解一个二阶非线性常微分方程-开发-任务易推荐给您
¥125.00元
用matlab求解一个二阶非线性常微分方程
通过任务易推广注册的用户,完成该任务后可以获得 2元(20K币)的返利,
具体要求:如题,详细要求请看附件,报酬100(纯收入,我会付125给八戒),希望高手解答!
任务易所有内容均为威客和外包行业网站提供或收集于互联网公开的信息,目的是给在网络上工作的威客和兼职人员收集更多的免费工作信息,以帮助更多的人自主就业。如果有内容触及您的权益,请给我们发邮件()并附上具体网址和说明,核实后我们将立即删除!对免责声明的解释、修改及更新权均属于任务易所有。
你觉得这个任务肿么样?
评分:3.5分
猪八戒网是全国最大的在线服务交易平台,由原《重庆晚报》首席记者朱明跃创办于2006年,服务交易品类涵盖创意设计、软件开发、网站建设、网络营销、文案策划、生活服务等多种行业。2011年猪八戒网获得IDG千万级美金投资,并被评选为中国2011年度“最佳商业模式十强”企业。2012年猪八戒还获得了国家文化产业示范基地称号。
你可能也对这些任务感兴趣
日内的任务08-1606-2708-2409-16
07-1809-2202-1303-06
◇本站云标签查看: 74|回复: 0|关注: 0
ode45求解四元二阶非线性微分方程组
<h1 style="color:# 麦片财富积分
新手, 积分 5, 距离下一级还需 45 积分
我想问一下,在ode45中,初值选取的不同,是否会影响结果的敛散性,就是我随便定个初值,结果是发散的,我想知道是否跟初值的选取有关
站长推荐 /2
利用MATLAB进行传感器数据分析
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区MATLAB实验MATLAB数值计算:二阶电路的时域分析-博泰典藏网
典藏文档 篇篇精品
MATLAB实验MATLAB数值计算:二阶电路的时域分析
导读:实验二MATLAB数值计算:二阶电路的时域分析,一、实验目的,因此往往需要使用计算机数值求解(近似解),MATLAB作为一种强大的科学计算语言,其在数值计算和数据的可视化方面具有无以伦比的优势,本次实验将以二阶线性电路-RLC电路和二阶非线性电路-范德堡电路的时域计算为例,了解和学习使用MATLAB作为计算工具来解算复杂的微分方程,2.熟练运用ode45求解器数值求解常微分方程,能使用MATL实验二
MATLAB数值计算:二阶电路的时域分析 一、实验目的 在物理学和工程技术上,很多问题都可以用一个或一组常微分方程来描述,因此要解决相应的实际问题往往需要首先求解对应的微分方程(组)。在大多数情况下这些微分方程(组)通常是非线性的或者是超越方程(比如范德堡方程,波导本征值方程等),很难解析地求解(精确解),因此往往需要使用计算机数值求解(近似解)。MATLAB作为一种强大的科学计算语言,其在数值计算和数据的可视化方面具有无以伦比的优势。在解决常微分方程(组)问题上,MATLAB就提供了多种可适用于不同场合(如刚性和非刚性问题)下的求解器(Solver),例如ode45,ode15s,ode23,ode23s等等。本次实验将以二阶线性电路-RLC电路和二阶非线性电路-范德堡电路的时域计算为例,了解和学习使用MATLAB作为计算工具来解算复杂的微分方程,以期达到如下几个目的: 1. 熟练使用dsolve函数解析求解常微分方程; 2. 熟练运用ode45求解器数值求解常微分方程;
3. 了解状态方程的概念,能使用MATLAB对二阶电路进行计算和分析; 二、实验预备知识 1.微分方程的概念 未知的函数以及它的某些阶的导数连同自变量都由一已知方程联系在一起的方程称为微分方程。如果未知函数是一元函数,称为常微分方程(Ordinary differential equations,简称odes)。n阶常微分方程的一般形式(隐式)为: F(t,y,y',y\,?,y(n))?0
(1) 其中t为自变量。若方程中未知函数及其各阶导数都是一次的,称为线性常微分方程,否则就是非线性微分方程,例如方程y''??(1?y2)y'?y?0 就是非线性的。
2.常微分方程的解及MATLAB指令 一阶常微分方程与高阶微分方程可以互化,已知一个n阶常微分方程(显式): y(n)?f(t,y',y\,?,y(n?1)(n?1))
(2) 若令y1?y,y2?y',y3?y'',....,yn?y,可将上式化为n个一阶常微分方程组: ?y1'?f1(t,y1,y2,...yn)?'?y2?f2(t,y1,y2,...yn) ???
??y'?f(t,y,y,...y)?nn12n(3) (3)式称为状态方程,y1, y2, …,yn(即y, y?, y??, …, y(n-1) )称为状态变量,其中y1(即y)就是常微分方程(2)式的解。(3)式中右边的函数f1、f2、…、fn代表各个状态变量的一阶导数的函数表达式,对于具体的方程它们有具体的形式,例如下列二阶非线性微分方程: y''??(1?y)y'?y?0
2若令y1?y,y2?y',可将其改写成2个一阶微分方程组(状态方程)的形式: ?y1'?y2
?2?y2'??(1?y1)y2?y1因此f1?y2;
f2??(1?y12)y2?y1。 ? 解析解 只有少部分的线性常微分方程可以解析地求解(即可以算出精确的解表达式),例如一阶常系数常微分方程dydt?y?1可以通过直接积分解出,而多数微分方程尤其是非线性方程则很难得到解析解。 有解析解的方程虽然可以手算解出,但是MATLAB也提供了dslove指令来求方程的解析解,其使用格式: S = dsolve (‘方程1’, ‘方程2’,…,’初始条件1’,’初始条件2’ …,’自变量’)
方程用字符串表示,自变量缺省值为t。1阶导数用D表示,2阶导数用D2表示,以此类推。S用于返回方程解析解的表达式。如果是求解方程组,则S为一个结构体数组,它的每个域存放方程组每一个解的表达式。 例1:求下列微分方程的解析解 y''?sin(2x)?y,y(0)?0,y'(0)?1 >> s=dsolve(’D2y=sin(2*x)-y’,’y(0)=0’,’Dy(0)=1’,’x’); >> simplify(s)
%以最简形式显示s ans = -1/3*sin(x)*(-5+2*cos(x))
% 方程的解(符号表达式) ? 数值解 对于没有解析解的方程主要依靠计算机进行数值求解(得到的是近似解),例如方程。y''??(1?y)y'?y?0 就须通过计算机数值求解(结果是一系列解的数值而非表达式)考虑n阶微分方程(2)式的数值求解,它等价于一阶常微分方程组(3)式。现将(3)式写成矩阵形式: Y'(t)?F(t,Y(t))
(4) 2其中 ?y1(t)??y?????y2(t)y'?=??
为n个分量的列向量(Column vector),也称状态向量 Y(t)???????????(n?1)?y(t)??n??y??F?????f1??f2?
n个分量的列向量,其每个元素分别为(3)式右边的函数表达式
???fn?我们知道,微分方程要有唯一的确定解,必须给定初值条件。因此方程(4)式要有确定的解必须给定初值条件(t0为初始时刻): ?y(t0)??y1(t0)?????y'(t0)y2(t0)????
(7) Y0?Y(t0)?????????(n?1)???(t0)??yn(t0)??yMatlab提供了ode45指令(ode是常微分方程的英文缩写)来求解方程(4)的数值解(近似解)。基本使用格式: [tout, Yout] =ode45 (odefun, tspan, Y0,options)
其参数说明如下: ① odefun
一般是用M文件编写的函数,odefun代表函数名,由用户自己定义。函数返回值为(4)式右边的F(t,Y)=(f1, f2 ,…, fn)T。故odefun函数的返回值应是列向量,其最简单的编写格式为:
F = odefun (t, Y)
【 作用是计算并返回4式中的F(t, Y) 】 其中
时间变量,为标量,代表计算进程中的某时刻点 Y
代表状态变量的列向量(即5式) F
返回值F(t, Y),为列向量(见6式) ode45求解指令在计算时将会不断地在各个时间点调用odefun函数,并自动给输入参数t和Y赋值。 ② tspan
指定方程的求解区间[t0, tf],t0是初始时刻。 ③ Y0
用户给定的初值条件,为n个分量的列向量,见(7)式。 ④ options
可选项。一般情况下可缺省即可,若用户有特殊要求则须使用odeset指令设置options选项,具体用法可使用help odeset命令查询,此处不做要求。 ⑤ tout
列向量,输出求解过程中区间[t0, tf]上各个计算点的时刻,即 tout?(t0 t1 t2? tf)', [t0, tf]上计算点的数目是由Matlab自动生成。 ⑥ Yout
输出矩阵,其排列格式如下: ?y1(t0)?y1(t1)Yout??????y1(tf)y2(t0)y2(t1)?y2(tf)????yn(t0)??y(t0)??yn(t1)?=?y(t1)??????yn(tf)??y(t)f?y'(t0)y'(t1)?y'(tf)????y(n?1)(t0)??(n?1)y(t1)??
(8)??y(n?1)(tf)??Yout的第1列代表的是状态变量y1在t0, t1, t2,?, tf(依次为tout的每个元素)各个时刻的值,由于y1=y,所以Yout的第一列就是待求方程的数值解,它显然是一系列离散的y(t)值:?y(ti),i?0,1,2,...f?;将Yout第一列提取出来并用plot(tout,Yout(:,1))指令即可绘制解y(t)的函数图像。Yout的第2列是y的一阶导数y'(?阶导数y''(?y3)的数值解…。 第y2)的数值解,3列是y的二三、实验内容 1. 二阶线性电路―RLC回路的零输入响应 当电路中含有二个动态元件(如电感、电容)时,建立的电路方程为二阶微分方程,这样的电路称为二阶电路,如果微分方程是线性的,则为线性电路,若为非线性方程,则是非线性电路,如范德堡电路。所谓零输入响应指的是电路中无外加的激励源,仅由动态元件初始储能所产生的响应。
考虑如图所示的RLC电路,假设电容原已充电,根据电路理论,此二阶电路的零输入响应可用如下二阶线性微分方程描述: ducdt22?RducLdt?1LCuc?0
(9) 其中uc代表电容电压。给定初值条件: ?uct?0?1?duc?i(t)??Ct?0?dt??0t?0
(10) 元件参数L=0.5H, R=12.5?, C=0.02F。要得到t≥0时的零输入响应,就必须求解(9)式。 A. 解析解 方程(9)可以直接求解,因此有解析解。下面改用MATLAB中的dsolve指令来求方程(9)的解析解,程序如下: S=dsolve('D2u=-R/L*Du-1/L/C*u','u(0)=1','Du(0)=0','t');
% S为字符型数组(字串),其值为方程9的解表达式 L=0.5;C=0.02;R=12.5;
% 元件参数 t=0:0.01:1;
% 定义区间[0,1]上的时间序列 y=eval(S);
% eval串演算函数,计算字串S(即9式的解)在t时刻的值 plot(t,y)
% 绘制电压波形,即uc(t)的零输入响应
方程(9)虽然可以解析求解,但也可以使用ode45指令来近似计算。令y1= uc, y2= duc/dt,则方程9改写成如下状态方程: ?y1'?y2?
(11) 1R?y1?y2?y2'??LCL?上式也可以写成(4)式的形式,因此状态向量
Y=(y1,y2)T,
F =(f1,f2)T =(y2,1/L/C*y1R/L*y2)T
(12) 第一步:通过M文件创建ode函数,函数名circuit_2order_odefun。 function F=circuit_2order_odefun(t,Y) global L C R
% 定义全局变量L、C、R,以实现参数在MATLAB的基本工作空% 间和函数的专用空间之间数据的传递 F=[Y(2);-1/L/C*Y(1)-R/L*Y(2)]; % 函数返回值F, 列向量,见(12)式 注意,函数创建完后,必须存盘,存储文件名和函数名应一致! 第二步:创建M脚本文件circuit_2order.m L=0.5; C=0.02; R=12.5;
% 元件参数 Y0=[1;0];
% 列向量,初值条件 tspan=[0,1];
% 定义求解区间[0,1] [tout,Yout]=ode45('circuit_2order_odefun',tspan,Y0); plot(tout,Yout(:,1));
% 绘电压波形,即uc(t)的零输入响应 2. 二阶非线性电路―范德堡(Van de Pol)电路 范德堡电路由一个线性电感、一个线性电容和一个非线性电阻构成,如图(a)所示。非线性电阻的伏安特性如图(b)所示,可很明显看出电阻是非线性的。
范德堡电路的特性可由一个二阶非线性微分方程描述(参见邱关源的《电路》第5版P463-P465): diLdt22??(1?iL)2diLdt?iL?0
其中??CL。上式就是著名的范德堡方程。该方程很难解析求解,必须借助计算机数值求解。令y1?iL,y2?diLdt,将范德堡方程改写成一阶微分方程组(状态方程)的形式: ?y'?y2
(14) 2?y2'??(1?y1)y2?y1上式也可以写成(4)式的形式。因此状态向量Y和F分别为 ??y1?,?f1??y2
(15) Y???F??????2?y2??f2???(1?y1)y2?y1?假定参数? =0.1,求解区间[0, 100],以及初值条件 ?y1(0)??0? Y0??????
(16)?y2(0)??1?请仿照实验内容1,利用ode45指令求解范德堡方程,并绘制电流iL的波形(即电流的零输入响应图)。 四、实验任务 1. 输入实验内容1中提供的程序上机练习,熟悉dslove指令以及ode45指令的使用方法,并尝试解答思考题1。 2. 在任务1的基础上,独立编制实验内容2的计算程序,并尝试解答思考题3。 五、思考题 1. 在实验内容1中,若使用ode45指令解方程9式,如何得到电流的零输入响应波形? 2. 在实验内容1中,试研究R=1?,2?,3?,…,10?时电压Uc(t)的响应波形,并把它们绘制在一张图上。 3. 从任务2的电流波形图 (如下图) 中,你能得到什么结论?如何绘制范德堡电路的uc ~ iL函数图像(称为相图)?
(提示:u?1diL?1i3?i?1y?1y3?y) cLL211?dt3?3 附:实验任务2的参考图 包含总结汇报、经管营销、计划方案、出国留学、党团工作、行业论文、表格模板、自然科学、旅游景点、农林牧渔以及MATLAB实验MATLAB数值计算:二阶电路的时域分析等内容。本文共2页
相关内容搜索您还可以使用以下方式登录
当前位置:&>&&>& > Matlab求解微分方程(组)及偏微分方程(组)
matlab求解偏微分方程 Matlab求解微分方程(组)及偏微分方程(组)
第四讲 Matlab求解微分方程(组)
理论介绍:Matlab求解微分方程(组)命令 求解实例:Matlab求解微分方程(组)实例
实际应用问题通过数学建模所归纳得到的方程,绝大多数都是微分方程,真正能得到代数方程的机会很少.另一方面,能够求解的微分方程也是十分有限的,特别是高阶方程和偏微分方程(组).这就要求我们必须研究微分方程(组)的解法:解析解法和数值解法. 一.相关函数、命令及简介
1.在Matlab中,用大写字母D表示导数,Dy表示y关于自变量的一阶导数,D2y表示y关于自变量的二阶导数,依此类推.函数dsolve用来解决常微分方程(组)的求解问题,调用格式为:
X=dsolve(‘eqn1’,’eqn2’,…)
函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解.
注意,系统缺省的自变量为t
2.函数dsolve求解的是常微分方程的精确解法,也称为常微分方程的符号解.但是,有大量的常微分方程虽然从理论上讲,其解是存在的,但我们却无法求出其解析解,此时,我们需要寻求方程的数值解,在求常微分方程数值解方面,MATLAB具有丰富的函数,我们将其统称为solver,其一般格式为:
[T,Y]=solver(odefun,tspan,y0)
说明:(1)solver为命令ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb、ode15i之一.
(2)odefun是显示微分方程y&#39;?f(t,y)在积分区间tspan?[t0,tf]上从t0到tf用初始条件y0求解.
(3)如果要获得微分方程问题在其他指定时间点t0,t1,t2,?,tf上的解,则令tspan?[t0,t1,t2,?tf](要求是单调的).
(4)因为没有一种算法可以有效的解决所有的ODE问题,为此,Matlab提供了多种求解器solver,对于不同的ODE问题,采用不同的solver.
表1 Matlab中文本文件读写函数
说明:ode23、ode45是极其常用的用来求解非刚性的标准形式的一阶微分方程(组)的初值问题的解的Matlab常用程序,其中:
ode23采用龙格-库塔2阶算法,用3阶公式作误差估计来调节步长,具有低等的精度.
ode45则采用龙格-库塔4阶算法,用5阶公式作误差估计来调节步长,具有中等的精度.
3.在matlab命令窗口、程序或函数中创建局部函数时,可用内联函数inline,inline函数形式相当于编写M函数文件,但不需编写M-文件就可以描述出某种数学关系.调用inline函数,只能由一个matlab表达式组成,并且只能返回一个变量,不允许[u,v]这种向量形式.因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline函数,inline函数的一般形式为:
FunctionName=inline(‘函数内容’, ‘所有自变量列表’)
例如:(求解F(x)=x^2*cos(a*x)-b ,a,b是标量;x是向量 )在命令窗口输入:
Fofx=inline(‘x .^2*cos(a*x)-b’ , ‘x’,’a’,’b’); g= Fofx([pi/3 pi/3.5],4,1) 系统输出为:g=-1.9
注意:由于使用内联对象函数inline不需要另外建立m文件,所有使用比较方便,另外在使用ode45函数的时候,定义函数往往需要编辑一个m文件来单独定义,这样不便于管理文件,这里可以使用inline来定义函数. 二.实例介绍
1.几个可以直接用Matlab求微分方程精确解的实例 例1 求解微分方程y&#39;?2xy?xe?x
程序: y=dsolve(‘Dy+2*x*y=x*exp(-x^2)’,’x’)
例2 求微分方程xy&#39;?y?ex?0在初始条件y(1)?2e下的特解并画出解函数的图形.
程序: y=dsolve(‘x*Dy+y-exp(1)=0’,’y(1)=2*exp(1)’,’x’);ezplot(y)
?5x?y?e??dt
例 3 求解微分方程组?在初始条件x|t?0?1,y|t?0?0下的特解
?dy?x?3y?0??dt
并画出解函数的图形.
程序:syms x y t
[x,y]=dsolve(&#39;Dx+5*x+y=exp(t)&#39;,&#39;Dy-x-3*y=0&#39;,&#39;x(0)=1&#39;,&#39;y(0)=0&#39;,&#39;t&#39;) simple(x); simple(y)
ezplot(x,y,[0,1.3]);axis auto
2.用ode23、ode45等求解非刚性标准形式的一阶微分方程(组)的初值问题的数值解(近似解)
???2y?2x?2x
例 4 求解微分方程初值问题?dx的数值解,求解范围为区
?y(0)?1?间[0,0.5].
程序:fun=inline(&#39;-2*y+2*x^2+2*x&#39;,&#39;x&#39;,&#39;y&#39;);
[x,y]=ode23(fun,[0,0.5],1); plot(x,y,&#39;o-&#39;)
例 5 求解微分方程2??(1?y2)?y?0,y(0)?1,y&#39;(0)?0的解,并画出
分析:这是一个二阶非线性方程,我们可以通过变换,将二阶方程化为一阶方程组求解.令x1?y,x2?
,??7,则 dt
?x2,x1(0)?1??dt
dx?2?7(1?x2)x?x,x(0)?0
编写M-文件vdp.m function fy=vdp(t,x)
fy=[x(2);7*(1-x(1)^2)*x(2)-x(1)]; end
在Matlab命令窗口编写程序 y0=[1;0]
[t,x]=ode45(@vdp,[0,40],y0);或[t,x]=ode45(&#39;vdp&#39;,[0,40],y0); y=x(:,1);dy=x(:,2); plot(t,y,t,dy)
练习与思考:M-文件vdp.m改写成inline函数程序? 3.用Euler折线法求解
Euler折线法求解的基本思想是将微分方程初值问题
??y(x0)?y0
化成一个代数(差分)方程,主要步骤是用差商
y(x?h)?y(x)dy
替代微商,于是
?y(xk?h)?y(xk)
?f(xk,y(xk))?
?y0?y(x0)?
欢迎转载:
推荐:    

我要回帖

更多关于 matlab二阶微分方程组 的文章

 

随机推荐