符号运算
x3 x 1 x3 6 x 2 6 x 1 y 2 2 x( x 1) x ( x 2) x ( x 1)(x 2)
例3.4.2 求出 的分子、分母
f
1
x
3
6
x
2
12
x
8
>>syms x >>f=1/(x^3)+6/x/x+12/x+8 >>[n,d]=numden(f) f= 1/x^3+6/x^2+12/x+8 n= 1+6*x+12*x^2+8*x^3 d =x^3
syms x; y=((x+3)/(x*(x+1)))+((x-1)/(x^2*(x+2))); [n,d]=numden(y)%提取有理多项式的分子、分母多项式。其中y
是符号表达式,n为符号表达式y的分子,d为符号表达式y的分母。
n =x^3+6*x^2+6*x-1 d =x^2*(x+1)*(x+2) 即:
进行符号运算时,首先要创建(即 定义)基本的符号对象, 它可以是常 数、变量和表达式。然后利用这些基 本符号对象构成新的表达式,进而完 成所需的符号运算。
符号对象的创建使用函数 sym ()和 syms ()来完成, 它们的调用格式如下:
S = sym ( A )将数值 A转换成符号对象 S ,A 是数字(值)
2. 符号运算中的运算符号和基本函数 2.1. 基本运算符 (1) 运算符号“+”、“-”、“*”、“\”、“/”、 “^”分别实现矩阵的加法、减法、乘法、左除、右除与求幂运 算。
(2) 运算符号“.*”、“.\”、“./”、“.^”分别实现
元素对元素的数组相乘、左除、右除与求幂运算。 (3) 运算符号“′”实现矩阵的Hermition转置或复数矩阵 的共轭转置; 运算符号“.′”实现数组转置或复数矩阵的非共 轭转置。
>> y=sqrt(x^5)
%
y= (x^5)^(1/2)
>> z=log10(x)
%求以10
z= log(x)/log(10)
【例2.2】 矩阵代数运算演示。求矩阵A的行列式值、逆和特 征值。 【解】 在MATLAB syms a11 a12 a21 a22; %定义符号变量a11,a12, a21, a22 A=[a11,a12;a21,a22] %生成矩阵A 运行结果为: A =[ a11, a12] [ a21, a22] >>DA=det(A) %求矩阵A的行列式 >>IA=inv(A) %求矩阵A的逆矩阵 DA = a11*a22-a12*a21
y2=x(e-t)2+(2x2+1)e-t+(x2+1)x
例3.1.2 合并多项式 的同类项。
( x x 1)( x 1)
3 2
x=sym('x'); f=(x^3+x+1)*(x^2+1); g=collect(f)
g= 1+x^5+2*x^3+x^2+x
3.2. 表达式展开
例3.2.1 已知数学表达式y(x)=cos(3arccosx),试将其展开。 【解】 在MATLAB syms x; y=cos(3*acos(x)); y1=expand(y) %展开
【解】 在MATLAB syms x t; y=sym('(x^2+x*exp(-t)+1)*(x+exp(-t))'); y1=collect(y) %默认合并x同幂项系数 y2=collect(y,‘exp(-t)’) %合并y变量里的exp(-t)同幂项系数 运行结果为: y1 =x^3+2*exp(-t)*x^2+(1+exp(-t)^2)*x+exp(-t) y2 =x*exp(-t)^2+(2*x^2+1)*exp(-t)+(x^2+1)*x 即: y1=x3+2e-tx2+[1+(e-t)2]x+e-t,
补充知识: 符 号 运 算
1
在MATLAB的数值计算中,数值表达式所引用的变量必须事
先被赋值, 否则无法计算。因此,前面介绍的有关数值运算, 其运算变量都是被赋值的数值变量。而在MATLAB的符号运算中, 运算变量则是符号变量,所出现的数字也作为符号来处理。实 际上,符号数学是对字符串进行的运算。
进行符号运算时,首先要创建(即定义)基本的符号对象,
log2()及log10()等。
2.5. 涉及复数的共轭函数 conj ()、求实部的函数 real ()、
求虚部的函数 imag ()和求绝对值的函数 abs (),在符号与
数值计算中的使用方法相同。 2.6. 矩阵代数运算 在符号运算中, MATLAB 提供的常用矩阵代数函数有 diag ()、inv()、det()、rank()、poly()、expm()及
>> syms a b c x >> f = sym('a*x^2 + b*x + c') f= a*x^2 + b*x + c >> g=f^2+4*f-2 g= (a*x^2+b*x+c)^2+4*a*x^2+4*b*x+4*c-2
【例1.2】 字符表达式转换为符号变量演示。 【解】 在MATLAB >> y=sym('2*sin(x)*cos(x)') 运行结果为: y= 2*sin(x)*cos(x) >> y=simple(y) %将已有的y符号表达式化成最简形式 %将字符表达式转换为符号变量
2.2. 在符号对象的比较中,没有“大于”、“大于等于”、
“小于”、“小于等于”的概念,而只有是否“等于”的概
念。 运算符号“==”和“~=”分别对它两边的对象进行 “相等”、“不相等”的比较。当事实为“真”时,比较结 果用1表示; 当事实为“假”时,比较结果用0表示。 需要特别指出的是,MATLAB的符号对象无逻辑运算功 能。
3.3. 因式分解 例 3.3.1 已知数学表达式 y(x)=x4-5x3+5x2+5x-6, 试对其 进行因式分解。
【解】 在MATLAB
syms x; y=x^4-5*x^3+5*x^2+5*x-6 y1=factor(y) %把符号表达式y转换为多个因式相乘的形式,各多项式的系数均为有理数。 y =x^4-5*x^3+5*x^2+5*x-6 y1 =(x-1)*(x-2)*(x-3)*(x+1) 即: y=x4-5x3+5x2+5x-6=(x-1)(x-2)(x-3)(x+1)
例3.2.3 证明正弦函数和余弦函数的两角和、差 公式。
syms t s expand([cos(t+s) sin(t-s);sin(t+s) cos(t-s)])
ans = [ cos(t)*cos(s)-sin(t)*sin(s), sin(t)*cos(s)-cos(t)*sin(s)] [ sin(t)*cos(s)+cos(t)*sin(s), cos(t)*cos(s)+sin(t)*sin(s)]
y= sin(fai1-fai2)
说明:
由本例可看出,使用函数syms创建符号对 象较函数sym()简单。
但注意,使用syms arg1 arg2 …格式定义 符号变量时,变量名之间只能用空格符隔 离,而不能采用逗号或分号,如写成 syms fai1,fai2就是错误的,它不能把fai2定义为 符号变量。
【例1.1】 创建符号变量和符号表达式演示。 【解】 在MATLAB >> y=sym('x'); 运行结果为: y= x >> f=sym('x^3+x^2+4*x+4') %定义变量f,它代表符号表达式x3+x2+4x+4 %定义变量y,它代表字符x
f= x^3+x^2+4*x+4
使用syms函数定义符号变量和符号表达式
例3.3.2 分解因式
x a
3
3
>>syms x a >>f=factor(x^3-a^3) f= -(a-x)*(a^2+a*x+x^2)
3.4. 表达式通分
例3.4.1 已知数学表达式
试对其进行通分。
x3 x 1 , y ( x) 2 x( x 1) x ( x 2)
【解】 在MATLAB命令窗口中输入:
S=sym(′x′)
将字符串x转换成符号对象S
S=sym(A, flag)将数值Ams(‘arg1’, ‘arg2’, …,参数) syms arg1 arg2 …参数 功能:创建多个符号变量。
syms arg1 arg2 … arg1=sym(′arg1′),arg2=sym(′arg2′)
2.3. 除函数 atan2 ()仅能用于数值计算外,其余的三角函数
(如 sin ())、双曲函数(如 cosh ())及其反函数(如
asin ()、 acosh ()),无论在数值计算还是符号运算中, 其使用方法都相同。
2.4.
在数值计算与符号运算中,指数函数与对数函数的使用方
法完全相同,如函数sqrt()、exp()、expm()、log()、
它可以是常数、变量和表达式。然后利用这些基本符号对象构 成新的表达式,进而完成所需的符号运算。