【matlab学习笔记】线性方程组求解方法
线性方程组求解方法
- 2.1 求逆法
- 实现方式
- 例子
- 2.2 分解法
- LU分解(Doolittle分解)
- 实现方法
- 例子
- QR分解法
- 实现方法
- 例子
- Cholesky 分解法
- 实现方法
- 例子
- 奇异值分解法
- 实现方法
- 例子
- Hessenberg 分解
- 实现方法
- 例子
- Schur 分解
- 实现方法
- 例子
- 2.3 迭代法
- 逐次迭代法
- 里查森迭代法
- 迭代公式
- 实现方法
- 例子
在自然科学和工程技术中,很多问题可以归结为求解线性方程组。采用MATLAB,不仅可以利用其提供的相关函数直接解决一些简单的线性方程组,而且可以通过简洁的编程来解决一些复杂的线性方程组。
- 个人学习笔记
- 所有例子在.m文件中可实现,不可实现会添加说明
2.1 求逆法
MATLAB 中求解线性方程最直接的方法是矩阵求逆法,它适用于系数矩阵的数据无规律且系数矩阵的阶数比较小的情况。
实现方式
1. 直接用左除法
2. 使用求逆函数inv()
例子
A = [1 2 3;-1 3 7;9 0 3];
b = [1 4 7]';
x1 = A\b %左除
x2 = inv(A)*b %求逆函数
2.2 分解法
矩阵分解法是指根据一定的原理用某种算法将系数矩阵分解成若干个矩阵的代数运算,常用的分解是乘积分解,而分解后的新矩阵一般是某种特殊矩阵。
常用的分解有LU分解、QR 分解、Cholesky 分解、Schur 分解、Hessenberg 分解和奇异分解等。
LU分解(Doolittle分解)
它是将矩阵分解为一个单位下三角矩阵与上三角矩阵的乘积。只要矩阵非奇异,这种分解总是可以进行的。
实现方法
1. lu函数
2. [L,U] = lu(A) %上三角矩阵U和下三角矩阵L,且有X = LU
3. [L,U,P] = lu(A) %上三角矩阵U和下三角矩阵L,置换矩阵P,且有PA = LU
例子
A = [1.5 3 -0.8 4;2 0 9 10;-7 4.8 -0.6 1;14 12.3 -4 5];
b = [4 0 1 -2]';
[L,U] = lu(A);
x = U\(L\b)
QR分解法
矩阵的QR分解就是把矩阵分解为一个正交矩阵和一个上三角矩阵的乘积。
实现方法
1. [Q,R] = qr(X) %产生一个正交矩阵Q和一个上三角阵R,使得X=QR ;
2. [Q,R,E] = qr(X) %产生一个正交矩阵Q,一个上三角阵R以及一个置换矩阵E,使得XE=QR
例子
A = [1 0.5 0.3333 0.25;0.5 0.3333 0.25 0.2; 0.3333 0.25 0.2 0.1667;0.25 0.2 0.1667 0.1429];
b = [1 2 2 1]';
[Q,R] = qr(A);
x = R\(Q\b)
Cholesky 分解法
- 系数矩阵AAA正定且对称
- 它能分解为以下的形式:A=RTRA=R^TRA=RTR 。其中RRR 为上三角矩阵,RTR^TRT 为RRR 的转置,是下三角矩阵,这种分解称为CholeskyCholeskyCholesky分解。
- 如果XXX对称正定,则p=0p=0p=0;否则, ppp 为一正整数。如果XXX 满秩, RRR 是为p−1p-1p−1阶的上三角矩阵,且有RTR=X(1:(p−1),1:(p−1))R^TR=X(1:(p-1),1:(p-1))RTR=X(1:(p−1),1:(p−1));实现分解后,方程组的解写成x=R(R’\b) 的形式。
实现方法
1.R=chol(X) %对X进行Cholesky 分解,使得$X=R^TR$;
2.[R,p]=chol(X) %对X进行Cholesky 分解,使得$X=R^TR$;
例子
A=[9 -36 30;-36 192 -180;30 -180 180];
b=ones(3,1);
R=chol (A)
X=R\(R'\b)
注意:
%矩阵A正定但不对称时,程序同样能跑出来,但这时我们验证一下发现“R'R不等于A”
A=[9 -36 30;-36 192 -180;31 -180 180];
b=ones(3,1);
R=chol (A) %输出R矩阵
R' %输出矩阵R的转置
A %输出矩阵A
B = R'*R %验证矩阵B是否等于矩阵A?看结果
X=R\(R'\b) %输出解向量
奇异值分解法
- 奇异值分解很有用,将系数矩阵进行奇异值分解以后,AAA 的奇异值都在SSS的对角线上,这样就可以粗略估计AAA的条件数,看看AAA是否是病态矩阵,以此决定相应的求解方法;
- 如果系数矩阵对称,那么奇异值分解后的UUU和VVV都是正交矩阵,而SSS是对角矩阵,这样求解方程就十分方便。
实现方法
[U,S,V] =svd(A) %奇异值分解,使得A=U*S*V'
例子
A=[ 1.0000 0.5000 0.3333 0.2500 0.2000;0.5000 0.3333 0.2500 0.2000 0.1667; 0.3333 0.2500 0.2000 0.1667 0.1429; 0.2500 0.2000 0.1667 0.1429 0.1250;0.2000 0.1667 0.1429 0.1250 0.1111];
[U,S,V]=svd(A)
b=[1 0 1 0 1]';
x1=V*inv(S)*U*b %函数求逆
x2=V/S*U*b %左除求逆
Hessenberg 分解
- Hessenberg 矩阵指的是第一子对角线以下的元素为0的矩阵。
- Hessenberg 分解法分解后产生正交矩阵和Hessenberg 矩阵,正交矩阵的逆就是其转置; 如果系数矩阵对称的话,产生的Hessenberg矩阵就是三对角矩阵,这种矩阵的求逆速度也很快,因此用这种方法求解线性方程组很快。
实现方法
[P,H] = hess(A) %Hessenberg分解,使得A = P*H*P',其中P为酉矩阵
例子
A=[1 1 1 1;1 2 3 4;1 3 6 10;1 4 10 20];
b = [1 4 7 -2]';
[P,H] = hess(A)
x = P/H*P'*b
Schur 分解
实现方法
- Schur 矩阵是上三角阵,且其对角元素为被分解矩阵的特征值。
- Schur 分解法在分解后产生正交矩阵和Schur 矩阵,如果系数矩阵对称的话,产生的Schur 矩阵就是对角阵,显然对角阵的逆矩阵非常容易得到,因此用这种方法求解线性方程组也很快。
[U,T] = schur(A) %Schur分解,使得A=U*T*U',其中U为正交矩阶,T为Schur矩阵
例子
tic %计时器-头部
A=[1 1 1 1;1 2 3 4;1 3 6 10;1 4 10 20];
b = [1 4 7 -2]';
[U,T] = schur(A)
x = U/T*U'*b
toc %计时器-结尾
2.3 迭代法
- 适用于阶数很高或零元素多的矩阵!
- 迭代法是将求一组解转换为求一个近似解序列的过程,并用最终的近似解来逼近真实解。
- 迭代法需要考虑以下3个重要的问题。
(1) 迭代的初始值
(2) 迭代算法
(3) 迭代的收敛性
逐次迭代法
里查森迭代法
迭代公式
xk+1=(I−A)xk+bx _ { k + 1 } = ( I - A ) x _ { k } + bxk+1=(I−A)xk+b
实现方法
[x,n] =richason(A, b, xO, eps, M) %用里查森迭代法求线性方程组Ax=b的解。
function [x,n]=richason(A,b,x0,eps,M)
% 采用里查森迭代法求线性方程组Ax=b的解
% 线性方程组的系数矩阵: A
% 线性方程组中的常数向量: b
% 迭代初始向章: x0
% 解的精度控制: eps
% 迭代步数控制: M
% 线性方程组的解: x
% 求出所需精度的解实际的迭代步数: n
if(nargin == 3)eps = 1.0e-6 ; % eps 表示迭代精度M = 200; % M 表示迭代步数的限制值
elseif(nargin == 4)M = 200;
end
I =eye(size(A));
x1 = x0;
x=(I-A)*x0+b;
n =1;
%迭代过程
while(norm(x-x1)>eps)x1 = x;x = (I-A)*x1+b;n = n + 1;if(n >= M)disp('warnning:迭代次数太多,可能不收敛!');return;end
end
例子
A = [1.017 -0.0092 -0.0095;-0.0092 0.9903 0.0136;-0.0095 0.0136 0.9898];
b = [1 0 1]';
x0 = [0 0 0]';
[x,n] = richason(A,b,x0)
相关文章:
【matlab学习笔记】线性方程组求解方法
线性方程组求解方法2.1 求逆法实现方式例子2.2 分解法LU分解(Doolittle分解)实现方法例子QR分解法实现方法例子Cholesky 分解法实现方法例子奇异值分解法实现方法例子Hessenberg 分解实现方法例子Schur 分解实现方法例子2.3 迭代法逐次迭代法里查森迭代法…...
Python带你一键下载到最新章节,不付费也能看
前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 完整源码、素材皆可点击文章下方名片获取此处跳转 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests 发送请求/第三方模块 模块安装:win R 输入cmd 输入安装命令 pip install 模块名 如果…...
【sentinel】熔断降级规则详解及源码分析
概述 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方API等。例如,支付的时候,可能需要远程调用银联…...
ffplay源码分析-main函数入口分析
ffplay源码分析-main函数入口分析 基于ffmpeg6.0源码分析。 流程 使用ffplay播放视频文件,会触发main函数的调用。main函数中会进行以下操作: 从命令行中解析日志级别、日志是否需要落文件、是否要输出banner信息。banner信息包含版权、库的版本。注…...
C++三种继承方式
C继承的一般语法为:class 派生类名:[继承方式] 基类名{派生类新增加的成员};继承方式限定了基类成员在派生类中的访问权限,包括 public(公有的)、private(私有的)和 protected&#…...
【Android -- 软技能】《软技能:代码之外的生存指南》之好书推荐(一)
前言 这是一本由美国的一个软件开发人员写的,但书中除了有 Java 、C# 几个单词外,没有一行代码。 因为这本书讲的是代码之外的东西。 文章目录结构: 1. 职业 从业心态:说白了就是要有责任心,把每份工作要当成是自…...
Nginx可视化管理工具 - Nginx Proxy Manager
一、介绍 nginx-proxy-manager 是一个反向代理管理系统,它基于Nginx,具有漂亮干净的 Web UI。还可以获得受信任的 SSL 证书,并通过单独的配置、自定义和入侵保护来管理多个代理。 其官网地址如下: https://nginxproxymanager.com/ 二、安装 第一步:192.168.1.108服务…...
https是如何保证安全的
在学习http与https的区别的时候,我们通常从以下几点出发:http是超文本传输协议,是明文传输,有安全风险,https在TCP和http网络层之间加入了SSL/TLS安全协议,使得报文能够加密传输http连接简单,三…...
ubuntu下使用GCC开发单片机的过程
以下是一个简单的单片机C程序示例,实现的功能是控制LED灯的闪烁: #include <reg52.h> // 导入单片机的寄存器定义void main() {while(1) { // 无限循环P1 = 0x00; // P1口输出低电平delay(1000); // 延时1秒P1 = 0xff; // P1口输出高电平delay(1000); // 延时1秒…...
人工智能能否取代软硬件开发工程师
版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 人工智能发展趋势 随着AI技术的不断发展,它正在改变我们的生活方式、商业模式和工作方式。人工智能技术的发展一直处于快速变化和持续创新的状态,以下…...
BPI-R3开发板 - uboot编译
一. 获取源码 https://github.com/mtk-openwrt/u-boot 二. 编译步骤 编译环境为ubuntu 18.04。交叉编译工具链我用的是openwrt编译生成的工具链,并设置到环境变量,如下: export PATH$PATH:/root/mt8976/BPI-R3-OPENWRT-V21.02.3-main/staging…...
优秀程序员的5个特征,你在第几层?
每个人程序员都对未来的职业发展有着憧憬和规划,要做架构师、要做技术总监、要做CTO。但现实总是复杂的,日复一日的工作与生活总能让人一次又一次地陷入迷茫。大部分原因就是对职业发展轨迹和自我能力提升的一般规律缺乏认识,做事找不到方向或…...
JAVA Session会话 Thymeleaf - 视图模板技术配置步骤
JAVAWebSession会话会话跟踪技术session保存作用域Thymeleaf - 视图模板技术配置过程Session会话 HTTP是无状态的:服务器无法区分这两个请求是同一个客户端发过来的,还是不同的客户端发过来的 现实问题:第一次请求是添加商品到购物车&#x…...
Linux编译cpprestsdk库
本文用的Linux系统为Ubuntu22.04,自带GCC11.3.0。 依赖 ①编译需要boost库,本文用的库版本为boost-1.82.0.beta1.tar.gz。 ②编译需要openssl库,这里使用的版本为openssl-1.1.1s.tar.gz。 ③编译需要cmake库,本文使用的是cmake-3…...
算法的时间复杂度和空间复杂度
目录 1 如何衡量一个算法的好坏 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见代码举例 2.3.1 Func2 O(N) 2.3.2 Func3 O(MN) 2.3.3 Func4 O(1) 2.3.4 Func5 strchr O(N) 2.3.5 Func6 冒泡排序 O(N^2) 2.3.6 Func7 二分…...
基本认识vue3
一、基本搭建 项目搭建 使用 最新的 Vue3 TS Vite项目 执行命令 (本项目采用如下方式) npm create vitelatest my-vite-app --template vue-ts或者 运行项目 npm install npm run dev项目搭建初始化目录 新搭建的项目可能会遇到个问题…...
HTTP/HTTPS协议认识
写在前面 这个博客我们要要讨论的是协议,主要是应用层.今天我们将正式认识HTTP和HTTPS,也要认识序列化和反序列化,内容比较多,但是不难 再谈协议 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层,我们要完成下面三个步骤. sock的使用 定制…...
【VScode】远程连接Linux
目录标题1. 安装扩展插件2. 在Linux上操作3. 确定Linux的IP地址4. 远程连接到Linux5. 实现免密码登录使用 VScode 远程编程与调试的时有会用到插件 Remote Development,使用这个插件可以在很多情况下代替 vim 直接远程修改与调试服务器上的代码,同时具备…...
QT/C++调试技巧:内存泄漏检测
文章目录内存泄漏方案一方案二:CRT调试定位代码位置方法1方法2其它问题方案三:使用vs诊断工具方案四:使用工具VLD(Visio Leak Detector)方案五Cppcheck内存泄漏 内存泄漏:指的是在程序里动态申请的内存在使…...
【贪心算法】一文让你学会“贪心”(贪心算法详解及经典案例)
文章目录前言如何理解“贪心算法”?贪心算法实战分析1.分糖果2.钱币找零3.区间覆盖内容小结最后说一句🐱🐉作者简介:大家好,我是黑洞晓威,一名大二学生,希望和大家一起进步。 👿本…...
【字体图标iconfont】字体图标部署流程+项目源码分析
今日,心情甚是烦闷,原由… 公司项目需要将字体图标做一些细微的调整,我一人分析了许久,看不大懂源码的逻辑,产生了自我怀疑。深吸一口气,重新鼓起勇气,调整心境,一下子豁然开朗&…...
2023最全的Web自动化测试介绍(建议收藏)
做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。 有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识&…...
jvm_根节点枚举安全点安全区域
1、可达性分析可以分成两个阶段 根节点枚举 从根节点开始遍历对象图 前文我们在介绍垃圾收集算法的时候,简单提到过:标记-整理算法(Mark-Compact)中的移动存活对象操作是一种极为负重的操作,必须全程暂停用户应用程序才能进行,像这…...
fabric(token-erc-20链码部署)
确保自己已经安装了fabric。没有安装的可以参考我之前的教程fabric中bootstrap.sh到底帮助我们干了什么?(手动执行相关操作安装fabric2.4)_./bootstrap.sh_小小小小关同学的博客-CSDN博客小伙伴们在跟着官方示例来安装fabric的时候都是相当烦…...
C语言基础——流程控制语句
文章目录一、流程控制语句 -- 控制程序的运行过程 9条(一)、条件选择流程控制语句:if语句if……else……语句if……else if……语句switch语句(二)、循环流程控制语句:for语句while语句do while……语句co…...
WinForm | C# 界面弹出消息通知栏 (仿Win10系统通知栏)
ApeForms 弹出消息通知栏功能 文章目录ApeForms 弹出消息通知栏功能前言全局API通知栏起始方向通知排列方向通知栏之间的间隔距离无鼠标悬停时的不透明度消息通知窗体的默认大小示例代码文本消息提示栏文本消息提示栏(带选项)图文消息提示栏图文消息提示…...
刷题之最长公共/上升子序列问题
目录 一、最长公共子序列问题(LCS) 1、题目 2、题目解读 编辑 3、代码 四、多写一题 五、应用 二、最长上升子序列问题(LIS) 1、题目 2、题目解读 3、代码 四、多写一道 Ⅰ、题目解读 Ⅱ、代码 一、最长公共子序列问题&…...
【数据结构】千字深入浅出讲解栈(附原码 | 超详解)
🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. 🎁欢迎各位→点赞👍 收藏⭐️ 留言📝 📣系列专栏:C语言实现数据结构 💬总结:希望你看完…...
自动驾驶V2X
1 SoC MDM9250 2 设备网络节点 mhi_swip0 rmnet_mhi0 3 网络协议栈log打印控制 include/linux/netdevice.h ethtool -s eth0 msglvl [level] ethtool -s eth0 msglvl 0x6001 4 URLs MHI initial design review https://lore.kernel.org/lkml/001601d52148$bd852840$388f78c0$c…...
零基础自学网络安全/渗透测试有哪些常见误区?
一、网络安全学习的误区 1.不要试图以编程为基础去学习网络安全 不要以编程为基础再开始学习网络安全,一般来说,学习编程不但学习周期长,且过渡到网络安全用到编程的用到的编程的关键点不多。一般人如果想要把编程学好再开始学习网络安全往…...
用dw做网站首页步骤/百度的网址怎么写
这个网站没有反扒,使用的是Python 自带urllib ,解析库数xpath,生成器,数据保存到mongodb。代码 from urllib import request from pymongo import MongoClientfrom lxml import etreeclinet MongoClient(hostlocalhost, port27017) class R…...
张家界市住房和城乡建设局网站/天津百度推广
Memory Type 块存储器器IP core可以配置生成5种存储器:Single-port RAM(单端口RAM), Simple Dual-port RAM(简单双端口RAM), True Dual-port RAM(真双端口RAM), Single-port ROM(单端口ROM), and Dual-port ROM(双端口ROM); Selectable Memory Algorit…...
2008 iis7添加网站/网络推广网络营销和网站推广的区别
官方文档地址:https://github.com/axios/axios axios 是一个基于 Promise 的HTTP库,可以用在浏览器和 node.js 中 特性: • 从浏览器发起 XMLHttpRequests 请求 • 从 node.js 发起 http 请求 • 支持 Promise API • 拦截请求和响应 • 转换…...
网络团队/电脑优化是什么意思
有一些网友看了前两天的《Linux下应该知道的技巧》希望我能教教他们用awk和sed,所以,出现了这篇文章。我估计这些80后的年轻朋友可能对awk/sed这类上古神器有点陌生了,所以需要我这个老家伙来炒炒冷饭。况且,AWK是贝尔实验室1977年…...
wordpress管理员信息在哪/武汉网络关键词排名
什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。用我的话来理解,就是spring boot其实不…...
建设厅网站贵州人事考试信息网/新航道培训机构怎么样
很多人用个人邮箱的时候不喜欢在网页端登陆,喜欢使用客户端,但是新手对于客户端设置又是一脸蒙圈,常常自己将客户端乱设一通,结果发现无法发信也无法收信。今天就跟大家说一说客户端应该怎么设置 什么是IMAP、POP和SMTP 收信是一…...