matlab6——符号计算(一)符号对象(区别于数值计算,符号计算更加精确)

符号对象

  • 符号对象的建立
      • 1.sym函数
      • 2.syms命令
  • 符号对象的运算
      • 1.四则运算
      • 2.关系运算
        • 对符号对象设置值域
      • 3.逻辑运算
      • 4.因式分解与展开运算
      • 5.其他运算
      • 6.符号运算中主变量的确定
  • 符号矩阵

符号对象的建立

1.sym函数

调用格式:
符号对象名=sym(A)

  • A可以是一个数值常量、数 值矩阵或数值表达式(不加单引号),此时符号对象为一 个符号常量;
  • A也可以是一个变量名(加单引号),这时 符号对象为一个符号变量。

ps:符号计算的结果是一个精确的数学表达式。
数值计算的结果是一个数值。

例子一:
符号计算:
sin(sym(pi/3)) 
ans = 3^(1/2)/2 
数值计算:
sin(pi/3) 
ans = 0.8660
例子二:
 a=5; 
 b=-8; 
 x=sym('a');
 y=sym('b');
 w=(a+b)*(a-b) 
 w = -39 
 s=(x+y)*(x-y) 
 s = (a + b)*(a - b)
 eval(s) %将符号表达式转化为数值计算
 ans = -39

2.syms命令

syms命令可以一次定义多个符号变量
调用格式:
syms 符号变量名1 符号变量名2 … 符号变量名n

  • 变量名不能加单引号,相互之间用空格隔开。 例如,要同时定义四个符号变量a、b、c、d,则可以输入如下 命令:>> syms a b c d

符号对象的运算

1.四则运算

符号表达式的四则运算与数值运算一样,用 +、-、*、/、^ 运 算符实现,其运算结果依然是一个符号表达式。

2.关系运算

6种关系运算符<、<=、>、>=、==、~=
函数调用:
对应的6个函数:lt()、le()、gt()、ge()、eq()、ne()
ps:若参与运算的是符号表达式,其结果是一个符号关系表达 式
若参与运算的是符号矩阵,其结果是由符号关系表达式组成的矩阵

对符号对象设置值域

函数调用:
assume(condition) 指定变量满足条件condition
assume(expr,set) 指定表达式 expr属于集合set。

例一:
 syms x; 
 assume(x<0); 
 abs(x)==x 
 ans= -x==x
例二:
 assume(x,'positive'); %x为正数
 abs(x)==x 
 ans= x==x

3.逻辑运算

3种逻辑运算符:&(与)、|(或)和~(非)
4个逻辑运算函数:and(a,b)、or(a,b)、not(a)和xor(a,b)

4.因式分解与展开运算

调用格式为:
factor(s):对符号表达式s分解因式,还可以将整数分解为因子。
expand(s):对符号表达式s进行展开。
collect(s):对符号表达式s合并同类项。
collect(s,v):对符号表达式s按变量v合并同类项

例一:
syms a b; 
s=a^3-b^3; 
factor(s) 
ans= [ a-b, a^2 + a*b + b^2]
例二:
factor(12) 
ans= 2     2     3

例三:
梅森素数的验证问题
所谓梅森数,是指形如2^p-1的一类整数,其中指数p是素数。将梅森数记为Mp。 如果梅森数是素数,就称为梅森素数。请验证M19 、 M23 、 M29 、 M31是否 为梅森素数。

syms p;%定义符号变量p
m=2^p-1;%梅森数计算公式
p=19;
m19=eval(m)%计算m的数值
factor(m19)%分解m19的正因子以验证它是否为素数
结果:
m19 =524287
ans =524287

5.其他运算

提取有理分式的分子分母[n,d]=numden(s)
提取符号表达式的系数c=coeffs(s,x)
符号表达式化简simplify(s)
符号多项式与多项式系数向量之间的转换
符号多项式转换为多项式系数向量:p=sym2poly(s)
多项式系数向量转换为符号多项式:s=poly2sym(p)
不可以用来一步求出标准多项式向量。不只一个符号变量。

例:求求方程ax^2+bx+c=0的求根公式

syms a b c x;
f=a*x^2+b*x+c
%表达式
g=coeffs(f,x)
%提取f中x的系数,从x的低次到x的高次
g=g(end:-1:1)
%将g反转过来。
roots(g)
%多项式求根命令

结果:
g =[ c, b, a]
g = a, b, c]
ans =
 -(b + (b^2 - 4*a*c)^(1/2))/(2*a)
 -(b - (b^2 - 4*a*c)^(1/2))/(2*a)

6.符号运算中主变量的确定

① 如果没有明确指定自变量,按以下原则确定主变量并对其进行相应运算:

  • 寻找除i、j之外,在字母顺序上最接近x的小写字母。
  • 若表达式中有两个符号变量与x的距离相等,则ASCII码大者优先。

② 查找一个符号表达式中的符号变量。
调用格式为:symvar(s,n)

  • 函数返回符号表达式s中的n个符号变量。因此,可以用symvar(s,1)查找表达式s的主变量。

符号矩阵

符号矩阵也是一种符号表达式,所以符号表达式运算都可以在矩阵意 义下进行。
==ps:这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。 ==
例一:建立矩阵

syms a b x y alp;
m=[a^3-b^3,sin(alp)^2+cos(alp)^2;(15*x*y-3*x^2)/(x-5*y),78]
%建立矩阵
simplify(m)
%对矩阵进行化简

结果:
m =
[                    a^3 - b^3, cos(alp)^2 + sin(alp)^2]
[ (- 3*x^2 + 15*y*x)/(x - 5*y),                      78]
ans =
[ a^3 - b^3,  1]
[      -3*x, 78]

例二:求解方程组:
matlab6——符号计算(一)符号对象(区别于数值计算,符号计算更加精确)_第1张图片

syms lamda;
A=[1-lamda,-2,4;2,3-lamda,1;1,1,1-lamda];%系数符号矩阵λ用lamda代替
D=det(A);%求系数阵行列式的值
factor(D)
%对行列式结果分解因式

结果:
ans =[ -1, lamda, lamda - 2, lamda - 3]
有结果可看出:λ=023方程组有非零解

你可能感兴趣的:(MATLAB)