利用MATLAB进行符号运算。

摘要

本文是《科学计算与MATLAB语言》专题七第1小节的学习笔记,如果大家有时间的话,可以去听听课,没有的话,可以看看我的笔记,还是很不错的。从符号对象的建立、运算到符号矩阵的运算,本文都有详细的记录,每个代码我都跑过一遍,可以直接复制到MATLAB中运行。

1 符号对象

1.1 符号对象的建立

(1)sym函数
sym函数用于建立单个符号对象,其常用调用格式为:
符号对象名=sym(A)
将由A来建立符号对象。其中,A可以是一个数值常量、数值矩阵或数值表达式 ( 不 加 单 引 号 ) \color{red} (不加单引号) 此时符号对象为一个 符 号 常 量 \color{red} 符号常量 ;A也可以是一个变量名 ( 加 单 引 号 ) \color{red} (加单引号) ,这时符号对象为一个 符 号 变 量 \color{red} 符号变量
感受以下程序:
例1:

t=sym(2);
t+1/2

结果为一个数学表达式-分式。

ans=
5/2

例2:

sin(sym(pi/3))
ans=
3^(1/2)/2

结果为一个数学表达式
例2.2:

sin(pi/3)
ans=
0.8660

结果为一个数值
例3:

a=5;
b=-8;
x=sym('a');
y=sym('b');
w=(a+b)*(a-b)
w=
-39

在例3的基础上增加一条语句

a=5;
b=-8;
x=sym('a');
y=sym('b');
w=(a+b)*(a-b)
s=(x+y)*(x-y)
w=
-39
s=
(a+b)*(a-b) 
b=-8;
x=sym('a');
y=sym('b');
w=(a+b)*(a-b);
s=(x+y)*(x-y);
eval(s)%将S转化为MATLAB可以执行的语句并运行。
ans=
-39

由以上的例子我们可以看出:
1 符号计算的结果是一个精确的数学表达式。
2 数值计算的结果是一个数值。

(2)syms命令
syms命令可以一次定义多个符号变量,其一般调用格式如下:
syms符号变量名1 符号变量名2 … 符号变量名n
其中,变量名不能加 单 引 号 \color{red} 单引号 ,相互之间用空格隔开。
例如,要同时定义四个符号变量a、b、c、d,则可以输入如下命令:

syms a b c d

1.2 符号对象的运算

(1)四则运算
符号表达式的四则运算与数值运算一样,用 + 、 一 、 ∗ 、 / 、 +、一、*、/、 +/运算符实现,其运算结果依然是一个符号表达式。例如:

f=2*x~2+3*x-5;
g=x~2-x+7;
f+g 
ans=
3*x~2+2*x+2
f=2*x~2+3*x-5;
g=x~2-x+7;
f+g 
ans=
3*x~2+2*x+2

(2)关系运算
6种关系运算符: < 、 ≤ 、 > 、 ≥ 、 = = 、 ≠ 。 \lt 、\le、\gt、\ge、==、\ne。 <>===
对应的6个函数:lt()、le()、gt()、ge()、eq()、ne()。
若参与运算的是符号表达式,其结果是一个符号关系表达式;若参与运算的是符号矩阵,其结果是由符号关系表达式组成的矩阵。
在进行符号对象的运算前,可用assume函数对符号对象设置值域,函数调用格式为:
assume(condition)
assume(expr,set)
第一种格式指定变量满足条件condition,
第二种格式指定表达式expr属于集合set。

syms x ;
assume(x<0);
abs(x)==x %求x的绝对值。
ans=
-x == x

因为x<0,所以abs(x)的值为-x。

assume(x,'positive');
abs(x)==x 
ans=
x == x

因为x为正数,所以abs(x)的值为x。
(3)逻辑运算
3种逻辑运算符:&(与)、|(或)和~(非)。
4个逻辑运算函数:and(a,b)、or(a,b)、not(a)和xor(a,b)。

syms x;
y=x>0&x<10
y =
0 < x & x < 10
syms x;
y=and(x>0,x<10)
y =
0 < x & x < 10

两个结果相同。
(4)因式分解与展开运算
MATLAB提供了符号表达式的因式分解与展开的函数,函数的调用格式为:
①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-1的一类整数,其中指数p是素数。将梅森数记为M。如果梅森数是素数,就称为梅森素数。
素 数 又 叫 质 数 , 是 指 在 大 于 1 的 自 然 数 中 , 除 了 1 和 它 本 身 以 外 不 再 有 其 他 因 数 的 自 然 数 。 \color{green}素数又叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。 11
请验证M19、M23、M29、M31是否为梅森素数。

