线性代数运算
符号希尔伯特矩阵
下面的例子,展示了如何执行基本的线性代数运算,是基于3 × 3希尔伯特矩阵的符号版本。
生成3 × 3希尔伯特矩阵。与格式的短
, MATLAB®打印所示的输出。
H = hilb(3)
H = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000
的计算元素H
是由小整数的比值构成的浮点数。H
是MATLAB数组类吗双
.
转换H
变成一个符号矩阵。
H = sym(H)
H =[1 1/2、1/3][1/2、1/3、1/4)(1/3、1/4、1/5)
符号线性代数运算
符号运算H
产生与无限精度希尔伯特矩阵相对应的结果,信谊(hilb (3))
,而不是它的浮点近似,hilb (3)
.
求的逆H
.
发票(H)
ans =[-36, 30][-36、192、-180](30、-180、180)
求行列式H
.
依据(H)
Ans = 1/2160
你可以使用反斜杠运算符来求解联立线性方程组。例如,求解H*x = b
.
B = [1;1;1);x = H\b
X = 3 -24 30
所有三个结果——线性系统的逆、行列式和解——都是与无限精确、有理的希尔伯特矩阵相对应的精确结果。
可变精度运算
将上述操作与使用20位精度的可变精度算法进行对比。
V = vpa(H)
V = [1.0, 0.5, 0.3333333333333333333333333333] [0.5, 0.33333333333333333333, 0.25] [0.3333333333333333, 0.25, 0.2]
各个元素表示中的小数点表示MATLAB使用的是变精度算法。每个算术运算的结果四舍五入为20位有效十进制数字。
逆矩阵,并注意误差被矩阵条件数放大,对于hilb (3)
大约是500。
电导率(V)
Ans = 524.0567775860608
计算无限精度和可变精度版本的倒数之差。
ih = inv(H
ih =[-36, 30][-36、192、-180](30、-180、180)
iv = inv(V)
4 = (9.0, -36.0, 30.0) (-36.0, 192.0, -180.0) (30.0, -180.0, 180.0)
虽然这些矩阵看起来是一样的,但是计算它们之间的差异就会发现它们不是。
DHV = ih - iv
DHV = [-5.4929962552349494034e-26, 2.4556924435168009098e-25, - 2.197198502099718236271e -24, -1.2666203129718236271e-24] [-2.1971985020939797614e-25, 1.1373733422604130529e-24, -1.0856745539758488233e-24]
解方程V*y = b
.答案看起来和解一样H*x = b
.
y = V\b
Y = 3.0 -24.0 30.0
计算之间的差值x
而且y
看看两种解之间的细微差别。金宝搏官方网站
x - y
Ans = 8.0779356694631608874e-27 -6.4623485355705287099e-26 7.1085833891275815809e-26
使用vpa
与数字(16)
提供与使用标准双精度MATLAB例程相当的精度。
奇异值的符号研究
找到一个值年代
为H (1,1)
这使得H
单数。
syms s Hs = H;Hs(1,1) = s Z = det(Hs) sol = solve(Z)
Hs =[年代,1/2、1/3][1/2、1/3、1/4)(1/3、1/4、1/5)Z = s / 240 - 1/270索尔= 8/9
将溶液替换为年代
成海关
.
Hs = subs(Hs, s, sol)
Hs =[8/9, 1/2、1/3][1/2、1/3、1/4)(1/3、1/4、1/5)
验证的行列式海关
是零。
依据(Hs)
Ans = 0
求的零空间和列空间海关
.两个空间都是非平凡的。
N = null(Hs) C = colspace(Hs)
N= 3/10 -6/5 1 c = [1,0] [0,1] [-3/10, 6/5]
检查N
在的零空间中海关
.
Hs * N
Ans = 0 0 0