matlab符号计算实验⼼得,Matlab符号计算总结
第六章 Matlab符号计算
在科学研究和⼯程应⽤中,除了存在⼤量的数值计算外,还有对符号对象进⾏的运算,即直接对抽象的符号对象进⾏的计算,并将所得到的结果以标准的符号形式来表⽰。符号计算可以得到⽐数值计算更⼀般的结果。Matlab的符号计算是通过集成在Matlab中的符号运算⼯具箱(Symbolic Math Toolbox)来实现的。本章主要介绍符号计算基础,符号微积分,级数的符号求和,代数⽅程和微分⽅程的符号求解等内容。
⼀.符号计算基础
Matlab提供了⼀种符号数据类型,相应的运算对象称为符号对象。如:符号常量,符号变量,以及它们参与的数学表达式等。在进⾏符号运算前⾸先要建⽴符号对象,然后才可以进⾏符号对象的运算。
⼀.符号对象
1. 建⽴符号变量和符号常量
matlab提供了两个建⽴符号对象的命令:sym和syms。其⽤法不同。
①sym函数
sym函数⽤来建⽴单个符号量,格式为:
符号量名=sym(符号字符串)
该函数可以建⽴⼀个符号字符串,符号字符串可以是常量、变量、函数或表达式。如:a=sym(' a ')将建⽴符号变量a,此后⽤户可以在表达式中使⽤变量a进⾏各种运算.符号变量a和在其他过程中建⽴的⾮符号变量a是不同的。⼀个⾮符号变量在参与运算前必须赋值,变量的运算实际上该变量所对应值的运算,其运算结果是⼀个和变量类型对应的值,⽽符号变量参与运算前⽆须赋值,其结果是⼀个由参与运算的变量名组成的表达式。
a=sym('a'); %定义符号变量
b=sym('b');
c=sym('c');
x=5; %定义数值变量
y=-8;
z=11;
w=a*a+b*b+c*c %符号运算
w =
a^2+b^2+c^2
w=x*x+y*y+z*z %数值运算
w=
210
使⽤sym函数还可以定义符号常量,使⽤符号常量进⾏代数运算时和数值常量进⾏的运算不同。下⾯⽐较差别:
pi1=sym('pi');k1=sym('8');k2=sym('3'); %定义符号变量
pi2=pi;r1=8;r2=3; %定义数值变量
sin(pi1/3) %符号计算
ans =
sin(pi2/3) %数值计算
ans =
0.8660
sqrt(k1+sqrt(k2)) %符号计算
ans =
(8+3^(1/2))^(1/2)
sqrt(r1+sqrt(r2)) %数值计算
ans =
3.1196
从命令执⾏结果来看,⽤符号常量进⾏计算像在进⾏数学演算,所得到的结果是精确的数学表达式,⽽数值计算将结果近似为⼀个有限的⼩数。
②syms命令
matlab求导sym函数⼀次只能定义⼀个符号变量,使⽤不⽅便。Matlab提供了syms命令,⼀次可以定义多个符号变量。其格式:
syms arg1 arg2 … argn
arg1 arg2 … argn是定义的符号变量名,注意变量间⽤空格⽽不要⽤逗号分隔。
2.建⽴符号表达式
含有符号对象的表达式称为符号表达式,建⽴符号表达式有以下3种⽅法:
①利⽤单引号⽣成符号表达式
y='1/sqrt(2*x)' %⽣成⼀般的符号表达式
y =
1/sqrt(2*x)
f='cos(x^2)-sin(2*x)=0' %⽣成符号⽅程
f =
cos(x^2)-sin(2*x)=0
②⽤sym函数建⽴符号表达式
U=sym('3*x^2-5*y+2*x*y+6') %⽣成符号表达式,不需定义变量
U =
3*x^2-5*y+2*x*y+6
M=sym('[a,b;c,d]') %⽣成符号矩阵
M =
[ a, b]
[ c, d]
③使⽤已定义的符号变量组成符号表达式
V=3*x^2-5*y+2*x*y+6
V =
3*x^2-5*y+2*x*y+6
⼆.基本的符号运算
1.四则运算:
符号表达式的加减乘除可以分别利⽤函数symadd、symsub、symmul、symdiv来实现,幂运算可以由sympow来实现。例:
f=‘2*x^2+3*x-5’ %定义符号表达式
g=‘x^2-x+7’
U=symadd(f,g) %求f+g
V=symsub(f,g) %求f-g
W=symmul(f,g) %求f*g
X=symdiv(f,g) %求f/g
Y=sympow(f,’3*x’) %求f^(3x)
另外,与数值运算⼀样,也可以⽤+ - * / ^运算符来实现符号运算。如:
syms x y z;
f=2*x+x^2*x-5*x+x^3+exp(2)
f=2*x/(5*x)
f=(x*x-y*y)/(x-y)
f =
(x^2-y^2)/(x-y) %有时,Matlab并未将结果化为最简形式。
2.符号表达式的提取分⼦和分母运算
如果符号表达式是⼀个有理分式或可以展开为有理分式,可利⽤numden函数来提取符号表达式中的分⼦、分母。调⽤格式[n,d]=numden(s)
该函数提取符号表达式s的分⼦和分母,分别存⼊n和d中
如a=sym(0.3333)
a =
3333/10000
[n,d]=numden(a)
n =
3333
d =
10000
再如:f=sym('a*x^2/(b+x)')
f =
a*x^2/(b+x)
[n,d]=numden(f)
n =
a*x^2
d =
b+x
3.符号表达式的因式分解和展开
Matlab提供了符号表达式的因式分解和展开的函数,
factor(s),对符号表达式s进⾏分解因式
expand(s),对s进⾏展开
collect(s),对s进⾏合并同类项
collect(s,v),对s按变量v合并同类项。
syms a b x y;
A=a^3-b^3;
factor(A)
ans =
(a-b)*(a^2+a*b+b^2)
s=(-7*x^2-8*y^2)*(-x^2+3*y^2)
expand(s) %对s展开
ans =
7*x^4-13*x^2*y^2-24*y^4
collect(s,x) %对s按变量x合并同类项
ans =
7*x^4-13*x^2*y^2-24*y^4
4.符号表达式的化简
Matlab提供的对符号表达式化简的函数有:
simplify(s) ,应⽤函数规则对s进⾏化简
simple(s),调⽤Matlab的其他函数对表达式进⾏综合化简,并显⽰化简过程。syms x y a
s=log(2*x/y);
simplify(s)
ans =
log(2)+log(x/y)
s=(-a^2+1)/(1-a)
simplify(s)
ans =
a+1
函数simple试⽤⼏种不同的化简⼯具,然后选择在结果中含有最少字符的那种形式。如下例:syms x y;
s=(x^2+y^2)^2+(x^2-y^2)^2
simple(s) %下⾯是⾃动调⽤多种函数对s进⾏化简,并显⽰每步结果,以下是化简过程simplify:
2*x^4+2*y^4
radsimp:
2*x^4+2*y^4
combine(trig):
2*x^4+2*y^4
factor:
2*x^4+2*y^4
expand:
2*x^4+2*y^4
combine:
(x^2+y^2)^2+(x^2-y^2)^2
convert(exp):
(x^2+y^2)^2+(x^2-y^2)^2
convert(sincos):
(x^2+y^2)^2+(x^2-y^2)^2
convert(tan):
(x^2+y^2)^2+(x^2-y^2)^2
collect(x):
2*x^4+2*y^4
ans =
2*x^4+2*y^4
5.符号表达式与数值表达式之间的转换
利⽤函数sym可以将数值表达式变换为它的符号表达式: