qr
符号矩阵的QR分解
语法
描述
___= qr (___“真正的”)
假设输入参数和中间结果为实,因此抑制对的调用腹肌
而且连词
.当你使用这个标志时,qr
假定所有符号变量都代表实数。使用此标志时,确保所有数值参数都是实数。
使用“真实”的
避免结果中出现复数共轭。
例子
R部分的QR分解
计算QR分解的R部分4
——- - - - - -4
威尔金森特征值检验矩阵。
创建4
——- - - - - -4
威尔金森特征值检验矩阵:
A = sym(威尔金森(4))
= (3/2, 1 0 0] [1, 1/2, 1,0] [0 1 1/2, 1] [0, 0, 1, 3/2]
使用带有一个输出参数的语法返回QR分解的R部分,而不返回Q部分:
R = qr(A)
R =[13 ^(1/2) / 2,(4 * 13 ^(1/2)) / 13日(2 * 13 ^(1/2))/ 13日0][0,(13 ^(1/2)* 53 ^(1/2))/ 26日(10 * 13 ^(1/2)* 53 ^(1/2))/ 689(2 * 13 ^(1/2)* 53 ^(1/2))/ 53][0,0,(53 ^ ^(1/2)* 381(1/2))/ 106(172 * 53 ^ ^(1/2)* 381(1/2))/ 20193年][0,0,0,(35 * 381 ^ (1/2))/ 762)
帕斯卡矩阵的QR分解
计算的QR分解3.
——- - - - - -3.
帕斯卡矩阵。
创建3.
——- - - - - -3.
帕斯卡矩阵:
A = sym(pascal(3))
A = [1,1,1] [1,2,3] [1,3,6]
找到问
而且R
矩阵表示的QR分解一个
:
[Q,R] = R (A)
Q =[3 ^(1/2) / 3、2 ^(1/2)/ 2,6 ^(1/2)/ 6][3 ^(1/2)/ 3 0 6 ^(1/2)/ 3][3 ^(1/2)/ 3、2 ^ (1/2)/ 2,6 ^ (1/2)/ 6]R = (3 ^ (1/2), 2 * 3 ^ (1/2), (10 * 3 ^ (1/2)) / 3] [0, 2 ^ (1/2), (5 * 2 ^ (1/2)) / 2] [0, 0, 6 ^ (1/2) / 6]
验证A = q * r
使用总
:
isAlways(A == Q*R)
Ans = 3×3逻辑阵列1 1 1 1 1 1 1 1 1 1
排列信息
使用排列有助于增加浮点矩阵QR分解的数值稳定性。的qr
函数以矩阵或向量的形式返回排列信息。
将用于可变精度算术的有效十进制位数设置为10。近似的3.
——- - - - - -3.
浮点数符号希尔伯特矩阵:
之前的设置=数字(10);A = vpa(hilb(3))
A = [1.0, 0.5, 0.3333333333] [0.5, 0.3333333333, 0.25] [0.3333333333, 0.25, 0.2]
首先,计算的QR分解一个
没有排列:
[Q,R] = R (A)
Q = [0.8571428571, -0.5016049166, 0.1170411472] [0.4285714286, 0.5684855721, -0.7022468832] [0.2857142857, 0.6520863915, 0.7022468832] r = [1.166666667, 0.6428571429,0.45] [0,0.1017143303, 0.1053370325] [0,0,0.003901371573]
计算两者的差值一个
而且Q * R
.计算出的问
而且R
矩阵并不严格满足等式A* p = q * r
因为四舍五入误差。
A - q * r
Ans = [-1.387778781e-16, -3.989863995e-16, -2.064320936e-16] [-3.469446952e-18, -8.847089727e-17, -1.084202172e-16] [-2.602085214e-18, -6.591949209e-17, -6.678685383e-17]
为了增加QR分解的数值稳定性,可以通过指定三个输出参数的语法来使用排列。对于不包含符号变量、表达式或函数的矩阵,此语法触发旋转,以便abs(诊断接头(R))
在返回矩阵中R
是减少的。
[Q,R,P] = Q (A)
Q = [0.8571428571, -0.4969293466, -0.1355261854] [0.4285714286, 0.5421047417, 0.7228063223] [0.2857142857, 0.6776309272, -0.6776309272] r = [1.166666667, 0.45, 0.6428571429] [0,0.1054092553, 0.1016446391] [0,0,0.003764616262] p = 10 00 00 01 00 01 00
检查等式A* p = q * r
一次。采用排列的QR因子分解可得到较小的舍入误差。
A* p - q * r
Ans = [-3.469446952e-18, -4.33680869e-18, -6.938893904e-18] [0, -8.67361738e-19, -1.734723476e-18] [0, -4.33680869e-19, -1.734723476e-18]
方法将排列信息作为向量返回“向量”
论点:
[Q,R,p] = qr(A,'vector')
Q = [0.8571428571, -0.4969293466, -0.1355261854] [0.4285714286, 0.5421047417, 0.7228063223] [0.2857142857, 0.6776309272, -0.6776309272] R = [1.166666667, 0.45, 0.6428571429] [0,0.1054092553, 0.1016446391] [0,0,0.003764616262] p = 13 2
验证A(:,p) = Q*R
:
A(:,p) - Q*R
Ans = [-3.469446952e-18, -4.33680869e-18, -6.938893904e-18] [0, -8.67361738e-19, -1.734723476e-18] [0, -4.33680869e-19, -1.734723476e-18]
精确的符号计算可以避免舍入错误:
A = sym(hilb(3));[Q,R] = qr(A);A - q * r
Ans = [0,0,0] [0,0,0] [0,0,0]
将有效十进制位数恢复为默认设置:
数字(previoussetting)
利用QR分解求解矩阵方程
你可以使用qr
用矩阵形式求解方程组。
假设你需要解方程组A*X = b
,在那里一个
而且b
是以下矩阵和向量:
A = sym(invhilb(5)) b = sym([1:5]')
A = [25, - 300,1050, - 1400,630] [- 300,4800, - 18900,26880, -12600] [1050, - 18900,79380, - 117600,56700] [- 1400,26880, - 117600,179200, -88200] [630, - 12600,56700, - 88200,44100] b = 12 3 44 5
使用qr
求矩阵C
而且R
,以致于C = q '* b
而且A = q * r
:
[C,R] = qr(A,b);
计算解决方案X
:
X = r \ c
X = 5 71/20 197/70 657/280 1271/630
验证X
方程组的解是A*X = b
使用总
:
isAlways(A*X == b)
Ans = 5×1逻辑阵列1 1 1 1 1 1
利用带有排列信息的QR分解求解矩阵方程
当求解包含浮点数的方程组时,使用排列矩阵或向量的QR分解。
假设你需要解方程组A*X = b
,在那里一个
而且b
是以下矩阵和向量:
之前的设置=数字(10);A = vpa([2 -3 -1;1 1 -1;0 1 -1]);B = vpa([2;0;1);
使用qr
求矩阵C
而且R
,以致于C = q '* b
而且A = q * r
:
[C,R,P] = qr(A,b)
C = -2.110579412 -0.2132007164 0.7071067812 r = [3.31662479, 0.3015113446, -1.507556723] [0,1.705605731, -1.492405014] [0,0,0.7071067812] p = 00 110 00 01 0
计算解决方案X
:
X = p *(r \ c)
X = 1.0 -0.25 0.75
或者,以向量的形式返回排列信息:
[C,R,p] = qr(A,b,'vector')
C = -2.110579412 -0.2132007164 0.7071067812 R = [3.31662479, 0.3015113446, -1.507556723] [0,1.705605731, -1.492405014] [0,0,0.7071067812] p = 23 1
在这种情况下,计算解决方案X
如下:
X(p,:) = R\C
X = 1.0 -0.25 0.75
将有效十进制位数恢复为默认设置:
数字(previoussetting)
“经济规模”分解
使用“经济学”
计算“经济规模”QR分解。
属性的前两列组成的矩阵4
——- - - - - -4
帕斯卡矩阵:
A = sym(pascal(4));A = A(:,1:2)
A = [1,1] [1,2] [1,3] [1,4]
计算这个矩阵的QR分解:
[Q,R] = R (A)
Q =[1/2, -(3 * 5 ^(1/2)) / 10(3 ^(1/2) * 10 ^(1/2)) / 10 0][1/2, 5 ^(1/2) / 10 -(2 * 3 ^(1/2) * 10 ^(1/2)) / 15、6 ^(1/2)/ 6][1/2,5 ^(1/2)/ 10 -(3 ^(1/2)* 10 ^(1/2))/ 30日6 ^(1/2)/ 3][1/2,(3 * 5 ^(1/2))/ 10(3 ^(1/2)* 10 ^(1/2))/ 15、6 ^ (1/2)/ 6]R =(2、5)[0,5 ^ (1/2)](0,0)(0,0)
现在,计算这个矩阵的“经济规模”QR分解。因为行数超过了列数,qr
只计算第一个2
列问
第一个2
行R
.
[Q,R] = qr(A,'econ')
Q = [1/2, - (3 * 5 ^ (1/2)) / 10] [1/2, 5 ^ (1/2) / 10] [1/2, 5 ^ (1/2) / 10] [1/2, (3 * 5 ^ (1/2)) / 10] R =(2、5)[0,5 ^ (1/2)
避免复共轭
使用“真实”的
标记以避免在结果中出现复杂的共轭。
创建一个矩阵,其中一个元素是变量:
syms x A = [1 2;3 x]
A = [1,2] [3, x]
计算这个矩阵的QR因子分解。默认情况下,qr
假设x
表示复数,因此,结果包含带有腹肌
函数。
[Q,R] = R (A)
Q = [10 ^ (1/2) / 10 - ((3 * x) / 10 - 9/5) / (abs (x / 10 - 3/5) ^ 2…+ abs ((3 * x) / 10 - 9/5) ^ 2) ^ (1/2)) ((3 * 10 ^ (1/2)) / 10 (x / 10 - 3/5) / (abs (x / 10 - 3/5) ^ 2…+ abs ((3 * x) / 10 - 9/5) ^ 2) ^ (1/2)] R = (10 ^ (1/2), (10 ^ (1/2) * (3 * x + 2)) / 10] [0, (abs (x / 10 - 3/5) ^ 2 + abs ((3 * x) / 10 - 9/5) ^ 2) ^ (1/2)
当你使用“真实”的
,qr
假设所有的符号变量都代表实数,并且可以返回较短的结果:
[Q,R] = qr(A,'real')
Q = [10 ^ (1/2) / 10 - ((3 * x) / 10 - 9/5) / (x ^ 2/10 - 5 (6 * x) /…+ 18/5) ^ (1/2)) ((3 * 10 ^ (1/2)) / 10 (x / 10 - 3/5) / (x ^ 2/10 - (6 * x) / 5…+ 18/5) ^ (1/2)) R = (10 ^ (1/2), (10 ^ (1/2) * (3 * x + 2)) / 10] [0, (x ^ 2/10 - (6 * x) / 5 + 18/5) ^ (1/2)
输入参数
输出参数
更多关于
提示
版本历史
在R2014a中引入