[MATLAB]符号对象建立运算以及符号矩阵(syms,factor,assume,collect)

2023-10-12 23:20

本文主要是介绍[MATLAB]符号对象建立运算以及符号矩阵(syms,factor,assume,collect),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本实验源于中南大学《科学计算与MATLAB语言》,包括三个内容,内容如下:

  • 符号对象的建立
  • 符号对象的运算
  • 符号矩阵

符号对象的建立

  • sym函数
    sym函数用于建立单个符号对象,其常用调用格式为:
符号对象名=sym(A)

将由A来建立符号对象,其中,A可以是一个数值常量、数值矩阵或数值表达式(不加单引号),此时符号对象为一个符号常量;A也可以是一个变量名(加单引号),这时符号对象为一个符号变量.
下面给出两个例子
1、将符号常量2赋给t,参与四则运算
2、 将常量pi/3转化为符号对象求正弦值
3、将pi/3做数值计算,得到真实的sin正弦值
代码如下:

>> t=sym(2);
>> t+1/2ans =5/2>> sin(sym(pi/3))ans =1/2*3^(1/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>> 

没有我matlab函数干不了的,再来一个eval函数!

  • syms命令
    syms命令可以一次定义多个符号变量,其一般调用格式如下:
syms 符号变量1 符号变量2 ... 符号变量名n

其中,变量名不能加单引号,相互之间用空格隔开。

符号对象的运算

四则运算

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

>> syms x;
>> f=2*x^2+3*x-5;
>> g=x^2-x+7;
>> f+gans =3*x^2+2*x+2>> 

这段代码就是利用符号对象创建表达式然后进行两个多项的加法,是不是非常神奇?

关系运算

  • 6种关系运算符:<、<=、>、>=、==、~=
  • 对应的6个函数:lt()、le()、gt()、ge()、eq()、ne()
    若参与运算的是符号表达式,其结果是一个符号表达式:若参与运算的是符号矩阵,其结果是由符号关系表达式组成的矩阵.
    在进行符号对象的运算前,可用assume函数符号对象设置值域,函数调用格式为:
assume(condition)
assume(expr,set)

第一种格式指定变量满足条件condition,第二种格式指定表达式expr属于集合set。

syms x;
assume(x<0);
abs(x)==xassume(x,'positive');
abs(x)==x

逻辑运算

  • 3种逻辑运算符:)(与)、|(或)和~(非)。
  • 4个逻辑运算函数:and()、or()、not()、xor().
syms x
and(x<0,x>10);

因式分解与展开运算

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 =-(b-a)*(b^2+b*a+a^2)>> 
>> factor(12)ans =2     2     3>> 

我用c实现的,结果matlab都已经实现好了,太强了!

梅森素数的验证问题

在这里插入图片描述
数学的理论领域里要研究大素数,而大素数都是梅森素数,梅森素数的寻找也就变得为大素数提供了方向!

>> syms p;
>> m=2^p-1;
>> p=19;
>> m19=eval(m)m19 =524287>> factor(m19)ans =524287>> 
>> p=23;
>> m23=eval(m)m23 =8388607>> factor(m23)ans =47      178481>> p=29;
>> m29=eval(m)m29 =536870911>> factor(m29)ans =233        1103        2089>> p=31;
>> m31=eval(m)m31 =2.1475e+009>> factor(m31)ans =2.1475e+009>> 

总结:M19/M31不能被分解,所以是素数
M23/M29能被分解,所以不是素数

其他运算

提取有理分式的分子分母:[n,d]=nuden(s)
提取符号表达式的系数:c=coeffs(s,x)
符号表达式化简:simplify(s)
符号多项式与多项式系数向量之间的转换:
符号多项式转换为多项式系数向量:p=sym2poly(s)
多项式系数向量转换为符号多项式:s=poly2sym(p)

在这里插入图片描述
步骤:

  1. 建立方程
  2. 取出系数
  3. 反转系数
  4. 求根roots,打完收工!
>> syms a b c x;
>> f=a*x^2+b*x+c>> g=coeffs(f,x)>> g=g(end:-1:1)>> roots(g)

符号运算种变量的确定

  1. 如果没有明确指定自变量,MATLAB将按以下原则确定主变量并对其相应运算:
    ①寻找除i,j之外,在字母顺序上最接近x的小写字母
    ②若表达式中有两个符号变量与x的距离相等,则ASCII码大者优先。

  2. symvar()函数可以用于查找一个符号表达式中符号变量,函数的调用格式为:

