>> f = sym('x')f =x>> whosName      Size            Bytes  Class    Attributesf         1x1               112  sym                >> 

1.符号表达式的基本代数运算

符号表达式的加、减、乘、除、幂运算与一般的数值运算一样,分别用“+”、“-”、“*”、“/“、”^“来进行运算。

>> f = sym('x')f =x>> g = sym('x^2')g =x^2>> f+gans =x+x^2>> f*gans =x^3>> f^gans =x^(x^2)>> 

2.符号表达式的提取分子和分母运算

如果符号表达式是一个有理分式或可以展开为有理分式,可利用numden函数来提取符号表达式中的分子或分母。其一般调用格式为:
[n,d]=numden(s)
该函数提取符号表达式s的分子和分母,分别将它们存放在n与d中。

>> f = sym('a*x^2+b*x/(a-x)');
>> [n,d]=numden(f)n =x*(-a^2*x+a*x^2-b)d =-a+x>> 

3.符号表达式中变量的确定

MATLAB中的符号可以表示符号变量和符号常数。findsym可以帮助用户查找一个符号表达式中的符号变量。该函数的调用格式为:

findsym(S,n)

函数返回符号表达式S中的第n个符号变量,若没有指定n,则返回S中的全部符号变量。

在求函数的极限、导数和积分时,如果用户没有明确指定自变量,MATLAB将按缺省原则确定主变量并对其进行相应微积分运算。可用findsym(S,1)查找系统的缺省变量,事实上,MATLAB按离字符'x'最近原则确定缺省变量。

>> f = sym('x^2+y+z')f =x^2+y+z>> findsym(f)ans =x, y, z>> 

3.复合函数计算

在MATLAB中符号表达式的复合函数运算主要是通过函数compose来实现的。compose函数的调用格式如下:

调用格式                                                                                     说明

compose(f,g)               返回复合函数f(g(y))。在这里f=f(x),g=g(y)。其中x是findsym定义的f函数的符号变量,y是findsym定义的g函数的符号变量

compose(f,g,z)                          返回自变量为z的复合函数f(g(z))。在这里f=f(x),g=g(y)。其中x、y分别是findsym定义的f函数和g函数的符号变量

compose(f,g,x,z)                       返回复合函数f(g(z)),并使x成为f函数的独立变量(意思是如果f有多个变量指定x为其变量)。即,如果f=cos(x/t),则compose(f,g,x,z)返回cos(g(z)/t)

compose(f,g,x,y,z)                    返回复合函数f(g(z)),并使x与y分别成为f与g函数的独立变量。即如果f=cos(x/t),g=sin(y/u),则compose(f,g,x,y,z)返回cos(sin(z/u)/t),而                                                                          compose(f,g,x,u,z)返回cos(sin(y/z)/t)

>> syms x y z t u;
>> f = 1 + x^2;
>> g = sin(y);
>> h = x^t;
>> p = exp(-y/u);
>> compose(f,g)ans =1+sin(y)^2>> compose(f,g,t)ans =1+sin(t)^2>> compose(h,g,x,z)ans =sin(z)^t>> compose(h,g,t,z)ans =x^sin(z)>> compose(h,p,x,y,z)ans =exp(-z/u)^t>> compose(h,p,t,u,z)ans =x^exp(-y/z)>> 

4.反函数计算

在MATLAB中符号表达式的反函数运算中主要是通过函数findverse来实现的。findverse函数的调用格式

调用格式                                                                      说明

g=findverse(f)                                返回符号函数f的反函数,其中f是一个符号函数表达式,其变量为x。所求的反函数是一个满足g(f(x))=x的符号函数

g=findverse(f,v)                             返回自变量为v的符号函数f的反函数,所求的反函数g是一个满足g(f(v))=v的符号函数。当f包含不止一个变量时,往往用这种反函数调用格式

>> syms x y;
>> f = x^2 + y;
>> finverse(f,y) %regard y as variable,x as constantans =-x^2+y>> finverse(f)
Warning: finverse(x^2+y) is not unique.
> In sym.finverse at 43ans =(-y+x)^(1/2)>> 

5.求表达式的和

在MATLAB中,求表达式的符号和主要是通过函数symsum来实现的。symsum函数的调用格式如下:

调用格式                                               说明

symsum(S)                                          返回符号表达式的运算-编程知识网的结果

symsum(S,v)                                       返回符号表达式的运算-编程知识网的结果

symsum(S,a,b)                                   返回符号表达式的运算-编程知识网的结果

symsum(S,v,a,b)                                返回符号表达式的运算-编程知识网的结果

>> x = sym('x');
>> symsum(x)ans =1/2*x^2-1/2*x>> 

6.符号表达式、字符串、数值之间的转换

(1)将符号表达式转换成数值表达式可以通过函数eval来实现,其中eval函数也可以将字符串转换成数值表达式

>> n = 4;
>> syms i j
>> t = 1/(i+j-1)t =1/(i+j-1)>> a = zeros(n);
>> for i = 1:n
for j = 1:n
a(i,j) = eval(t);
end
end
>> aa =1.0000    0.5000    0.3333    0.25000.5000    0.3333    0.2500    0.20000.3333    0.2500    0.2000    0.16670.2500    0.2000    0.1667    0.1429

或者将t写成字符串的形式

