3.1算术符号操作
命令+、-、*、.*、\、.\、/、./、^、.^、’、.’
功能符号矩阵的算术操作
用法如下:
A+B、A-B 符号阵列的加法与减法。
若A与B为同型阵列时,A+B、A-B分别对对应分量进行加减;若A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的分量进行加减。
A*B 符号矩阵乘法。
A*B为线性代数中定义的矩阵乘法。按乘法定义要求必须有矩阵A的列数等于矩
阵B的行数。即:若A n*k*B k*m=(a ij)n*k.*(b ij)k*m=C n*m=(c ij)n*m,则,i=1,2,…,n;
j=1,2,…,m。或者至少有一个为标量时,方可进行乘法操作,否则将返回一出错信
息。
A.*B 符号数组的乘法。
A.*B为按参量A与B对应的分量进行相乘。A与B必须为同型阵列,或至少有一
个为标量。即:A n*m.*B n*m=(a ij)n*m.*(b ij)n*m=C n*m=(c ij)n*m,则c ij= a ij* b ij,i=1,2,…,n;
j=1,2,…,m。
A\B 矩阵的左除法。
X=A\B为符号线性方程组A*X=B的解。我们指出的是,A\B近似地等于inv(A)*B。
若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方
形矩阵),但此时要求方程组必须是相容的。
A.\B 数组的左除法。
A.\B为按对应的分量进行相除。若A与B为同型阵列时,
A n*m.\
B n*m=(a ij)n*m.\(b ij)n*m=
C n*m=(c ij)n*m,则c ij= a ij\ b ij,i=1,2,…,n;j=1,2,…,m。若若
A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应
的分量进行操作。
A/B 矩阵的右除法。
X=B/A为符号线性方程组X*A=B的解。我们指出的是,B/A粗略地等于B*inv(A)。
若X不存在或者不唯一,则产生一警告信息。矩阵A可以是矩形矩阵(即非正方
形矩阵),但此时要求方程组必须是相容的。
A./B 数组的右除法。
A./B为按对应的分量进行相除。若A与B为同型阵列时,
A n*m./
B n*m=(a ij)n*m./(b ij)n*m=
C n*m=(c ij)n*m,则c ij= a ij/b ij,i=1,2,…,n;j=1,2,…,m。若A
与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应的
分量进行操作。
A^B 矩阵的方幂。
计算矩阵A的整数B次方幂。若A为标量而B为方阵,A^B用方阵B的特征值
与特征向量计算数值。若A与B同时为矩阵,则返回一错误信息。
A.^B 数组的方幂。
A.^B为按A与B对应的分量进行方幂计算。若A与B为同型阵列时,
A n*m..^
B n*m=(a ij)n*m..^(b ij)n*m=
C n*m=(c ij)n*m,则c ij= a ij^b ij,i=1,2,…,n;j=1,2,…,m。若
A与B中至少有一个为标量,则把标量扩大为与另外一个同型的阵列,再按对应
的分量进行操作。
A' 矩阵的Hermition转置。
若A为复数矩阵,则A'为复数矩阵的共轭转置。即,若A=(a ij)=(x ij+i*y ij),则。
A.' 数组转置。
A.'为真正的矩阵转置,其没有进行共轭转置。
例3-1
>>syms a b c d e f g h;
>>A = [a b; c d];
>>B = [e f; g h];
>>C1 = A.*B
>>C2 = A.^B
>>C3 = A*B/A
>>C4 = A.*A-A^2
>>syms a11 a12 a21 a22 b1 b2;
>>A = [a11 a12; a21 a22];
>>B = [b1 b2];
>>X = B/A; % 求解符号线性方程组X*A=B的解
>>x1 = X(1)
>>x2 = X(2)
计算结果为:
C1 =
[ a*e, b*f]
[ c*g, d*h]
C2 =
[ a^e, b^f]
[ c^g, d^h]
C3 =
[ -(a*c*f+c*b*h-a*e*d-b*d*g)/(a*d-b*c), (a*b*h-b^2*g+a^2*f-b*a*e)/(a*d-b*c)]
[ -(-c*e*d+c*d*h+c^2*f-d^2*g)/(a*d-b*c), (a*d*h+a*c*f-b*c*e-b*d*g)/(a*d-b*c)] C4 =
[ -b*c, b^2-a*b-b*d]
[ c^2-a*c-d*c, -b*c]
x1 =
(-a22*b1+b2*a21)/(a12*a21-a11*a22)
x2 =
-(-a12*b1+a11*b2)/(a12*a21-a11*a22)
?????? 3.2 基本运算
命令1 合并同类项
函数collect
格式R = collect(S) %对于多项式S中的每一函数,collect(S)按缺省变量x的次数合并系
数。
R = collect(S,v) %对指定的变量v计算,操作同上。
例3-2
>>syms x y;
>>R1 = collect((exp(x)+x)*(x+2))
>>R2 = collect((x+y)*(x^2+y^2+1), y)
>>R3 = collect([(x+1)*(y+1),x+y])
计算结果为:
R1 =
x^2+(exp(x)+2)*x+2*exp(x)
R2 =
y^3+x*y^2+(x^2+1)*y+x*(x^2+1)
R3 =
[ (y+1)*x+y+1, x+y]
命令2 列空间的基
函数colspace
格式  B = colspace(A) %返回矩阵B,其列向量形成由矩阵A的列向量形成的空间的坐标基,其中A可以是符号或数值矩阵。而size(colspace(A),2)等于rank(A)。即由A
生成的空间维数等于A的秩。
例3-3
>>syms a b c
>>A = sym([1,a;2,b;3,c])
>>B = colspace(A)
计算结果为:
A =
[ 1, a]
[ 2, b]
[ 3, c]
B =
[ 1, 0]
[ 0, 1]
[ -(3*b-2*c)/(-b+2*a), (-c+3*a)/(-b+2*a)]
命令3 复合函数计算
函数compose
格式compose(f,g) %返回复合函数f[g(y)],其中f=f(x),g=g(y)。其中符号x为函数f中
由命令findsym(f) 确定的符号变量,符号y为函数g中由命令
findsym(g) 确定的符号变量。
compose(f,g,z) %返回复合函数f[g(z)],其中f=f(x),g=g(y),符号x、y为函数f、
g中由命令findsym确定的符号变量。
compose(f,g,x,z) %返回复合函数f[g(z)],而令变量x为函数f中的自变量f=f(x)。
令x=g(z),再将x=g(z)代入函数f中。
compose(f,g,x,y,z) %返回复合函数f[g(z)]。而令变量x为函数f中的自变量f=f(x),
而令变量y为函数g中的自变量g=g(y)。令x=g(y),再将x=g(y)
代入函数f=f(x)中,得f[g(y)],最后用指定的变量z代替变量y,
得f[g(z)]。
例3-4
>>syms x y z t u v;
>>f = 1/(1 + x^2*y); h = x^t; g = sin(y); p = sqrt(-y/u);
>>C1 = compose(f,g) % 令x=g=sin(y),再替换f中的变量x=findsym(f)。
matlab定义函数表达式
>>C2 = compose(f,g,t) % 令x=g=sin(t),再替换f中的变量x=findsym(f)。
>>C3 = compose(h,g,x,z) % 令x=g=sin(z),再替换h中的变量x。
>>C4 = compose(h,g,t,z) % 令t=g=sin(z),再替换h中的变量t。
>>C5 = compose(h,p,x,y,z) % 令x=p(y)=sqrt(-y/u),替换h中的变量x,再将y换成z。
>>C6 = compose(h,p,t,u,z) % 令t=p(u)=sqrt(-y/u),替换h中的变量t,再将u换成z。
计算结果为:
C1 =
1/(1+sin(y)^2*y)
C2 =
1/(1+sin(t)^2*y)
C3 =
sin(z)^t
C4 =
x^sin(z)
C5 =
((-z/u)^(1/2))^t
C6 =
x^((-y/z)^(1/2))
命令4 符号复数的共轭
函数conj
格式conj(X) %返回符号复数X的共轭复数
例3-5
X=real(X) + i*imag(X),则conj(X)=real(X) - i*imag(X)
命令5 符号复数的实数部分
函数real
格式real(Z) %返回符号复数z的实数部分
命令6 符号复数的虚数部分
函数imag
格式imag(Z) %返回符号复数z的虚数部分
命令7 余弦函数的整函数
格式Y = cosint(X) %计算余弦函数在点X处的整函数值。其中X可以是数值矩阵,或符号矩阵。余弦函数的整函数定义为:,其中为Euler常数,…i=1,2,…,size(X)。
Euler常数可以通过命令vpa('eulergamma')获得。
例3-6
>>cosint(7.2)
>>cosint([0:0.1:1])
>>syms x;
>>f = cosint(x);
>>diff(x)
计算结果为:
ans =
0.0960
ans =
Columns 1 through 7
Inf -1.7279 -1.0422 -0.6492 -0.3788 -0.1778 -0.0223 Columns 8 through 11
0.1005 0.1983 0.2761 0.3374
ans =
1
命令8 设置变量的精度
函数digits
格式digits(d) %设置当前的可变算术精度的位数为整数d位
d = digits %返回当前的可变算术精度位数给d
digits %显示当前可变算术精度的位数
说明设置有意义的十进制数值的、在Maple软件中用于做可变算术精度(命令为:vpa)计算的数字位数。其缺省值为32位数字。
例3-7
>>z = 1.0e-16 % z为一很小的数
>>x = 1.0e+2 % x为较大的数
>>digits(14)
>>y1 = vpa(x*z+1) % 大数1“吃掉”小数x*y
>>digits(15)
>>y2 = vpa(x*z+1) % 防止“去掉”小数x*y
计算结果为:
z =
1.0000e-016
x =
100
y1 =
1.0000000000000
y2 =
1.00000000000001
命令9 将符号转换为MATLAB的数值形式
函数double
格式R = double(S) %将符号对象S转换为数值对象R。若S为符号常数或表达式常数,
double返回S的双精度浮点数值表示形式;若S为每一元素是符号
常数或表达式常数的符号矩阵,double返回S每一元素的双精度浮点
数值表示的数值矩阵R。
例3-8
>>gold_ratio = double(sym('(sqrt(5)-1)/2')) % 计算黄金分割率。
>>T = sym(hilb(4))
>>R = double(T)
计算结果为:
gold_ratio =
0.6180
T =
[ 1, 1/2, 1/3, 1/4]