主要内容

qr

符号矩阵的QR分解

描述

例子

R= qr (一个的R部分QR分解A = q * r.在这里,一个是一个——- - - - - -n矩阵,R是一个——- - - - - -n上三角矩阵,和是一个——- - - - - -酉矩阵。

例子

R] = qr(一个返回一个上三角矩阵R和一个酉矩阵,以致于A = q * r

例子

RP] = qr(一个返回一个上三角矩阵R,一个酉矩阵,和排列矩阵P,以致于A* p = q * r.如果所有的元素一个可以用浮点数近似,那么这种语法选择列排列Pabs(诊断接头(R))是减少的。否则,它会返回P =眼睛(n)

例子

CR] = qr(一个B返回一个上三角矩阵R和一个矩阵C,以致于C = q '* b而且A = q * r.在这里,一个而且B必须有相同的行数。

C而且R表示矩阵方程的解A* x = b作为X = r \ c

例子

CRP] = qr(一个B返回一个上三角矩阵R,一个矩阵C,以致于C = q '* b,和排列矩阵P,以致于A* p = q * r.如果所有的元素一个可以用浮点数近似,那么这种语法选择排列矩阵Pabs(诊断接头(R))是减少的。否则,它会返回P =眼睛(n).在这里,一个而且B必须有相同的行数。

CR,P表示矩阵方程的解A* x = b作为X = p *(r \ c)

例子

Rp] = qr(一个“向量”)以向量形式返回排列信息p,以致于A(:,p) = Q*R

例子

CRp] = qr(一个B“向量”)以向量形式返回排列信息p

CR,p表示矩阵方程的解A* x = b作为X(p,:) = R\C

例子

___= qr (___“经济学”)返回“经济规模”分解。如果一个是一个——- - - - - -n矩阵M > n,然后qr只计算第一个n第一个nR.为M <= n的语法“经济学”是否等同于对应的语法没有“经济学”

当你使用“经济学”qr始终以向量的形式返回排列信息p

你可以使用0而不是“经济学”.例如,[Q,R] = Q (A,0)等于[Q,R] = qr(A,'econ')

例子

___= 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第一个2R

[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)

输入参数

全部折叠

输入矩阵,指定为——- - - - - -n符号矩阵。

输入,指定为符号向量或矩阵。行数B必须和里面的行数相同一个

输出参数

全部折叠

R是QR分解的一部分,返回为an——- - - - - -n上三角符号矩阵。

QR分解的Q部分,返回为an——- - - - - -酉符号矩阵。

排列信息,作为双精度值的矩阵返回,使A* p = q * r

排列信息,作为双精度值的向量返回,如A(:,p) = Q*R

矩阵表示矩阵方程的解A* x = b,作为符号矩阵返回,这样C = q '* b

更多关于

全部折叠

矩阵的QR分解

QR因式分解表示——- - - - - -n矩阵一个作为A = q * r.在这里,是一个——- - - - - -酉矩阵,和R是一个——- - - - - -n上三角矩阵。如果一个那么,是实数吗是一个正交矩阵。

提示

  • 上三角矩阵R满足以下条件:R = chol(A'*A)

  • 的参数“经济学”而且0只影响返回的矩阵的形状。

  • 调用qr对于不是符号对象的数值矩阵(不是由信谊信谊,或vpa)调用MATLAB®qr函数。

  • 如果你使用“矩阵”而不是“向量”,然后qr返回排列矩阵,就像默认情况一样。如果你使用“矩阵”而且“经济学”,然后qr抛出错误。

  • 涉及许多符号变量的矩阵计算可能很慢。为了提高计算速度,可以通过用给定值代替某些变量来减少符号变量的数量。

版本历史

在R2014a中引入

另请参阅

|||