MATLAB中qr函数用法

news2024/12/23 18:55:45

目录

语法

说明

示例

Q-Less QR 分解

矩阵的完整 QR 分解

置换 QR 分解

用精简 QR 因子求解线性系统

求解稀疏线性系统

求解矩形稀疏线性系统

提示


        qr函数的功能是对矩阵进行QR 分解。

语法

R = qr(A)
[Q,R] = qr(A)
[Q,R,P] = qr(A)
[___] = qr(A,"econ")
[Q,R,P] = qr(A,outputForm)
[___] = qr(A,0)
[C,R] = qr(S,B)
[C,R,P] = qr(S,B)
[___] = qr(S,B,"econ")
[C,R,P] = qr(S,B,outputForm)
[___] = qr(S,B,0)

说明

R = qr(A) 返回 QR 分解 A = Q*R 的上三角 R 因子。

[Q,R] = qr(A) 对 m×n 矩阵 A 执行 QR 分解,满足 A = Q*R。因子 R 是 m×n 上三角矩阵,因子 Q 是 m×m 正交矩阵。

[Q,R,P] = qr(A) 还返回一个置换矩阵 P,满足 A*P = Q*R。如果 A 为满矩阵,将选择置换矩阵,使得 abs(diag(R)) 递减。

[___] = qr(A,"econ") 使用上述任意输出参数组合进行精简分解。输出的大小取决于 m×n 矩阵 A 的大小:

        如果 m > n,则 qr 仅计算 Q 的前 n 列和 R 的前 n 行。

        如果 m <= n,则精简分解与常规分解相同。

[Q,R,P] = qr(A,outputForm) 指定置换信息 P 是以矩阵还是向量形式返回。例如,如果 outputForm 是 "vector",则 A(:,P) = Q*R。outputForm 的默认值是 "matrix",满足 A*P = Q*R。

[___] = qr(A,0) 等效于 qr(A,"econ","vector")。不建议使用此语法。改用 "econ" 选项。

[C,R] = qr(S,B) 计算 C = Q'*B 和上三角因子 R。您可以使用 C 和 R 计算稀疏线性系统 S*X = B 和 X = R\C 的最小二乘解。

[C,R,P] = qr(S,B) 还返回置换矩阵 P,选择该矩阵是为了减少 R 中的填充。您可以使用 C、R 和 P 计算稀疏线性系统 S*X = B 和 X = P*(R\C) 的最小二乘解。

[___] = qr(S,B,"econ") 使用上述任意输出参数组合进行精简分解。输出的大小取决于 m×n 稀疏矩阵 S 的大小:

        如果 m > n,则 qr 仅计算 C 和 R 的前 n 行。

        如果 m <= n,则精简分解与常规分解相同。

[C,R,P] = qr(S,B,outputForm) 指定置换信息 P 是以矩阵还是向量形式返回。例如,如果 outputForm 是 "vector",则 S*X = B 的最小二乘解是 X(P,:) = R\C。outputForm 的默认值为 "matrix",此时 S*X = B 的最小二乘解是 X = P*(R\C)。

[___] = qr(S,B,0) 等效于 qr(S,B,"econ","vector")。不建议使用此语法。改用 "econ" 选项。

示例

Q-Less QR 分解

        求 5×5 幻方矩阵的 QR 分解。指定一个输出参数以只返回上三角因子。

A = magic(5);
R = qr(A)
R = 5×5

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
         0   19.8943   12.3234    1.9439    4.0856
         0         0  -24.3985  -11.6316   -3.7415
         0         0         0  -20.0982   -9.9739
         0         0         0         0  -16.0005

矩阵的完整 QR 分解

        通过指定两个输出参数来计算幻方测试矩阵的完整 QR 分解。

A = magic(5);
[Q,R] = qr(A)
Q = 5×5

   -0.5234    0.5058    0.6735   -0.1215   -0.0441
   -0.7081   -0.6966   -0.0177    0.0815   -0.0800
   -0.1231    0.1367   -0.3558   -0.6307   -0.6646
   -0.3079    0.1911   -0.4122   -0.4247    0.7200
   -0.3387    0.4514   -0.4996    0.6328   -0.1774

R = 5×5

  -32.4808  -26.6311  -21.3973  -23.7063  -25.8615
         0   19.8943   12.3234    1.9439    4.0856
         0         0  -24.3985  -11.6316   -3.7415
         0         0         0  -20.0982   -9.9739
         0         0         0         0  -16.0005

        在计算机精度范围内验证 A=QR。

norm(A-Q*R)
ans = 1.2642e-14

