MATLAB符号方程的求解重点讲义资料.docx
- 文档编号:4609606
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:15
- 大小:58.40KB
MATLAB符号方程的求解重点讲义资料.docx
《MATLAB符号方程的求解重点讲义资料.docx》由会员分享,可在线阅读,更多相关《MATLAB符号方程的求解重点讲义资料.docx(15页珍藏版)》请在冰豆网上搜索。
MATLAB符号方程的求解重点讲义资料
广东海洋大学
《数学软件》课程设计
MATLAB符号方程的求解
院(系)名称
理学院
专业班级
信计1134班
姓名
学号
指导教师
成绩
教师评语:
指导教师签字:
2015年6月15日
摘要
除了数值运算以外,在数学、工程和其他应用科学中常用到符号运算。
MATLAB和著名的符号运算语音MAPLE相结合,为大家提供了符号运算与符号可视为一体的符号运算功能。
运用MATLAB,我们可以解决代数方程和常微分方程,快速地得到我们想要的结果,有力于解决人为难以解决的问题。
关键词:
MATLAB;代数;常微分
1.MATLAB
1.1MATLAB简介
MATLAB语言是当今国际上科学界(尤其是自动控制领域)最具影响力、也是最有活力的软件。
它起源于矩阵运算,并已经发展成一种高度集成的计算机语言。
它提供了强大的科学运算、灵活的程序设计流程、高质量的图形可视化与界面设计、便捷的与其他程序和语言接口的功能。
MATLAB语言在各国高校与研究单位起着重大的作用。
1.2MATLAB特点与作用
MATLAB的含义是矩阵实验室(MATRIXLABORATORY),主要用于方便矩阵的存取,其基本元素是无须定义维数的矩阵。
MATLAB自问世以来,就是以数值计算称雄。
MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使得MATLAB高度“向量化”。
经过十几年的完善和扩充,现已发展成为线性代数课程的标准工具。
由于它不需定义数组的维数,并给出矩阵函数、特殊矩阵专门的库函数,使之在求解诸如信号处理、建模、系统识别、控制、优化等领域的问题时,显得大为简捷、高效、方便,这是其它高级语言所不能比拟的。
美国许多大学的实验室都安装有MATLAB供学习和研究之用。
在那里,MATLAB是攻读学位的大学生硕士生、博士生必须掌握的基本工具。
MATLAB中包括了被称作工具箱(TOOLBOX)的各类应用问题的求解工具。
工具箱实际上是对MATLAB进行扩展应用的一系列MATLAB函数(称为M文件),它可用来求解各类学科的问题,包括信号处理、图象处理、控制系统辨识、神经网络等。
随着MATLAB版本的不断升级,其所含的工具箱的功能也越来越丰富,因此,应用范围也越来越广泛,成为涉及数值分析的各类工程师不可不用的工具。
MATLAB5.3中包括了图形界面编辑GUI,改变了以前单一的“在指令窗通过文本形的指令进行各种操作”的状况。
这可让使用者也可以象VB、VC、VJ、DELPHI等那样进行一般的可视化的程序编辑。
在命令窗口(matlabcommandwindow)键入simulink,就出现(SIMULINK)窗口。
以往十分困难的系统仿真问题,用SIMULINK只需拖动鼠标即可轻而易举地解决问题,这也是近来受到重视的原因所在。
2代数方程的符号解
2.1代数解符号介绍
一般,代数方程包括线性、非线性、超越方程等,求解函数是solve。
当方程组不存在符号解,且又无其他参数时,solve将给出数值解。
格式为:
X=solve(eq)%eq可以是符号表达式或者字符串,求解方程eq=0。
X=solve(eq,var)%eq中指定的变量var,求解方程eq(var)=0。
X=solve(eq1,eq2,eq3......eqn)
%对方程组eq1,eq2,............eqn中的n个变量求解,返回值X为“结构对象”。
[x1,x2........xn]=solve(eq1,eq2,........eqn)
%返回的是x1,x2,.....,xn的值。
说明:
solve函数能求解一般线性、非线性、或者超越方程。
对于单个方程或者方程组,若不存在符号解,则返回方程组的数值解。
X=solve(eq1,eq2,…,eqn,var1,var2,…,varn)%用法同上,var1,var2,…,varn为指定变量,即对方程组eq1,eq2,…,eqn中指定的n个变量var1,var2,…,varn求解。
X=solve(eqn1,...,eqn,,var1,...,varn,Name,Value)
%用法同上,Name和Value用来对解方程做一些更高级的控制。
不填时,按默认值求解。
若要控制多个Name对应的Value值,没有顺序要求。
Name和Value的选项如下。
Name
Value
'IgnoreAnalyticConstraints'
默认为false,当为true时会先对原方程进行一些化简操作后再解,以得到较为精简的结果,这也有可能使一些原本用solve解不出来的方程可以得到解。
但置为true时也有可能使解不完整或产生错误
'IgnoreProperties'
默认为true,当为false时求解时会忽略变量定义时的一些假设,比如假设变量为正(symsxpositive)
'MaxDegree'
默认为3,当复杂多项式方程的阶数高于'MaxDegree'时,solve可能只给出隐式解,调整该项可以让solve给出一些更高阶代数方程的显性解。
注意该项最大为4(在数学上更高阶的多项式方程往往很少有解析解)
'PrincipalValue'
默认为false,为true时只给出一个主要的解
'Real'
默认为false,为true时只给出实数解
2.2解单个方程
symsabcx
X1=solve('a*x^2+b*x+c')
X1=
-(b+(b^2-4*a*c)^(1/2))/(2*a)
-(b-(b^2-4*a*c)^(1/2))/(2*a)
若指定变量,则把此变量当做未知数,把其他当做常数,例如:
symsabcx;
X2=solve('a*x^2+b*x+c','b')
X2=
-(a*x^2+c)/x
2.3解方程组
求解线性方程组:
5x+2y=10;3x-4y=5;
X=solve(‘5*x+2*y=10’,3*x-4*y=5’)
X=
x:
[lxlsym]
y:
[lxlsym]
X.x
ans=
25/13
X.y=
ans=
5/26
也可用下述格式直接显示解的值
symsx
[x,y]=solve('x+y=1','x-11*y=5')
x=
4/3
y=
-1/3
对单变量非线性方程求解也可以用函数fzero。
格式:
z=fzero(‘f’,x0)%函数有可能有多个根,只求x0最近的那个根。
例如:
求f(x)=e^(-x)-x+1=0距离x0=0最近的根。
z=fzero('exp(-x)-x+1',0)
结果:
z=
1.2785
例1:
求方程组
,
关于
的解。
解:
S=solve('u*y^2+v*z+w=0','y+z+w=0','y','z')
disp('S.y'),disp(S.y),disp('S.z'),disp(S.z)
S=
y:
[2x1sym]
z:
[2x1sym]
S.y
ans=
-(v+2*u*w+(v^2+4*u*w*v-4*u*w)^(1/2))/(2*u)
-(v+2*u*w-(v^2+4*u*w*v-4*u*w)^(1/2))/(2*u)
S.z
ans=
(v+2*u*w+(v^2+4*u*w*v-4*u*w)^(1/2))/(2*u)-w
(v+2*u*w-(v^2+4*u*w*v-4*u*w)^(1/2))/(2*u)-w
2.4解简单超越方程
对于一些简单的超越方程,solve可以自动调用数值计算系统给出一个解,但可能不是完整的解。
例题:
symsx
solve(sin(x)==x^2-1)
ans=
-0.63673265080528201088799090383828
以上方程没有解析解,故求解器自动调用数值计算系统试图寻找数值解。
但要想在整个定义域内寻根将要花费大量时间和资源,故solve只找出一个解。
结果:
ans=
-0.63673265080528201088799090383828
如果对这个该函数画图后会发现其实这个方程是有两个解的。
ezplot(sin(x),-2,2)
holdon
ezplot(x^2-1,-2,2)
holdoff
为求出另一个根可以调用MuPAD的数值求解器,并
指明求解区间,或者用fsolve等其他方法数值求解,
下面用evalin函数调用MuPAD求解另一个在0~2之间的根
evalin(symengine,'numeric:
:
solve(sin(x)=x^2-1,x=0..2)')
结果:
ans=
1.4096240040025962492355939705895
2.5高级控制的例子
symsx
solve(x^5==3125,x)
这样就得到复数域上的5个解,结果:
ans=
5
(5*5^(1/2))/4+(2^(1/2)*(5^(1/2)+5)^(1/2)*5*i)/4-5/4
(5*5^(1/2))/4-(2^(1/2)*(5^(1/2)+5)^(1/2)*5*i)/4-5/4
(2^(1/2)*(5-5^(1/2))^(1/2)*5*i)/4-(5*5^(1/2))/4-5/4
-(2^(1/2)*(5-5^(1/2))^(1/2)*5*i)/4-(5*5^(1/2))/4-5/4
如果只想要实数域上的解,那么在Name和Value的地方加上:
>>solve(x^5==3125,x,'Real',true)
结果:
ans=
5
注意:
(1)solve解非代数方程的能力较弱,最好结合其他方式求解非代数方程
(2如果解得是一个方程组,而且采用了形如[a,b]=solve(a+b==1,2*a-b==4,a,b)的格式,那么,在MATLABR2014a中没问题,可以保证输出的a,b就等于相应的解,但是在R2012b等早先版本中不能保证输出的顺序就是你声明变量时的顺序。
所以最好采用X=solve(a+b==1,2*a-b==4,a,b)这种单输出格式,这样输出的是一个结构体,X.a和X.b就是对应的解。
3常微分方程的符号解
3.1常微分方程解的符号介绍
含有自变量、未知函数和未知函数导数(或微分)的等式叫微分方程。
描述自变量与函数关系的等式叫微分方程的初始条件。
适合微分方程的函数叫微分方程的解。
没有初始条件而求得的解叫微分方程的通解,通解中会包含有与方程阶数相同个数的积分常数C1、C2等;有初始条件且满足初始条件的解叫微分方程的特解,特解一般不含有积分常数。
在MATLAB中,用dsolve函数求解微分方程或微分方程组,dsolve函数参数的输入共有三部分,微分方程、初始条件和自变量。
其具体格式如下:
r=dsolve(‘eq’,‘cond’,‘v’)
%对给定方程eq、边界条件cond和指定自变量v求解。
r=dsolve('eq1,eq2,...','cond1,cond2,...','v')
%'eq1,eq2,...'为微分方程或微分方程组,'cond1,cond2,...',是初始条件或边界条件,
'v1,v2,...'是独立变量,为其指定指定自变量,默认的独立变量是't'。
函数dsolve用来解符号常微分方程、方程组,如果没有初始条件,则求出通解,如果有初始条件,则求出特解。
微算子D:
D=d/dx(一阶导数),D2=d2/dx2(二阶导数),…;D、D2、…后面的字母表示因变量,即待求解的未知数。
初始和边界条件有字符串表示:
y(a)=b,Dy(c)=d,D2y(e)=f。
3.2单个常微分方程解
先看一个方程组:
2dy/dt+dy/dt-y=exp(-t),dx/dt+x+y'
首先求解微分方程的通解:
s=dsolve('2*Dx+Dy-y=exp(-t)','Dx+x+y=0');%求解微分方程组的通解
s=
y:
[1x1sym]
x:
[1x1sym]
s.x
ans=
-(exp(-t*(2^(1/2)-1))*(2*C33+(2^(1/2)*exp(2^(1/2)*t-2*t))/2+2^(1/2)*(C33+(2^(1/2)*exp(2^(1/2)*t-2*t))/4)+2*exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(C32-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4)-2^(1/2)*exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(C32-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4)))/2
%微分方程组变量x的通解
s.y
ans=
exp(-t*(2^(1/2)-1))*(C33+(2^(1/2)*exp(2^(1/2)*t-2*t))/4+exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(C32-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4))
然后根据初始条件,求解微分方程组的特解:
s=dsolve('2*Dx+Dy-y=exp(-t)','Dx+x+y=0','x(0)=1.5','y(0)=0');%微分方程组在给定初始条件下的特解
s=
y:
[1x1sym]
x:
[1x1sym]
s.x
ans=
(exp(-t*(2^(1/2)-1))*(2^(1/2)*(2^(1/2)-(2^(1/2)*exp(2^(1/2)*t-2*t))/4)+2*2^(1/2)-(2^(1/2)*exp(2^(1/2)*t-2*t))/2-2*exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(2^(1/2)-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4)+2^(1/2)*exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(2^(1/2)-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4)))/2
s.y
ans=
exp(-t*(2^(1/2)-1))*((2^(1/2)*exp(2^(1/2)*t-2*t))/4-2^(1/2)+exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(2^(1/2)-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4))
%或者使用下面命令直接获取x,y的特解
[x,y]=dsolve('2*Dx+Dy-y=exp(-t)','Dx+x+y=0','x(0)=1.5','y(0)=0')
x=
(exp(-t*(2^(1/2)-1))*(2^(1/2)*(2^(1/2)-(2^(1/2)*exp(2^(1/2)*t-2*t))/4)+2*2^(1/2)-(2^(1/2)*exp(2^(1/2)*t-2*t))/2-2*exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(2^(1/2)-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4)+2^(1/2)*exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(2^(1/2)-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4)))/2
y=
exp(-t*(2^(1/2)-1))*((2^(1/2)*exp(2^(1/2)*t-2*t))/4-2^(1/2)+exp(t*(2^(1/2)-1))*exp(t*(2^(1/2)+1))*(2^(1/2)-(2^(1/2)*exp(-2*t-2^(1/2)*t))/4))
3.2.1常微分方程符号解实例分析
例1:
求一阶方程dy/dx=1+y^2的通解
dsolve('Dy=1+y^2')%求通解
ans=
tan(C38+t)
i
-i
其中c38微积分常数。
求解初值y(0)=1的同一个方程可产生:
dsolve('Dy=1+y^2','y(0)=1')%增加一个初始条件
ans=
tan(pi/4+t)
独立变量可用如下形式指定:
dsolve('Dy=1+y^2','y(0)=1','v')
ans=
tan(pi/4+v)
练习:
求微分方程:
dy/dx=ay,y(0)=b;的解
解:
y=dsolve('Dy=a*y','y(0)=b','x')
y=
b*exp(a*x)
现再举一个二阶微分方程的例子,该方程有两个初始条件:
例2:
(dy)^2/dx^2=cos(2x)-y,dy/dx(0)=0,y(0)=1
y=dsolve('D2y=cos(2*x)-y','Dy(0)=0','y(0)=1')
y=
cos(2*x)-cos(t)*(cos(2*x)-1)
y=simple(y)%可以简化类似于此的y
y=
1-4*sin(t/2)^2*sin(x)^2
通常,要求解的微分方程含有一阶以上的项并一下述的形式表示:
例3:
求解常微分方程y''+2y'=x^2;y(0)=1,y'(0)=0的MATLAB程序为:
Y=dsolve('D2y+2*Dy=x^2','y(0)=1','Dy(0)=0','x')
Y=
x/4+exp(-2*x)/8-x^2/4+x^3/6+7/8
Y=simple(Y)
Y=
x/4+exp(-2*x)/8-x^2/4+x^3/6+7/8
pretty(Y)
23
xexp(-2x)xx
-+------------+--+7/8
4846
ezplot(Y,[-66])%作出在[-6,6]之间的图像
3.3常微分方程方程组
例4:
求
的解。
S=dsolve('Dx=y,Dy=-x')
S=
y:
[1x1sym]
x:
[1x1sym]
disp([blanks(12),'x',blanks(21),'y']),disp([S.x,S.y])
xy
[C14*cos(t)+C15*sin(t),C15*cos(t)-C14*sin(t)]
函数dsolve也可同时处理若干个微分方程,下面有两个线性一阶方程。
dy/dx=3f+4gdg/dx=-4f+3g
通解为:
[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g')
f=
C5*cos(4*t)*exp(3*t)+C4*sin(4*t)*exp(3*t)
g=
C4*cos(4*t)*exp(3*t)-C5*sin(4*t)*exp(3*t)
加上初始条件:
f(0)=0,g(0)=1,由此可得到:
[f,g]=dsolve('Df=3*f+4*g','Dg=-4*f+3*g','f(0)=0','g(0)=1')
f=
sin(4*t)*exp(3*t)
g=
cos(4*t)*exp(3*t)
练习:
求解两点边值问题:
。
y=dsolve('x*D2y-3*Dy=x^2','y
(1)=0,y(5)=0','x')
y=
(31*x^4)/468-x^3/3+125/468
例4:
求边值问题
的解。
(注意:
相应的数值解法比较复杂)。
S=dsolve('Df=3*f+4*g,Dg=-4*f+3*g','f(0)=0,f(3)=1')
S.f,S.g
ans=
(sin(4*t)*exp(-9)*exp(3*t))/sin(12)
ans=
(cos(4*t)*exp(-9)*exp(3*t))/sin(12)S=
g:
[1x1sym]
f:
[1x1sym]
从数值计算的角度看,与初值问题求解相比较,微分方程的边界值问题的求解显得更为复杂困难。
对于应用数学工具去解决问题的人员来说,不凡通过符号计算命令进行求解尝试。
应为,对于符号计算来说,不论初值问题,还是边值问题,其求解微分方程命令形式相同,并且相当简单。
例5:
图示微分方程y=xy'-(y')^2的通解和奇解的关系。
y=dsolve('y=x*Dy-(Dy)^2','x')
y=
x^2/4
-C10^2+x*C10
holdon,,ezplot(y
(2),[-66-48],1)
cc=get(gca,'Children');
set(cc,'color','r','Linewidth',5)
fork=-2:
0.5:
2
ezplot(subs(y
(1),'C1',k),[-66-48],1)
end
holdoff,title('\fontname{隶书}\fontsize{16}通解和奇解')
dsolve具有求通解和奇解的能力,本例的奇解释通解直线簇的包络抛物线,函数ezplot对线没有色彩、线形的控制力,但可以通过get、set对图柄的操作实现,函数ezplot不能同时画多条曲线,而必须用循环解决。
4.课后习题
(1)求方程4x^2+4x+1=0的解
(2)求方程组5x+2y=10,3x-4y=5的解
(3)求方程组uy^2+vz+w,y+z+w=0关于yz的解
(4)利用MATLAB求常微分方程的初值问题dy/dx+3y=8的解。
(5)利用MATLAB求常微分方程的初值问题(1+x^2),y(0)=1,y'(0)=3的解。
(6)利用MATLAB求常微分方程y''''-2y'''+y''=0的解。
(7)利用MATLAB求常微分方程组
2dx/dt+4x+dy/dt-y=e^t,dx/dt+3x+y=0,x(0)=3/2,y(0)=0的特解。
(8)求解常微分方程y''-2(1-y^2)y'+y=0,0<=x<=30,y(0)=1,y'(0)=0的特解,并作出解函数的曲线图。
答案:
(1)y=solve('4*x^2+4*x+1=0')
(2)r=solve('5*x+2*y=10','3*4-4*y=5')
(3)[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 符号 方程 求解 重点 讲义 资料