一、符号对象
1、符号对象的建立
(1)sym函数:用于建立单个符号对象,调用格式:
符号对象名=sym(A)
将由A来建立符号对象。其中,A可以是一个数值常量、数值矩阵或者数值表达式(不加单引号)。此时符号对象为一个符号常量;A也可以是一个变量名(加单引号),这时符号对象为一个符号变量。
对比一下程序:
由以上例子可以看出:
- 符号计算的结果是一个精确的数学表达式。
- 数值计算的结果是一个数值。
(2)syms命令
syms命令可以一次定义多个符号变量,其一般调用格式如下:
syms 符号变量名1 符号变量名2 … 符号变量名n
例如,要同时定义四个符号变量a、b、c、d,则命令如下:
.>>syms a b c d
2、符号对象的运算
(1)四则运算
符号表达式的四则运算与数值运算一样,用+、-、*、/、^运算符实现,其运算结果依然是一个符号表达式。
(2)关系运算
- 6种关系运算符:<、<=、>、>=、==、~=
- 对应的6个函数:lt()、le()、gt()、ge()、eq()、ne()
若参与运算的是符号表达式,其结果是一个符号表达式;若参与运算的是符号矩阵,其结果是由符号关系表达式组成的矩阵。
在进行符号对象的运算前,可用assume函数对符号对象设置值域,调用格式为:
assume(condition)
asume(expr,set)
第一种格式指定变量满足条件condition,第二种格式指定表达式expr属于集合set
(3)逻辑运算
- 3种逻辑运算符:&(与)、|(或)、~(非)
- 4个逻辑运算函数:and(a,b)、or(a,b)、not(a,b)、xor(a,b)
(4)因式分解与展开运算
- factor(s):对符号表达式s分解因式。
- expand(s):对符号表达式s进行展开。
- collect(s):对符号表达式s合并同类项。
- collect(s,v):对符号表达式s按变量v合并同类项
例子:梅森素数的验证问题
梅森数是指形如2p-1的一类整数,其中p是素数。将梅森数记为Mp。如果梅森数是素数,就称为梅森素数。
验证M19、M23、M29、M31是否为梅森素数。
(5)其他运算
- 提取有理分式的分子分母:[n,d]=numden(s)
- 提取符号表达式的系数:c=coeffs(s,x)
- 符号表达式化简:simplify(s)
- 符号多项式与多项式系数向量之间的转化:
– 符号多项式转换为多项式系数向量:p=sym2poly(s)
– 多项式系数向量转换为符号多项式:s=poly2sym( p)
例子:求方程的根
注意此处不能调用sym2poly函数
(6)符号运算中变量的确定
- 如果没有明确指定自变量,MATLAB将按以下原则确定主变量并对其进行相应运算:
– 寻找除i、j之外,在字母顺序上最接近x的小写字母。
– 若表达式中有两个符号变量与x的距离相等,则ASCII码大的优先。
- symvar()函数可以用于查找一个符号表达式中的符号变量:symvar(s,n)
函数返回符号表达式s中的n个符号变量。因此,可以用symvar(s,1)查找表达式s的主变量。
3、符号矩阵
符号矩阵也是一种符号表达式,所以符号表达式运算都可以在矩阵意义下进行。注意这些函数作用于符号矩阵时,是分别作用于矩阵的每一个元素。
例如:建立符号矩阵并化简
例子:当λ取何值时,以下齐次线性方程组有非零解
分析:对于齐次线性方程组,若有非零解的充要条件是其系数矩阵的行列式等于0或者其秩小于n。
因此,当lamda=0、2或者3时,系数矩阵行列式等于0。此时方程组有非零解。
二、符号微积分
1、符号函数的极限
(1)求符号函数极限的命令为limit,其调用格式为:
limit(f,x,a)
即求函数f关于变量x在a点的极限
(2)limit函数的另一种功能是求单边极限:
limit(f,x,a,‘right’)
limit(f,x,a,‘left’)
(3)例子:求下列极限
2、符号函数的导数
(1)diff(f,x,n)
即求函数f关于变量x的n阶导数
(2)例子:求下列函数的导数
- y
- z
3、符号函数的积分
(1)不定积分
int(f,x),求函数f对变量x的不定积分
例子:
①
②
(2)定积分
int(f,x,a,b),其中a、b分别表示定积分的下限和上限。
- 当函数f关于变量x在闭区间[a,b]可积,函数返回一个定积分结果。
- 当a、b中有一个是inf时,函数返回一个广义积分。
- 当a、b中有一个符号表达式,函数返回一个符号函数。
例子
①
②
③
4、例子
(1)第一问
xi=0:50:600; yi=[4.4,4.5,4.6,4.8,4.9,5.1,5.4,5.2,5.5,5.2,4.9,4.8,4.7]; p=polyfit(xi,yi,3); plot(xi,yi,'o',xi,polyval(p,xi)); syms x y; y=poly2sym(p,x); s=int(y,x,0,600); v=s*0.6; eval(v)
求得流量v =
(2)第二问
xi=0:50:600; yi=[4.4,4.5,4.6,4.8,4.9,5.1,5.4,5.2,5.5,5.2,4.9,4.8,4.7]; p=polyfit(xi,yi,3); syms y x; y=poly2sym(p,x); yii=diff(y,x); x=50:60; k=eval(yii); all(abs(k)<1/1.5)
结果为1