syms p;
m=2^p-1;
p=19;
m19=eval(m)
factor(m19)
m19 =
      524287
ans =
      524287

结 果 显 示 M 19 是 梅 森 素 数 。 同 理 可 得 M 23 、 M 29 、 M 31 的 结 果 , 结 果 如 下 : \color{green}结果显示M19是梅森素数。\\ 同理可得M23、M29、M31的结果,结果如下: M19M23M29M31,

m23 =
     8388607
ans =
          47      178481

结 果 显 示 , M 23 不 是 梅 森 素 数 。 \color{green}结果显示,M23不是梅森素数。 M23

m29 =
   536870911
ans =
         233        1103        2089

结 果 显 示 , M 29 不 是 梅 森 素 数 。 \color{green}结果显示,M29不是梅森素数。 M29

m31 =
   2.1475e+09
ans =
   2.1475e+09

结 果 显 示 , M 31 是 梅 森 素 数 。 \color{green}结果显示,M31是梅森素数。 M31
(5)其他运算
①提取有理分式的分子分母:
[n,d]=numden(s)
②提取符号表达式的系数:
c=coeffs(s,x)
③符号表达式化简:
simplify(s)
④符号多项式与多项式系数向量之间的转换:
符号多项式转换为多项式系数向量:p=sym2poly(s)
多项式系数向量转换为符号多项式:s=poly2sym(p)

syms a b c x;
f=a*x^2+b*x+c
g=coeffs(f,x)
f = 
a*x^2 + b*x + c 
g =
[ c, b, a]
syms a b c x;
f=a*x^2+b*x+c
g=coeffs(f,x);
g=g(end:-1:1)
roots(g)
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)符号运算中变量的确定
①如果没有明确指定自变量,MATLAB将按以下原则确定主变量并对其进行相应运算:寻找除i、j之外,在字母顺序上最接近x的小写字母。若表达式中有两个符号变量与x的距离相等,则ASCII码大者优先。
②symvar()函数可以用于查找一个符号表达式中的符号变量,函数的调用格式为:
s y m v a r ( s , n ) symvar(s,n) symvarsn
函数返回符号表达式s中的n个符号变量。因此,可以用symvar(s,1)查找表达式s的主变量。

1.3 符号矩阵

符号矩阵也是一种符号表达式,所以符号表达式运算都可以在矩阵意义下进行。
注 意 : 这 些 函 数 作 用 于 符 号 矩 阵 时 , 是 分 别 作 用 于 矩 阵 的 每 一 个 元 素 。 \color{red}注意:这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。
例如:建立符号矩阵并化简。
[ a 3 − b 3 s i n 2 ( a ) + c o s 2 ( a ) 15 x y − 3 x 2 x − 5 y 78 ] \begin{bmatrix} a^3-b^3& sin^2(a)+cos^2(a)\\ \frac{15xy-3x^2}{x-5y} & 78 \end{bmatrix} \quad [a3b3x5y15xy3x2sin2(a)+cos2(a)78]

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]

例2当入取何值时,以下齐次线性方程组有非零解。
{ ( 1 − λ ) x 1 − 2 x 2 + 4 x 3 = 0 2 x 1 + ( 3 − λ ) x 2 + x 3 = 0 x 1 + x 2 + ( 1 一 λ ) x 3 = 0 \left\{ \begin{aligned} (1-\lambda)x_1-2x_2+4x_3&=0\\ 2x_1+(3-\lambda)x_2+x_3&=0\\ x_1+x_2+(1一\lambda)x_3&=0 \end{aligned} \right. (1λ)x12x2+4x32x1+(3λ)x2+x3x1+x2+(1λ)x3=0=0=0
对于齐次线性方程组Ax=0,当rank(A)<n或|A|=0时,齐次线性方程组有非零解。

syms lambda; 
A=[1-lambda,-2,4;...
    2,3-lambda,1;...
    1,1,1-lambda]; 
D=det(A);
factor(D)
ans = 
[ -1, lambda, lambda - 2, lambda - 3]

从 而 得 知 , 当 λ = 0 、 λ = 2 或 λ = 3 时 , 原 方 程 组 有 非 零 解 。 从而得知,当\lambda=0、\lambda=2或\lambda=3时,原方程组有非零解。 λ=0λ=2λ=3

结语

最后欢迎大家点赞👍,收藏⭐,转发🚀
如有问题、建议,请您在评论区留言💬哦。

  • 15
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值