matlab实验五.docx
《matlab实验五.docx》由会员分享,可在线阅读,更多相关《matlab实验五.docx(9页珍藏版)》请在冰豆网上搜索。
matlab实验五
实验五Matlab符号运算
一、实验目的:
1、熟练掌握MATLAB符号表达式的创建。
2、掌握符号和数值的替换。
3、熟练掌握符号矩阵的创立及运算。
4、熟练掌握符号微积分。
5、掌握符号积分变换。
6、熟悉符号方程的求解。
二、实验内容与步骤:
符号运算允许在运算对象和运算过程中出现非数值的符号对象,利用符号对象进行运算。
在工程时间和科学研究等各个方面,经常会遇到数值运算无法进行描述的问题,存在非数值问题,引入符号运算就可以解决这方面的问题。
1.创建符号对象
MATLAB提供了两个建立符号对象的函数:
sym和syms,两个函数的用法不同。
sym函数用来建立单个符号量,一般调用格式为:
符号量名=sym('符号字符串')
该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。
应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。
函数sym一次只能定义一个符号变量,使用不方便。
MATLAB提供了另一个函数syms,一次可以定义多个符号变量。
syms函数的一般调用格式为:
syms符号变量名1符号变量名2…符号变量名n
用这种格式定义符号变量时不要在变量名上加字符串分界符(‘),变量间用空格而不要用逗号分隔。
2.创建符号表达式和符号表达式的操作
含有符号对象的表达式称为符号表达式。
建立符号表达式有以下3种方法:
(1)利用单引号来生成符号表达式。
(2)用sym函数建立符号表达式。
(3)使用已经定义的符号变量组成符号表达式。
对符号表达式f=sinx,g=
进行操作。
(1).创建符号变量。
使用sym命令创建符号表达式:
>>f=sym('sin(x)')
f=
sin(x)
>>g=sym('y/exp(-2*t)')
g=
y/exp(-2*t)
syms命令创建符号表达式f,g:
>>symsxyt
>>f=sin(x)
f=
sin(x)
>>g=y/exp(-2*t)
g=
y/exp(-2*t)
自由变量的确定。
使用findsym确定符号表达式g的自由变量:
>>findsym(g)%得出所有符号变量
Ans=
t,y
>>findsym(g,1)%得出第1个符号变量
ans=
y
>>findsym(g,2)%按顺序得出两个符号变量
Ans=
y,t
用常数替换符号变量。
用行向量替换x,使符号对象f转变为行向量:
>>x=0:
10;
>>f=sin(x);
>>y=subs(f,x)
⑷符号对象与数值的转换.采用double,numeric和eval将符号对象转换为数值:
>>f=sin(x);
>>f1=subs(f,'5')
f1=
sin((5))
>>y1=double(f1)
y1=
-0.9589
>>y2=eval(f1)
y2=
-0.9589
⑸求反函数和复合函数。
①用finverse函数求f,g的反函数:
>>finverse(f)
ans=
asin(x)
>>finverse(g)%对默认独立变量y求反函数
ans=
y*exp(-2*t)
>>finverse(g,'t')%对符号变量t求反函数
ans=
-1/2*log(y/t)
②用compose函数求f,g的复合函数:
>>compose(f,g)%计算f(g(x))
ans=
sin(y/exp(-2*t))
>>compose(f,g,'z')%计算f(g(z))
ans=
sin(z/exp(-2*t))
⑹符号微积分和极限。
①对f和g用diff求微分:
>>diff(f)
ans=
cos(x)
>>diff(g)%对默认自由变量y求微分
ans=
1/exp(t^2)
>>diff(g,'t')%对符号变量t求微分
Ans=
-2*y/exp(t^2)*t
②对f和g用int求积分:
:
>>int(f)%求不定积分
Ans=
-cos(x)
>>int(g)
Ans=
1/2*y^2/exp(-2*t)
>>int(g,'t')%对t求不定积分
Ans=
1/2*y/exp(-2*t)
>>int(g,'t',0,10)%对t求定积分
Ans=
1/2*y*exp(20)-1/2*y
③符号表达式的极限limit
>>symsxat;
>>limit(sin(x)/x)
ans=
1
>>limit((1+a/x)^x,x,inf)%x→inf条件下的极限
ans=
exp(a)
>>limit(1/x,x,0,'left')%left极限的方向
ans=
-Inf
④Taylor级数展开
>>clearall
>>symsx
>>f=exp(x*sin(x));
>>r=taylor(f,'Order',12)
r=
-(1079*x^10)/362880-(11*x^8)/560+x^6/120+x^4/3+x^2+1
3.符号矩阵的操作
(1)创建符号矩阵。
①使用sym函数直接创建符号矩阵
>>a=sym('[xx^2;2*xcos(2*t)]')
a=
[x,x^2]
[2*x,cos(2*t)]
②将数值矩阵转化为符号矩阵
在MATLAB中,数值矩阵不能直接参与符号运算,必需转化为符号符号矩阵。
>>a=[2/3,sqrt
(2),0.222;1.4,1/0.23,log(3)]
a=
0.6671,41420.2220
1.4004.34781.0986
>>b=sym(a)
b=
[2/3,sqrt
(2),111/500]
[7/5,100/23,4947709893870346*2^(-52)]
(2)符号矩阵的代数运算。
符号矩阵大多数运算与矩阵相同,包括加法、减法,乘法*,除法(/、\);矩阵的转置(’);矩阵的逆inv;幕运算(^);指数运算exp等。
(3)对符号矩阵的微积分运算就是对符号矩阵的每一个元素进行微积分:
a=[2*xt^2;t*sin(x)exp(x)]
b=[cos(x)1/t;x^2sin(x)]
创建符号矩阵a,b,进行符号矩阵的相关运算,查看输出结果。
对符号矩阵a求积分和微分,查看输出结果。
4.符号方程的求解
1)代数方程求解。
3x1-2x2+x3=8
对方程组:
x1+3x2+4x3=2进行求解。
2x1-x2+3x3=7
>>eq1=sym('3*x1-2*x2+x3=8');
>>eq2=sym('x1+3*x2+4*x3=2');
>>eq3=sym('2*x1-x2+3*x3=7');
>>[x1,x2,x3]=solve(eq1,eq2,eq3)
执行后查看输出结果。
[37/22,-23/22,19/22]
(2)符号微分方程求解。
MATLAB提供了dsolve命令,用于对符号常微分方程进行求解。
同学们可通过help帮助来查看函数使用。
解方程组:
dy/dx–z=cos(x)
dz/dx+y=1
>>[y,z]=dsolve('Dy-z=cos(x),Dz+y=1','x')
>>simplify(z)
y=
cos(x)*c1+sin(x)*c2+1/2*cos(x)*x+1/2*sin(x)+1
z=
-sin(x)*c1+cos(x)*c2-1/2*sin(x)*x
5.符号函数的可视化
为了将符号函数的数值计算结果可视化,MATLAB提供了十来个绘图命令,可以很容易的将符号表达式图形化,这些命令的开头都是“ez”。
同样,这些命令也可以用于字符串函数的绘图。
(1)ezplot和ezplot3命令
ezplot(f)绘制f(x)的函数图,这里f为代表数学表达式的包含单个符号变量x的字符串或符号表达式。
X轴的近似范围为[-2*pi,2*pi]。
>>y=sym('-1/3*x^3+1/3*x^4');
>>ezplot(y)%绘制函数y在[-2*pi,2*pi]中的图形,图1.1
图1.1
极坐标下绘制二维曲线
>>closeall
>>symst
>>ezpolar(1+cos(t))
ezplot3(x,y,z,[tmin,tmax],’animate’)%绘制三维曲线
说明:
x,y,z分别为符号表达式x(t),y(t),z(t);[tmin,tmax]为t的范围,可省略;’animate’用来设置动画的的绘制曲线的过程,可省略。
>>x=sym('sin(t)');
>>z=sym('t');
>>y=sym('cos(t)');
>>ezplot3(x,y,z,[0,10*pi],'animate')
(2)ezmesh命令
>>symsxy
>>ezmesh(x*exp(-x^2+-y^2),[-2.5,2.5],40,'circ')