第06章MATLAB符号计算.docx
《第06章MATLAB符号计算.docx》由会员分享,可在线阅读,更多相关《第06章MATLAB符号计算.docx(12页珍藏版)》请在冰豆网上搜索。
第06章MATLAB符号计算
第六章MATLAB符号计算
MATLAB具有符号数学工具箱,可以对符号表达式进行运算和处理。
基本运算包括复合、化简、微分、积分,以及求解代数方程式、微分方程式等。
另外还可以求解线性代数题,如求解符号矩阵的逆、行列式的精确结果,找出符号矩阵的特征值。
符号运算不产生由数值运算产生的运算误差,可以在运算最后数字代入结果,避免了由于中间运算而产生的累积误差,因而能够得到指定精度的结果。
6.1、符号计算基础
1、建立符号变量和符号常数
MATLAB中提供了两个建立符号对象的函数或命令:
sym和syms。
(1)sym函数sym函数用来建立单个符号量,其调用格式为
符号变量名=sym(符号字符串)
其中:
符号字符串可以是常量、变量、函数或表达式。
例如,a=sym(‘a’)建立符号变量a,用户可以在表达式中使用变量a进行各种运算。
用sym函数还可以定义符号常量,使用符号常量进行运算所得的结果是精确的数学bda式,而数值计算则是将结果近似为一个有限小数。
⑵syms函数syms函数的一般调用格式为
symsvar1var2…varn
其中,var1,var2,…,varn是定义为符号变量的变量名。
用这种格式定义符号变量时,不要在变量名上加字符分界符(‘),变量间用空格而不要用逗号分隔。
symsxbeta等同于
x=sym(‘x’)
beta=sym(‘beta’)
2、建立符号表达式
(1)用sym函数建立符号表达式
命令语旬
y1=sym(‘1/sqrt(2*x)’)
返回
y1=
1/sqrt(2*x)
命令语旬
M=sym(‘[a,b;c,d]’)
返回
M=
[a,b]
[c,d]
⑵使用已经定义的符号变量组成符号表达式
命令语旬
symsxy
v=3*x^2-5*y+2*x*y+6
返回
v=
3*x^2-5*y+2*x*y+6
3.findsym命令和默认符号变量
findsym命令可以用来找出存在于符号表达式中的符号变量,其格式为
findsym(s)或findsym(s,n)
findsym(s)命令显示存在于表达式s内的所有符号变量;findsym(s,n)命令以约定的顺显示存在于表达式s内的n个符号变量。
MATLAB将按照以下默认的顺序显示表达式s内n个符号变量:
从x开始,按照字母表上变量与x的接近程度排序,如果两个变量与x的距离相同,则按字母顺序,在x后面的变量优先。
例如:
symsxhwydt
s=h*x^2+d*y^2+t*w^2
findsym(s)
返回
ans=
d,h,t,w,x,y
命令
findsym(s,5)
返回
ans=
x,y,w,t,h
4.合并同幂次项、展开和因式分解运算
(1)collect命令合并表达式中同幂次的项,结果按照幂次递减的顺序排列,调用的格式为:
collect(s)
这里s是表达式,按MATLAB默认变量的顺序进行合并。
例如:
symsxy
s=(2*x^2+y^2)*(x+y^2+3);
t=co11ect(s)
返回
t=
2*x^3+(2*y^2+6)*x^2+y^2*x+y^2*(y^2+3)
按MATLAB默认变量的顺序,x最优先,因此这里对x进行合并。
如果变量x用变量u代替,执行的结果就不同了:
symsuy
s=(2*u^2+y^2)*(u+y^2+3);
t=collect(s)
t=
y^4+(2*u^2+u+3)*y^2+2*u^2*(u+3)
这是因为按MATLAB默认变量的顺序,y比u距x近,y比u优先,因此这里对进行合并。
如果要指定合并的变量,用下面的格式:
collect(s,var)
它将合并表达式中由var指定的变量的同幂次的项。
例如:
symsxy;
s=(2*x^2+y^2)*(x+y^2+3);
u=collect(s,y)
返回
u=
y^4+(2*x^2+x+3)*y^2+2*x^2*(x+3)
(2)因式分解与展开
MATLAB中符号表达式的因式分解与展开的函数如下:
factor(s),对s分解因式。
expand(s),对s进行展开。
其中,s是符号表达式或符号矩阵。
例如命令语句
f=factor(123)
返回
f=
341
命令语句
expand((x-2)*(x-4))
返回
x^2-6*x+8
命令语句
expand(cos(x+y))
返回
cos(x)*cos(y)-sin(x)*sin(y)
命令语句
expand(exp((a+b)^2))
返回
expand(a^2)*expand(a*b)^2*exp(b^/2)
命令语句
symst
expand([sin(2*t),cos(2*t)])
返回
[2*sin(t)*cos(t),2*cos(t)^2-1]
5.表达式化简
MATLAB提供的对符号表达式化简的函数如下:
simp1ify(s),应用函数规则对s进行化简。
simp1e(s),调用MATLAB的其他函数对表达式进行综合化简。
例如命令语句
simp1ify(sin(x)^2+cos(x)^2)
返回
1
命令语句
simplify(exp(c*log(sqrt(a+b))))
返回
(a+b)^(c/2)
命令语句
S=[(x^2+5*x+6)/(x+2),sqrt(16)]
R=simp1ify(S)
返回
R=[x+3,4]
6.符号表达式与数值表达式之间的转换
利用函数sym可以将数值表达式变换成它的符号表达式。
例如命令语句
sym(1.5)
返回
ans=
3/2
命令语句
sym(3.14)
返回
ans=
157/50
函数numeric或eva1可以将符号表达式变换成数值表达式。
例如语句命令
numeric(‘1+2^2’)
返回
ans=
5
命令语句
f=sym(‘1+x^2’);
x=sym(‘2’);
p=eval(f)
返回
p=
5
6.2、符号函数的极限、导数和积分
1、符号函数的极限
MATLAB中求函数极限的函数是1imit,调用格式如下:
1imit(f,var,a),计算当变量var趋近于常数a时,函数f的极限值。
1imit(f,var,a,‘right’),计算变量var从右边趋近于a时,符号函数f的极限值。
1imit(f,var,a,‘left’),计算变量var从左边趋近于a时,符号函数f的极限值。
例如:
命令语句
symsxath;
1imit(sin(x)/x,x,0)
返回
ans=
1
命令语句
1imit((sin(x+h)-sin(x))/h,h,0)
返回
ans=
cos(x)
命令语句
1imit((sin(x+h)-sin(x))/h,x,0)
返回
ans=
0
2、符号函数的导数
MATLAB中求导的函数为
diff(f,var,n)
表示求函数函数f对变量var的n阶导数。
当n=1时可以省略。
若不指定求到变量,则由默认规则确定。
例:
求下列函数的导数。
(1)
,求y’,y”,y”’。
(2)
,求
和
。
求解程序及结果如下:
命令语句
symsabtxyz;
f1=x*cos(x);
d1=diff(f1,x)%求x的1阶导数
d2=diff(f1,x,2)%求x的2阶导数
d1=diff(f1,x,3)%求x的3阶导数
返回
d1=
cos(x)-x*sin(x)
d2=
-2*sin(x)-x*cos(x)
d3=
-3cos(x)+x*sin(x)
命令语句
f2=x*exp(y)/y^2;
zx=diff(f2,x)
zy=diff(f2,y)
返回
zx=
exp(y)/y^2
zy=
x*exp(y)/y^2-2*x*exp(y)/y^3
3.符号函数的积分
在MATLAB中,求积分的函数是int,其调用格式如下:
int(f,v),以v为自变量,对被积函数符号表达式f求不定积分。
int(f,v,a,b),求被积函数f在区间[a、b]上的定积分。
a和b可以是两个具体的数,也可以是一个符号表达式。
例如命令语句
symx
int(-2*x/(1+x^2)^2,x)
返回
ans=
x*atan(x)
命令语句
int(x*log(1+x),x,0,1)
返回
ans=
1/4
例:
求椭球
的体积。
用平面
(
)去截取上述椭球,其相交线是一个椭圆,该椭圆在xy平面t投影的面积是
椭球的体积
。
MATLAB程序如下:
symsabcz;
f=pi*a*b*(c^2-z^2)/c^2;
V=int(f,z,-c,c)
程序运行结果如下:
V=
4/3*pi*a*b*c
4.符号方程求解
(1)符号代数方程求解
代数方程是指未涉及微积分运算的方程,相对比较简单,可用函数so1ve求其解,格式如下:
solve(eq,v),求解符号表达式eq表示的代数方程eq=0的解,求解变量为v。
solve(eq1,eq2,…,eqn,v1,v2,…,vn),求解符号表达式eq1、eq2、
eqn组成的代数方程组,求解变量分别v1,v2,…,vn。
若不指定求解变量,则由默认规则确定。
例如命令语句
solve(‘a*x^2+b*x+c’,x)
返回
ans=
[1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[1/2/a*(-b-(b^2-4*a*c)^(1/2))]
命令语句
so1ve(‘a*x^2+b*x+c’,‘b’)
返回
ans=
-(a*x^2+c)/x
命令语句
S=solve(‘x+y=1’,‘x-11*y=5’)
返回
S.y=-1/3,S.x=4/3%构体变量
命令语句
A=so1ve(‘a*u^2+v^2’,‘u-v=1’,‘a^2-5*a+6’)
返回
A=
a:
[4x1sym]
u:
[4x1sym]
v:
[4x1sym]
(2)符号微分方程求解
MATLAB中用大写字母D表示导数。
例如Dy表示y’,D2y表示y”,Dy(0)=5表示y’(0)=5,D3y+D2y+Dy-x+5=0表示微分方程y’”+y”+y’-x+5=0。
求解常微分方程的函数是dso1ve,调用的格式为
dsolve(‘eqn1’,‘cond’,‘var’)
该函数求解微分方程eqn1在初值条件cond下的特解。
参数var描述方程中的变量符号,省略时按默认原则处理;若没有给出初值条件cond,则求方程的通解。
dsolve在求微分方程组时的调用格式为:
dsolve(‘eqn1’,‘eqn2’,…,’eqn’,‘cond1’,‘cond2’,…,’condn’,‘var1’,…,‘varN’)
函数求解微分方程组eqn1,…,eqn在初值条件cond1,…,condn的特解,若不给出初值条件,则求方程组的通解,var1,…,varn给出求解变量。
例求下列微分方程的解。
⑴求
的通解;⑵求
的特解,
;
(3)求
的通解。
MATLAB程序如下:
y=dsolve(‘Dy-(x^2+y^2)/x^2/2’,‘x’)
y=dsolve((Dy-x^2/(1+y^2)’,‘y
(2)=1’)
[x,y]=dsolve(‘Dx=4*x-2*y’,‘Dy=2*x―y’,‘t’)
5.级数
(1)级数求和
级数的求和使用符号表达式求和函数symsum,调用格式如下:
symsum(s,v),s表示一个级数的通项,是一个符号表达式,v是求和变量,从0至v-1。
symsum(s,v,a,b),s表示一个级数的通项,是一个符号表达式,v是求和变量,a和b分别是开始项和结束项。
v省略时使用系统的默认变量。
例如:
求级数之和:
(1)
;
(2)
MATLAB程序如下:
symsknx
symsum(k^2〉
返回
ans=
1/3*k^3-1/2*k^2+1/6*k
命令
symsum(k^2`0`10)
返回
ans=
385
命令
symsum(sin(k*pi)/k,k,0,n)
返回
ans=
-1/2*sin(k*(n+1))/k+1/2*sin(k)/k/(cos(k)-1)*cos(k*(n+1))-1/2*sin(k)/k/(cos(k)-1)
(2)函数的泰勒级数
MATLAB中提供了将函数展开为幂级数的函数tay1or,其调用格式为
tay1or(f,v,n,a)
将函数f按变量v在v=a处展开为泰勒级数,展开到第n项(即变量v的n-1次幂)为止。
的默认值是0。
例:
求函数
在x=0处的5阶泰勒展开式。
MATLAB程序如下:
x=sym(‘x’);
f2=sqrt(1-2*x+x^3)-(1-3*x+x^2)^(1/3);
taylor(f2,x,5,0)
程序运行结果如下:
ans=
1/6*x^2+x^3+119/72*x^4