第三章 MATLAB符号运算.docx
《第三章 MATLAB符号运算.docx》由会员分享,可在线阅读,更多相关《第三章 MATLAB符号运算.docx(12页珍藏版)》请在冰豆网上搜索。
第三章MATLAB符号运算
第三章MATLAB符号运算
MATLAB不仅具有数值运算功能,还开发了在MATLAB环境下实现符号计算的工具包SymbolicMathToolbox和大量的符号运算函数,符号运算的主要功能有
(1)符号表达式、符号矩阵的创建;
(2)符号线性代数;
(3)因式分解、展开和简化;
(4)符号代数方程求解;
(5)符号微积分;
(6)符号微分方程。
第一节符号运算的基本操作
一、概述
1、什么是符号运算
符号运算与数值运算的区别:
(1)数值运算中必须先对变量赋值,然后才能参与运算;
(2)符号运算无须事先对独立变量赋值,运算结果以标准的符号形式表达。
2、特点
(1)运算对象可以是没赋值的符号变量;
(2)可以获得任意精度的解析解。
二、符号矩阵的创建
数值矩阵A=[1,2;3,4]可以,A=[a,b;c,d]不可以。
MATLAB提供了两个建立符号对象的函数:
sym和syms,两个函数的用法不同。
1、sym函数
sym函数用来建立单个符号量,一般调用格式为:
符号量名=sym('符号字符串')
该函数可以建立一个符号量,符号字符串可以是常量、变量、函数或表达式。
应用sym函数还可以定义符号常量,使用符号常量进行代数运算时和数值常量进行的运算不同。
例:
>>A=sym('[a,2*b;3*a,0]')
A=
[ a,2*b]
[3*a, 0]
这就完成了一个符号矩阵的创建。
注意:
符号矩阵的每一行的两端都有方括号,这是与MATLAB数值矩阵的一个重要区别。
把字符表达式转换为符号变量。
例:
>>y=sym('2*sin(x)*cos(x)')
y=
2*sin(x)*cos(x)
>>y=simple(y)
y=
sin(2*x)
2、syms函数
函数sym一次只能定义一个符号变量,使用不方便。
MATLAB提供了另一个函数syms,一次可以定义多个符号变量。
syms函数的一般调用格式为:
syms符号变量名1符号变量名2…符号变量名n
用这种格式定义符号变量时不要在变量名上加字符串分界符(‘),变量间用空格而不要用逗号分隔。
例:
①用符号计算验证三角等式
。
>>symsfai1fai2;
>>y=simple(sin(fai1)*cos(fai2)-cos(fai1)*sin(fai2))
y=
sin(fai1-fai2)
②求矩阵
的行列式值、逆和特征根。
>>symsa11a12a21a22;A=[a11,a12;a21,a22]
A=
[a11,a12]
[a21,a22]
>>DA=det(A),IA=inv(A),EA=eig(A)
DA=
a11*a22-a12*a21
IA=
[a22/(a11*a22-a12*a21),-a12/(a11*a22-a12*a21)]
[-a21/(a11*a22-a12*a21),a11/(a11*a22-a12*a21)]
EA=
[1/2*a11+1/2*a22+1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]
[1/2*a11+1/2*a22-1/2*(a11^2-2*a11*a22+a22^2+4*a12*a21)^(1/2)]
第二节因式分解、展开和简化
一、因式分解
1、factor指令的使用
>>symsax;f1=x^4-5*x^3+5*x^2+5*x-6;factor(f1)
ans=
(x-1)*(x-2)*(x-3)*(x+1)
>>f2=x^2-a^2;factor(f2)
ans=
-(a-x)*(a+x)
2、对多项式进行嵌套型分解
>>clear;symsax;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
ans=
-6+(5+(5+(-5+x)*x)*x)*x
二、多项式展开
>>clear;symsax;f1=x^4-5*x^3+5*x^2+5*x-6;horner(f1)
ans=
-6+(5+(5+(-5+x)*x)*x)*x
>>expand(ans)
ans=
x^4-5*x^3+5*x^2+5*x-6
三、多项式简化
①简化
。
>>symsx;f=(1/x^3+6/x^2+12/x+8)^(1/3);
>>sfy1=simplify(f),sfy2=simplify(sfy1)
sfy1=
((2*x+1)^3/x^3)^(1/3)
sfy2=
((2*x+1)^3/x^3)^(1/3)
>>g1=simple(f),g2=simple(g1)
g1=
(2*x+1)/x
g2=
2+1/x
②简化
。
>>symsx;ff=cos(x)+sqrt(-sin(x)^2);
>>ssfy1=simplify(ff),ssfy2=simplify(ssfy1)
ssfy1=
cos(x)+(-1+cos(x)^2)^(1/2)
ssfy2=
cos(x)+(-1+cos(x)^2)^(1/2)
>>gg1=simple(ff),gg2=simple(gg1)
gg1=
cos(x)+i*sin(x)
gg2=
exp(i*x)
第三节符号微积分
一、极限
limit函数的调用格式为:
limit(f,x,a):
求符号函数f(x)的极限值。
即计算当变量x趋近于常数a时,f(x)函数的极限值;
limit(f,a):
求符号函数f(x)的极限值。
由于没有指定符号函数f(x)的自变量,则使用该格式时,符号函数f(x)的变量为函数findsym(f)确定的默认自变量,即变量x趋近于a;
limit(f):
求符号函数f(x)的极限值。
符号函数f(x)的变量为函数findsym(f)确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于0,即a=0的情况;
limit(f,x,a,'right'):
求符号函数f的极限值。
'right'表示变量x从右边趋近于a;
limit(f,x,a,‘left’):
求符号函数f的极限值。
‘left’表示变量x从左边趋近于a。
例:
>>symsamx;f=(x*(exp(sin(x))+1)-2*(exp(tan(x))-1))/(x+a);
>>limit(f,x,a)
ans=
1/2*(a-2*exp(tan(a))+a*exp(sin(a))+2)/a
>>symsxt;limit((1+2*t/x)^(3*x),x,inf)
ans=
exp(6*t)
>>symsx;f=x*(sqrt(x^2+1)-x);
>>limit(f,x,inf,'left')
ans=
1/2
>>symsx;
>>f=(sqrt(x)-sqrt
(2)-sqrt(x-2))/sqrt(x*x-4);
>>limit(f,x,2,'right')
ans=
-1/2
二、符号导数
diff函数用于对符号表达式求导数。
该函数的一般调用格式为:
diff(s):
没有指定变量和导数阶数,则系统按findsym函数指示的默认变量对符号表达式s求一阶导数;
diff(s,'v'):
以v为自变量,对符号表达式s求一阶导数;
diff(s,n):
按findsym函数指示的默认变量对符号表达式s求n阶导数,n为正整数;
diff(s,'v',n):
以v为自变量,对符号表达式s求n阶导数。
例:
求
、
和
。
>>symsatx;f=[a,t^3;t*cos(x),log(x)];
>>df=diff(f)
>>dfdt2=diff(f,t,2)
>>dfdxdt=diff(diff(f,x),t)
df=
[ 0, 0]
[-t*sin(x),1/x]
dfdt2=
[ 0,6*t]
[ 0, 0]
dfdxdt=
[0,0]
[-sin(x),0]
三、符号积分
符号积分由函数int来实现。
该函数的一般调用格式为:
int(s):
没有指定积分变量和积分阶数时,系统按findsym函数指示的默认变量对被积函数或符号表达式s求不定积分;
int(s,v):
以v为自变量,对被积函数或符号表达式s求不定积分;
int(s,v,a,b):
求定积分运算。
a,b分别表示定积分的下限和上限。
该函数求被积函数在区间[a,b]上的定积分。
a和b可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。
当函数f关于变量x在闭区间[a,b]上可积时,函数返回一个定积分结果。
当a,b中有一个是inf时,函数返回一个广义积分。
当a,b中有一个符号表达式时,函数返回一个符号函数。
例:
①求
。
演示:
积分指令对符号函数矩阵的作用。
>>symsabx;f=[a*x,b*x^2;1/x,sin(x)];
>>int(f)
ans=
[1/2*a*x^2,1/3*b*x^3]
[ log(x), -cos(x)]
②求积分
。
注意:
内积分上下限都是函数。
>>symsxyz
>>F2=int(int(int(x^2+y^2+z^2,z,sqrt(x*y),x^2*y),y,sqrt(x),x^2),x,1,2)
>>VF2=vpa(F2)
F2=
1610027357/6563700-6072064/348075*2^(1/2)+14912/4641*2^(1/4)+64/225*2^(3/4)
VF2=
224.92153573331143159790710032805
四、数值积分
1、数值积分基本原理
求解定积分的数值方法多种多样,如简单的梯形法、辛普生(Simpson)法、牛顿-柯特斯(Newton-Cotes)法等都是经常采用的方法。
它们的基本思想都是将整个积分区间[a,b]分成n个子区间[xi,xi+1],i=1,2,…,n,其中x1=a,xn+1=b。
这样求定积分问题就分解为求和问题。
2、数值积分的实现方法
基于变步长辛普生法,MATLAB给出了quad函数来求定积分。
该函数的调用格式为:
[I,n]=quad('fname',a,b,tol,trace)
其中fname是被积函数名。
a和b分别是定积分的下限和上限。
tol用来控制积分精度,缺省时取tol=0.001。
trace控制是否展现积分过程,若取非0则展现积分过程,取0则不展现,缺省时取trace=0。
返回参数I即定积分值,n为被积函数的调用次数。
例:
求
,其精确值为
。
(1)符号解析法
>>symsx;IS=int('exp(-x*x)','x',0,1)
>>vpa(IS)
IS=
1/2*erf
(1)*pi^(1/2)
ans=
.74682413281242702539946743613185
(2)数值法
>>fun=inline('exp(-x.*x)','x');
>>Isim=quad(fun,0,1),IL=quadl(fun,0,1)
Isim=
0.746824180726425
IL=
0.746824133988447
第四节符号方程求解
一、符号代数方程求解
在MATLAB中,求解用符号表达式表示的代数方程可由函数solve实现,其调用格式为:
solve(s):
求解符号表达式s的代数方程,