文章目录

  • 摘要
  • 1 符号对象
    • 1.1 符号对象的建立
    • 1.2 符号对象的运算
    • 1.3 符号矩阵
  • 结语

摘要

本文是《科学计算与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和它本身以外不再有其他因数的自然数。素数又叫质数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
请验证M19、M23、M29、M31是否为梅森素数。

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

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

m23 =8388607
ans =47      178481

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

m29 =536870911
ans =233        1103        2089

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

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

结果显示,M31是梅森素数。\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()函数可以用于查找一个符号表达式中的符号变量,函数的调用格式为:
symvar(s,n)symvar(s,n)symvar(s,n)
函数返回符号表达式s中的n个符号变量。因此,可以用symvar(s,1)查找表达式s的主变量。

1.3 符号矩阵

符号矩阵也是一种符号表达式,所以符号表达式运算都可以在矩阵意义下进行。
注意:这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。\color{red}注意:这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。注意:这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。
例如:建立符号矩阵并化简。
[a3−b3sin2(a)+cos2(a)15xy−3x2x−5y78]\begin{bmatrix} a^3-b^3& sin^2(a)+cos^2(a)\\ \frac{15xy-3x^2}{x-5y} & 78 \end{bmatrix} \quad[a3−b3x−5y15xy−3x2​​sin2(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−λ)x1−2x2+4x3=02x1+(3−λ)x2+x3=0x1+x2+(1一λ)x3=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−λ)x1​−2x2​+4x3​2x1​+(3−λ)x2​+x3​x1​+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时,原方程组有非零解。

结语

最后欢迎大家点赞

利用MATLAB进行符号运算。相关推荐

  1. 将因式展开 matlab,关于Matlab中符号运算的因式分解、展开与合并

    对于matlab求解符号运算中几个常用的函数,主要说一下因式分解.展开还有合并. (1)对于因式分解使用的是factor()函数. 例1:factor函数对于纯数字也可以进行分解的 factor(11 ...

  2. MATLAB中符号运算和数值运算的区别

    两者的根本区别是 : 数值计算的表达式.矩阵变量中不允许有未定义的自由变量 , 而符号计算可以含有未定义的符号变量.对于一般的程序设计软件如 C, C + + 等语言实现数值计算还可以 , 但是实现符 ...

  3. MATLAB的符号运算基础

    在数学运算中,运算的结果如果是一个数值,可以称这类运算为数值运算:如果运算结果为表达式,在MATLAB中称为符号运算,符号计算是对未赋值的符号对象(可以是常数.变量.表达式)进行运算和处理.MATLA ...

  4. MATLAB多项式符号运算

    符号计算是指在运算时,无须事先对变量进行赋值,而是将所有得到的结果以标准的符 号形式表示出来.符号计算是以符号对象和符号表达式作为运算对象的表达形式,最终给出 的是解析解;在运算过程中不会受到计算误差 ...

  5. matlab常见符号运算(计算导数,积分、符号求和等))

    符号运算的建立 sym 函数用来建立单个符号量,一般调用格式为: 符号变量 = sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串 syms 命令用来建立多个符号量,一般调用格式为: sy ...

  6. matlab常见符号运算( 因式分解、展开、合并、简化及通分等,计算导数,积分,符号求和、代数方程和微分方程求解)

    常见符号运算 因式分解.展开.合并.简化及通分等 因式分解factor(f) factor 也可用于正整数的分解 函数展开 expand(f) 多项式展开 三角函数展开 合并同类项 collect(f ...

  7. matlab中符号运算求解结果出现的是1i不是li

    说实话,也就我这种粗心大头才研究了半天为啥是li,早看到1i就能早点明白这不过是代表复数 因为 i 容易和变量搞混了,所以matlab在使用符号函数求解时,其结果会推荐你使用 1i .而且当你可以将 ...

  8. matlab计算斜方差_利用matlab进行协方差运算

    本文全部参考自: http://www.cnblogs.com/welen/articles/5535042.html#undefined 知识点一: MATLAB中四个取整函数具体使用方法如下: M ...

  9. matlab(四)符号运算

    目录 符号变量和符号表达式 用findsym()寻找自由符号变量 用vpa指令确定任意精度的符号变量 用sym函数实现数值变量与符号变量的转换 符号表达式的基本运算 符号变量和符号表达式 a = sy ...

  10. 关于Matlab中符号运算的因式分解、展开与合并

    https://blog.csdn.net/kaka20080622/article/details/24155767

最新文章

  1. 操作系统实验报告8:进程间通信—消息机制
  2. PE教程6: Import Table(引入表)(看雪)
  3. windows之无法选择默认打开方式
  4. Symbols andSymbol Tables
  5. 纪念第一次用vscode给go语言配置环境踩坑
  6. SeSe 2005-02-11 -- 2005-02-12
  7. 【Java web】Servlet面试题
  8. FPGA如何固化程序到EPCS之入门的理想教程
  9. kali Linux 2021 新版安装
  10. ILM(Index Lifecycle Management)
  11. 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest H题
  12. 大数据建模 需要了解的八大定律
  13. DELPHI中拖放的操作
  14. powerbuilder(pb)连接mongodb数据库:使用ODBC连接
  15. 通过WEB链接打开QQ窗体,实现与陌生人交谈的目的
  16. 做网络营销必看干货:月薪3000与月薪30000文案区别
  17. 不懂FAQ页面怎么设计?一些产品FAQ页面模板展示!
  18. dstwo linux n64,惊爆 NDS可以用N64模拟器 DSTWO用户有福了!
  19. 教你怎么安装linux电脑系统,包括Ubuntu Linux和centOS
  20. 基于Java毕业设计大学生兼职平台源码+系统+mysql+lw文档+部署软件

热门文章

  1. Xshell6与Xftp6教育版下载(免费)
  2. IDEA Jrebel 激活方法
  3. Python处理 JSON 数据
  4. 设计模式之抽象工厂模式(Abstract Factory)
  5. windows7修复计算机在哪里找,Windows7系统修复方法大全
  6. 获取当前时间戳的方法
  7. 排序算法和查找算法的英文名
  8. Excel高级函数应用总结
  9. Java静态代理和动态代理(代理模式)详解
  10. python网易云音乐下载器爬取全网音乐