symvart(s,n)

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

符号矩阵

符号矩阵也是一种符号表达式,所以符号表达式运算都可以在矩阵意义下进行。
注意:这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。
在这里插入图片描述

>> 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]m =[                a^3-b^3,  sin(alp)^2+cos(alp)^2]
[ (15*x*y-3*x^2)/(x-5*y),                     78]>> simplify(m)ans =[ a^3-b^3,       1]
[    -3*x,      78]>> 

在这里插入图片描述
对于齐次线性方程组Ax=0,当rank(A)<n或|A|=0时,齐次线性方程组有非零解。

>> syms lamda;
>> A=[1-lamda,-2,4;2,3-lamda,1;1,1,1-lamda];
>> D=det(A);
>> factor(D)ans =-lamda*(lamda-2)*(-3+lamda)>> 

根据线性代数的知识,可以看出,当其为0,2,3即有非零解。
在这里插入图片描述

这篇关于[MATLAB]符号对象建立运算以及符号矩阵(syms,factor,assume,collect)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/199143

相关文章

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

SpringMVC高效获取JavaBean对象指南

《SpringMVC高效获取JavaBean对象指南》SpringMVC通过数据绑定自动将请求参数映射到JavaBean,支持表单、URL及JSON数据,需用@ModelAttribute、@Requ... 目录Spring MVC 获取 JavaBean 对象指南核心机制:数据绑定实现步骤1. 定义 Ja

Python打印对象所有属性和值的方法小结

《Python打印对象所有属性和值的方法小结》在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提... 目录python中打印对象所有属性和值的方法实现步骤1. 使用vars()和pprint()2. 使

MySQL JSON 查询中的对象与数组技巧及查询示例

《MySQLJSON查询中的对象与数组技巧及查询示例》MySQL中JSON对象和JSON数组查询的详细介绍及带有WHERE条件的查询示例,本文给大家介绍的非常详细,mysqljson查询示例相关知... 目录jsON 对象查询1. JSON_CONTAINS2. JSON_EXTRACT3. JSON_TA

C#之List集合去重复对象的实现方法

《C#之List集合去重复对象的实现方法》:本文主要介绍C#之List集合去重复对象的实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C# List集合去重复对象方法1、测试数据2、测试数据3、知识点补充总结C# List集合去重复对象方法1、测试数据

Spring中管理bean对象的方式(专业级说明)

《Spring中管理bean对象的方式(专业级说明)》在Spring框架中,Bean的管理是核心功能,主要通过IoC(控制反转)容器实现,下面给大家介绍Spring中管理bean对象的方式,感兴趣的朋... 目录1.Bean的声明与注册1.1 基于XML配置1.2 基于注解(主流方式)1.3 基于Java

C++/类与对象/默认成员函数@构造函数的用法

《C++/类与对象/默认成员函数@构造函数的用法》:本文主要介绍C++/类与对象/默认成员函数@构造函数的用法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录名词概念默认成员函数构造函数概念函数特征显示构造函数隐式构造函数总结名词概念默认构造函数:不用传参就可以

C++类和对象之默认成员函数的使用解读

《C++类和对象之默认成员函数的使用解读》:本文主要介绍C++类和对象之默认成员函数的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、默认成员函数有哪些二、各默认成员函数详解默认构造函数析构函数拷贝构造函数拷贝赋值运算符三、默认成员函数的注意事项总结一

C/C++中OpenCV 矩阵运算的实现

《C/C++中OpenCV矩阵运算的实现》本文主要介绍了C/C++中OpenCV矩阵运算的实现,包括基本算术运算(标量与矩阵)、矩阵乘法、转置、逆矩阵、行列式、迹、范数等操作,感兴趣的可以了解一下... 目录矩阵的创建与初始化创建矩阵访问矩阵元素基本的算术运算 ➕➖✖️➗矩阵与标量运算矩阵与矩阵运算 (逐元

golang 对象池sync.Pool的实现

《golang对象池sync.Pool的实现》:本文主要介绍golang对象池sync.Pool的实现,用于缓存和复用临时对象,以减少内存分配和垃圾回收的压力,下面就来介绍一下,感兴趣的可以了解... 目录sync.Pool的用法原理sync.Pool 的使用示例sync.Pool 的使用场景注意sync.