置换 QR 分解

        指定三个输出参数以返回一个置换矩阵或向量,该置换矩阵或向量可减少 QR 分解的 R 因子中的填充。

        计算 west0479 稀疏矩阵的 QR 分解。指定三个输出以返回满足 AP=QR 的置换矩阵。

load west0479
A = west0479;
[Q,R,P] = qr(A);

        在计算机精度范围内验证置换矩阵 P 满足 A*P = Q*R。

norm(A*P-Q*R,"fro")
ans = 3.5411e-10

        现在指定 "vector" 选项以将 p 以置换向量形式返回。

[Q,R,p] = qr(A,"vector");

        在计算机精度范围内验证置换向量 p 满足 A(:,p) = Q*R。

norm(A(:,p) - Q*R,"fro")
ans = 3.5411e-10

        验证对于稀疏输入,在分解中使用置换矩阵或置换向量所得的R因子的非零项比使用非置换分解的少。

[Q1,R1] = qr(A);
spy(R1)

如图所示:

spy(R)

如图所示:

        结果表明置换分解产生的 R 因子的非零值明显减少。

用精简 QR 因子求解线性系统

        使用系数矩阵的精简 QR 分解来求解线性系统 Ax=b。使用 magic(10) 的前五列创建一个 10×5 系数矩阵。对于线性方程 Ax=b 的右侧,使用矩阵的行总和。在这种设置下,方程 x 的解应为由 1 组成的向量。

A = magic(10);
A = A(:,1:5)
A = 10×5

    92    99     1     8    15
    98    80     7    14    16
     4    81    88    20    22
    85    87    19    21     3
    86    93    25     2     9
    17    24    76    83    90
    23     5    82    89    91
    79     6    13    95    97
    10    12    94    96    78
    11    18   100    77    84

