从本节开始,后续章节小编将和大家分享的模块是matlab中的符号计算。
众所周知,科学计算包括数值计算和符号计算两种计算,对于符号计算,符号计算又称计算机代数,通俗地说就是用计算机推导数学公式,如对表达式进行因式分解、化简、微分、积分、解代数方程、求解常微分方程等。
我们在使用matlab的时候,有时会到一些函数表式之类的公式,并非全是数值类型的结构,这时,掌握matlab的符号运算能力也是很有必要的,因此,本节将为大家介绍什么是符号对象。
一、符号对象的建立
首先,符号对象是Matlab中一种特殊的数据类型,在matlab中,使用sym 或者 syms 语句可以直接定义符号变量,一般会使用sym 进行定义,因为其适用范围比syms广。
对于sym函数,sym 函数用于建立单个符号对象,其常用调用格式为:
符号对象名=sym(A)
将由A来建立符号对象。其中,A可以是一个数值常量、数值矩阵或数值表达式(不加单引号),此时符号对象为一个符号常量;A也可以是一个变量名( 加单引号 ),这时符号对象为一个符号变量 。
大家不妨先看一下下面的两段代码,初步了解一下符号对象。
>> t=sym(5);
>> t+2/3
ans =
17/3
>> sin(sym(pi/4))
ans =
2^(1/2)/2
>> sin(pi/4)
ans =
0.7071
>> a=10;
>> b=-8;
>> x=sym('a');
>> y=sym('b');
>> s=(a+b)/(a-b)
s =
0.1111
>> t=(x+y)/(x-y)
t =
(a + b)/(a - b)
>> eval(t)
ans =
0.1111
可以看出符号计算的结果是一个精确的数学表达式,而数值计算的结果是一个数值。
二、符号对象的运算
符号对象的运算规则有如下几种:
(1)四则运算:类似于数值运算,用+、-、*、/、^运算符实现,只不过其运算结果是一个符号表达式,具体例子在第一部分已经有所展示。
(2)关系运算:6 种关系运算符:<、<=、>、>=、==、~=。这六种关系运算符分别对应6个函数为:lt() 、le() 、gt() 、ge() 、eq() 、 ne()。
注:若参与运算的是符号表达式 ,其结果是一个符号关系表达式 ;若参与运算的是符号矩阵 ,其结果是由符号关系表达式组成的矩阵。
(3)逻辑运算:3种逻辑运算符:&(与)、|(或)、~(非);4个逻辑运算函数:and(a,b) 、or(a,b) 、not(a)和xor(a,b)。
(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]
(5)其他运算
提取有理分式的分子分母: [n,d]=numden(s)
提取符号表达式的系数: c=coeffs(s,x)
符号表达式化简: simplify(s)
符号多项式与多项式系数向量之间的转换:符号多项式转换为多项式系数向量: p=sym2poly(s) ;多项式系数向量转换为符号多项式: s=poly2sym§ 。
>> syms a b c x;
>> f=a*x^2+b*x+c;
>> g=coeffs(f,x)
g =
[ c, b, a]
注:如果没有明确指定自变量,MATLAB 将按以下原则确定主变量并对其进行相应运算: 寻找除i、j之外,在字母顺序上最接近x的小写字母;若表达式中有两个符号变量与x的距离相等,则ASCII码大者优先。
本节内容到此就结束了,简单介绍了一下符号对象,后续将深入讲述符号对象相关的知识,即将推出符号微积分、级数和符号方程求解内容,敬请期待!
关于MATLAB的学习:
大家可以关注我们的知乎专栏——数据可视化和数据分析中matlab的使用:
https://zhuanlan.zhihu.com/c_1131568134137692160
欢迎大家加入我们的MATLAB学习交流群:
953314432
扫码关注我们
发现更多精彩