利用MATLAB进行符号运算。
文章目录
- 摘要
- 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−3x2sin2(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+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时,原方程组有非零解。
结语
最后欢迎大家点赞
利用MATLAB进行符号运算。相关推荐
- 将因式展开 matlab,关于Matlab中符号运算的因式分解、展开与合并
对于matlab求解符号运算中几个常用的函数,主要说一下因式分解.展开还有合并. (1)对于因式分解使用的是factor()函数. 例1:factor函数对于纯数字也可以进行分解的 factor(11 ...
- MATLAB中符号运算和数值运算的区别
两者的根本区别是 : 数值计算的表达式.矩阵变量中不允许有未定义的自由变量 , 而符号计算可以含有未定义的符号变量.对于一般的程序设计软件如 C, C + + 等语言实现数值计算还可以 , 但是实现符 ...
- MATLAB的符号运算基础
在数学运算中,运算的结果如果是一个数值,可以称这类运算为数值运算:如果运算结果为表达式,在MATLAB中称为符号运算,符号计算是对未赋值的符号对象(可以是常数.变量.表达式)进行运算和处理.MATLA ...
- MATLAB多项式符号运算
符号计算是指在运算时,无须事先对变量进行赋值,而是将所有得到的结果以标准的符 号形式表示出来.符号计算是以符号对象和符号表达式作为运算对象的表达形式,最终给出 的是解析解;在运算过程中不会受到计算误差 ...
- matlab常见符号运算(计算导数,积分、符号求和等))
符号运算的建立 sym 函数用来建立单个符号量,一般调用格式为: 符号变量 = sym(A) 参数 A 可以是一个数或数值矩阵,也可以是字符串 syms 命令用来建立多个符号量,一般调用格式为: sy ...
- matlab常见符号运算( 因式分解、展开、合并、简化及通分等,计算导数,积分,符号求和、代数方程和微分方程求解)
常见符号运算 因式分解.展开.合并.简化及通分等 因式分解factor(f) factor 也可用于正整数的分解 函数展开 expand(f) 多项式展开 三角函数展开 合并同类项 collect(f ...
- matlab中符号运算求解结果出现的是1i不是li
说实话,也就我这种粗心大头才研究了半天为啥是li,早看到1i就能早点明白这不过是代表复数 因为 i 容易和变量搞混了,所以matlab在使用符号函数求解时,其结果会推荐你使用 1i .而且当你可以将 ...
- matlab计算斜方差_利用matlab进行协方差运算
本文全部参考自: http://www.cnblogs.com/welen/articles/5535042.html#undefined 知识点一: MATLAB中四个取整函数具体使用方法如下: M ...
- matlab(四)符号运算
目录 符号变量和符号表达式 用findsym()寻找自由符号变量 用vpa指令确定任意精度的符号变量 用sym函数实现数值变量与符号变量的转换 符号表达式的基本运算 符号变量和符号表达式 a = sy ...
- 关于Matlab中符号运算的因式分解、展开与合并
https://blog.csdn.net/kaka20080622/article/details/24155767
最新文章
- 操作系统实验报告8:进程间通信—消息机制
- PE教程6: Import Table(引入表)(看雪)
- windows之无法选择默认打开方式
- Symbols andSymbol Tables
- 纪念第一次用vscode给go语言配置环境踩坑
- SeSe 2005-02-11 -- 2005-02-12
- 【Java web】Servlet面试题
- FPGA如何固化程序到EPCS之入门的理想教程
- kali Linux 2021 新版安装
- ILM(Index Lifecycle Management)
- 2017-2018 ACM-ICPC, Asia Daejeon Regional Contest H题
- 大数据建模 需要了解的八大定律
- DELPHI中拖放的操作
- powerbuilder(pb)连接mongodb数据库:使用ODBC连接
- 通过WEB链接打开QQ窗体,实现与陌生人交谈的目的
- 做网络营销必看干货:月薪3000与月薪30000文案区别
- 不懂FAQ页面怎么设计?一些产品FAQ页面模板展示!
- dstwo linux n64,惊爆 NDS可以用N64模拟器 DSTWO用户有福了!
- 教你怎么安装linux电脑系统,包括Ubuntu Linux和centOS
- 基于Java毕业设计大学生兼职平台源码+系统+mysql+lw文档+部署软件