>> n = 4;
>> t = '1/(i+j-1)';
>> a = zeros(n);
>> for i = 1:n
for j = 1:n
a(i,j) = eval(t);
end
end
>> aa =1.0000    0.5000    0.3333    0.25000.5000    0.3333    0.2500    0.20000.3333    0.2500    0.2000    0.16670.2500    0.2000    0.1667    0.1429>> 

(2)将数值表达式转换成符号表达式主要是通过函数sym来实现的。

>> p = 1.74p =1.7400>> q = sym(p)q =87/50>> 

另外,函数poly2sym可以实现将MATLAB等价系数向量转换成它的符号表达式。

>> a = [1 3 4 5]a =1     3     4     5>> p = poly2sym(a)p =x^3+3*x^2+4*x+5>> 

(3)符号表达式与字符串的相互转换

符号表达式转字符串可以通过char函数,字符串转符号表达式可以通过sym函数

>> f = 'x+y'%此时f为字符串f =x+y>> f = sym(f)%此时f为符号表达式f =x+y>> f = char(f)%此时f为字符串f =x+y>> 

7.符号表达式(符号矩阵)的因式分解

符号表达式因式分解通过函数factor来实现,其调用格式如下:

factor(s)

如果输入变量s为一符号矩阵,则此函数将因式分解此矩阵的各个元素。

>> syms x
>> factor(x^9 - 1)ans =(x-1)*(x^2+x+1)*(x^6+x^3+1)>> factor(sym('12345678901234567890'))ans =(2)*(3)^2*(5)*(101)*(3803)*(3607)*(27961)*(3541)>> 

8.符号表达式(符号矩阵)的展开

符号表达式的展开可以通过函数expand来实现,其调用格式如下

expand(s)

此函数经常用在多项式的表达式中,也常用于三角函数、指数函数、对数函数的展开中。

>> syms x y
>> expand((x+3)^4)ans =x^4+12*x^3+54*x^2+108*x+81>> expand(cos(x+y))ans =cos(x)*cos(y)-sin(x)*sin(y)>> 

9.符号表达式(矩阵)的合并运算

collect(s)  对s合并同类项,s是符号表达式或符号矩阵。即将符号表达式s写成关于默认变量的幂形式,默认变量由findsym来确定。
collect(s,v)  对s按变量v合并同类项,s是符号表达式或符号矩阵。即将符号表达式s写成关于v的幂形式。

>> syms x y
>> collect(x^2*y + y*x - x^2 - 2*x)ans =(y-1)*x^2+(y-2)*x>> f = -1/4*x*exp(-2*x)+3/16*exp(-2*x);>> collect(f,exp(-2*x))ans =(-1/4*x+3/16)*exp(-2*x)

10.符号表达式(矩阵)的简化

符号简化可以通过函数simple和simplify来实现。这两个函数的调用格式。

调用格式                                                                     说明

simple(s)                                  对表达式s尝试多种不同算法简化,以显示s表达式的长度最短的简化形式;若s为一矩阵,则结果是全矩阵的最短形行,而非每个元素的最短形

[R HOW]=simple(s)                返回的R为简化型,HOW为简化过程中使用的方法

simplify(s)                                 简化符号表达式

>> help simple--- help for sym/simple.m ---SIMPLE Search for simplest form of a symbolic expression or matrix.SIMPLE(S) tries several different algebraic simplifications ofS, displays any which shorten the length of S's representation,and returns the shortest. S is a SYM. If S is a matrix, the resultrepresents the shortest representation of the entire matrix, which is not necessarily the shortest representation of each individual element.[R,HOW] = SIMPLE(S) does not display intermediate simplifications,but returns the shortest found, as well as a string describingthe particular simplification. R is a SYM. HOW is a string.Examples:S                          R                  Howcos(x)^2+sin(x)^2          1                  simplify2*cos(x)^2-sin(x)^2        3*cos(x)^2-1       simplifycos(x)^2-sin(x)^2          cos(2*x)           combine(trig)cos(x)+(-sin(x)^2)^(1/2)   cos(x)+i*sin(x)    radsimpcos(x)+i*sin(x)            exp(i*x)           convert(exp)(x+1)*x*(x-1)              x^3-x              combine(trig)x^3+3*x^2+3*x+1            (x+1)^3            factorcos(3*acos(x))             4*x^3-3*x          expandsyms x y positivelog(x) + log(y)            log(x*y)           combineSee also simplify, factor, expand, collect.Reference page in Help browserdoc simple>> help simplify--- help for sym/simplify.m ---SIMPLIFY Symbolic simplification.SIMPLIFY(S) simplifies each element of the symbolic matrix S.Examples: simplify(sin(x)^2 + cos(x)^2) is 1 .simplify(exp(c*log(sqrt(alpha+beta))))See also simple, factor, expand, collect.Reference page in Help browserdoc simplify

11.符号表达式的分式通分

求解符号表达式的分子和分母可以通过函数numden来实现,其调用格式如下:

[n,d]=numden(A)

可以把A的各元素转换为分子和分母都是整系数的最佳多项式型。

>> syms x y
>> [n,d] = numden(x/y - y/x)n =x^2-y^2d =y*x>> 

12.符号表达式的“秦九昭型“重写

符号表达式的”秦九昭型“重写可以通过函数horner(P)来实现,其调用格式如下:

horner(P)

可以将符号多项式转换成嵌入套形式表达式。

>> horner(x^4-3*x^2+1)ans =1+(-3+x^2)*x^2>>