b = sum(A,2)
b = 10×1

   215
   215
   215
   215
   215
   290
   290
   290
   290
   290

        计算 A 的精简 QR 分解。然后用 x(p,:) = R\(Q\b) 求解线性系统 QRx=b。由于 Q 是正交矩阵,此方程与 x(p,:) = R\(Q'*b) 相同。

[Q,R,p] = qr(A,"econ","vector")
Q = 10×5

   -0.0050   -0.4775   -0.0504    0.5193    0.0399
   -0.0349   -0.5001   -0.0990   -0.1954   -0.2006
   -0.4384    0.1059   -0.4660    0.4464    0.0628
   -0.0947   -0.4151   -0.2923   -0.2542    0.5274
   -0.1246   -0.4117   -0.2812   -0.1326   -0.4130
   -0.3787    0.0209    0.2702    0.4697    0.0390
   -0.4085   -0.0017    0.2217   -0.2450   -0.2015
   -0.0648   -0.3925    0.6939    0.0669    0.1225
   -0.4683    0.0833    0.0283   -0.3038    0.5265
   -0.4982    0.0867    0.0394   -0.1822   -0.4138

R = 5×5

 -200.7112  -55.5026 -167.6040  -84.7237 -168.7997
         0 -192.1053  -40.3557 -152.4040  -39.2814
         0         0  101.3180  -89.4254   96.0172
         0         0         0   41.0248  -14.9083
         0         0         0         0   24.6386

p = 1×5

     3     1     5     2     4

x(p,:) = R\(Q\b)
x = 5×1

    1.0000
    1.0000
    1.0000
    1.0000
    1.0000

        生成 R 的对角线的半对数图,以确认置换分解产生的 R 因子的 abs(diag(R)) 是递减的。将 A 的奇异值绘制在同一个图中进行比较。实际上,R 的对角线值与 A 的奇异值具有类似的行为。因此,可以使用 R 的对角线值来衡量矩阵 A 的奇异程度。

semilogy(abs(diag(R)),"-o")
hold on
semilogy(svd(A),"r-o")
legend("Diagonal of R","Singular Values of A")

如图所示:

求解稀疏线性系统

        求解稀疏线性系统,并使用结果查看向量 b 有多少位于 S 的列空间中。创建一个随机 500×20 稀疏矩阵(密度为 10%)和一个由 1 组成的向量。使用 qr 将矩阵分解为因子 R 和 C = Q'*b

S = sprand(500,20,0.1);
b = ones(500,1);
[C,R] = qr(S,b,"econ");

        使用这些结果求解 Sx=b,解为 x = R\C。

x = R\C;

        以恒等式 为例。除以 b 的范数,会得到一个新的恒等式,表明 b 有多少位于 S 的列空间中:

        第一个项说明 b 有多少不在 S 的列空间中,而第二个项说明 b 有多少在 S 的列空间中。

t1 = norm(S*x-b)^2/norm(b)^2
t1 = 0.4000
t2 = norm(C)^2/norm(b)^2
t2 = 0.6000

求解矩形稀疏线性系统

        使用 qr 求解矩阵方程 Sx=B,其中 S 为矩形稀疏系数矩阵。

        加载 west0479 稀疏矩阵,并将前 200 列用作线性系统中的矩形系数矩阵。对于方程的右侧,使用 S 的行总和。在这种设置下,Sx=B 的解是由 1 组成的向量。

load west0479
S = west0479(:,1:200);
B = sum(S,2);

        使用 qr 以及两个输入和三个输出求解 Sx=B。线性系统的解是 x = P*(R\C)。

[C,R,P] = qr(S,B);
x = P*(R\C);

在计算机精度范围内验证 Sx−B=0。

norm(S*x-B)
ans = 9.1703e-11

        注意:要计算上三角因子 R 和置换矩阵 P,但避免计算正交矩阵 Q(这通常是对 qr 的调用中计算量最大的部分),可以将 B 指定为空矩阵:

emptyB = zeros(size(S,1),0);
[~,R,P] = qr(S,emptyB);

提示

  • ​要求解涉及相同系数矩阵的多个线性系统,请使用 decomposition 对象。

  • 对于语法 [C,R] = qr(S,B),仅当 S 不具有低秩时,X = R\C 的值才是 S*X = B 的最小二乘解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2062105.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

sklearn转换器和估计器

转换器 实例化一个转换器类 调用fit_transform() 转换器调用有以下几种形式&#xff1a; fit_transform fit transform估计器&#xff08;sklearn机器学习算法的实现&#xff09; 在sklearn中&#xff0c;估计器是一个重要的角色&#xff0c;是一类实现了算法的API 1、用于…

深入理解 C# 中的 dynamic 类型详解与示例

文章目录 1. 什么是 dynamic 类型&#xff1f;2. dynamic 的工作原理3. dynamic 类型的使用4. 使用 dynamic 的场景5. dynamic 的优缺点6. dynamic 类型的注意事项7. 总结 在 C# 编程中&#xff0c;dynamic 类型是一个非常特殊的类型&#xff0c;它在编译时并不会进行类型检查&…

TCP协议中的建立连接机制

目录 客户端与服务器间的三次握手 1、关于SYN_RCVD状态 2、关于系统调用listen的第二个参数 3、为什么服务端操作系统内核中的全连接队列不能太长&#xff1f; 4、服务端操作系统内核中可以没有全连接队列&#xff1f; 客户端与服务器间的三次握手 要想成功创建连接需要客…

【Docker深入浅出】Docker镜像

文章目录 一. Docker镜像简介二. Docker镜像详解1. 镜像和容器的关系2. 镜像通常比较小3. 拉取镜像4. 镜像命名4.1. 镜像仓库服务4.2. 官方和非官方镜像仓库4.3. 镜像的命名和标签 5. 为镜像打多个标签6. 过滤镜像内容6.1. 虚空镜像6.2. 删除虚空镜像6.3. 过滤器与格式化输出 7…

【C++题解】1004 - 编程求1*2*3*...*n

欢迎关注本专栏《C从零基础到信奥赛入门级&#xff08;CSP-J&#xff09;》 问题&#xff1a;1004 - 编程求1 * 2 * 3 * … * n 类型&#xff1a;简单循环 题目描述&#xff1a; 编程求 123⋯n 。 输入&#xff1a; 输入一行&#xff0c;只有一个整数 n(1≤n≤10)&#xf…

监狱单位如何选择适合的FTP传输替代方案?

监狱单位是我国司法体系中的重要组成部分&#xff0c;监狱对于维持社会稳定也有重要作用。监狱的正常运作中&#xff0c;少不了文件的传输。由于监狱的封闭性和特殊性&#xff0c;所有传输到监狱的文件都需要经过严格的审核和登记手续&#xff0c;以确保文件的安全性和合法性。…

Linux 进程介绍

今天给伙伴们分享一下Linux 进程介绍&#xff0c;希望看了有所收获。 我是公众号「想吃西红柿」「云原生运维实战派」作者&#xff0c;对云原生运维感兴趣&#xff0c;也保持时刻学习&#xff0c;后续会分享工作中用到的运维技术&#xff0c;在运维的路上得到支持和共同进步&am…

HBase原理和操作

目录 一、HBase在Zookeeper中的存储元数据信息集群状态信息 二、HBase的操作Web Console命令行操作 三、HBase中数据的保存过程 一、HBase在Zookeeper中的存储 元数据信息 HBase的元数据信息是HBase集群运行所必需的关键数据&#xff0c;它存储在Zookeeper的"/hbase&quo…

C++学习笔记----3、设计专业的C++程序(六)---- 重用既有代码(选择库重用指导一)

当你决定使用库、框架、同事的代码、整个应用或者你自己的代码的时候&#xff0c;要记住选择正确的代码重用的几个指导原则。 1、理解功能与限制 要花时间去熟悉代码。理解其功能与限制还是很重要的。开始阅读文档与公开接口或API。理想情况下&#xff0c;有这些去理解怎么使用…

chromedriver下载地址大全(包括124.*后)以及替换exe后仍显示版本不匹配的问题

Chrome for Testing availability CNPM Binaries Mirror 若已经更新了系统环境变量里的chromdriver路径下的exe&#xff0c;仍显示版本不匹配&#xff1a; 则在cmd界面输入 chromedriver 会跳出version verison与刚刚下载好的exe不匹配&#xff0c;则再输入&#xff1a; w…

使用 Python 绘制词云图的详细教程

如何使用python绘制词云图 词云图&#xff08;Word Cloud&#xff09;是数据可视化中常用的一种技术&#xff0c;通过将文字以不同的大小、颜色和方向排列&#xff0c;以展示文本数据中词汇的频次和重要性。对于文本分析、情感分析、关键词提取等应用&#xff0c;词云图都能够…

软件设计师教程(第5版)第3章 数据结构(更新中)

【数据结构】是指数据元素的集合及元素间的相互关系和构造方法。P99 元素之间的相互关系是数据的【逻辑结构】。P99 数据元素及元素之间关系的存储称为【存储结构】(或【物理结构】)。P99 数据结构按照【逻辑关系】的不同分为【线性结构】和【非线性结构】两大类。P99 【非…

计算机组成原理(4):指令系统/控制器

1 指令格式 【补充知识】 计算机语言的层级关系&#xff1a;机器语言 - 汇编语言 - 高级语言&#xff1b; ​ 机器语言用二进制来编写&#xff0c;用来反映硬件的语言。但是二进制编写太难了&#xff0c;就诞生了汇编语言&#xff0c;对其编程进行封装、简化&#xff1b; ​ …

C++ | Leetcode C++题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; class Solution { public:int countNumbersWithUniqueDigits(int n) {if (n 0) {return 1;}if (n 1) {return 10;}int ans 10, cur 9;for (int i 0; i < n - 1; i) {cur * 9 - i;ans cur;}return ans;} };

8.Java基础概念-方法

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 Facts speak louder than words&#xff01; 什么是方法 方法是程序…

QT 与 C++实现基于[ TCP ]的聊天室界面

TCP客户端 Widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpSocket> //客户端类 #include <QMessageBox> #include <QListWidgetItem> #include <QDebug>QT_BEGIN_NAMESPACE namespace Ui { class Widget; } …

基于YOLO V8的PCB缺陷检测识别系统(python源码+Pyqt5界面+数据集+训练代码)

数据集准备&#xff1a;收集并标注PCB缺陷的图像。模型训练&#xff1a;使用YOLO v8框架训练一个模型来识别这些缺陷。GUI开发&#xff1a;利用PyQt5创建一个用户友好的图形界面。模型部署&#xff1a;在GUI中集成训练好的模型&#xff0c;使用户能够上传PCB图像并得到缺陷检测…

数据结构-树(二叉树)-第三天

结合leetcode学习c 学习资料来源 定义 二叉树&#xff08;binary tree&#xff09;是一种非线性数据结构&#xff0c;代表“祖先”与“后代”之间的派生关系&#xff0c;体现了“一分为二”的分治逻辑。 与链表类似&#xff0c;二叉树的基本单元是节点&#xff0c;每个节点包含…

[数据集][目标检测]停车场空位检测数据集VOC+YOLO格式7959张2类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;7959 标注数量(xml文件个数)&#xff1a;7959 标注数量(txt文件个数)&#xff1a;7959 标注…

p9 镜像的基本命令

docker的常用命令 帮助命令 查看docker的版本 docker version2. 查看当前安装的docker的详细的信息 docker的系统信息包括镜像和容器的数量 docker info3. 查询帮助命令 image是你想要获取哪一个命令的帮助文档,一般百度或者人工智能就行所有命令的可选项都可以用这个–hel…