MATLAB之LU分解法(十)
LU分解
1.LU分解的基础知识
矩阵的LU分解又称为矩阵的三角分解,即将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U,即A=LUA=LUA=LU,其在方程组的求解和求矩阵的逆有许多应用。
LU分解的求解命令是lu,基本使用格式如下:
调用格式 | 说明 |
---|---|
[L,U]=lu(A) | 将一个矩阵分解为一个下三角L和一个上三角U |
[L,U,P]=lu(A) | 对A进行分解,其中L为单位下三角矩阵,U为上三角矩阵,P为置换矩阵,满足LU=PA |
例1,对矩阵A=[1234567823417856]A=\left[\begin{array}{llll}1 & 2 & 3 & 4 \\ 5 & 6 & 7 & 8 \\ 2 & 3 & 4 & 1 \\ 7 & 8 & 5 & 6\end{array}\right]A=⎣⎢⎢⎡1527263837454816⎦⎥⎥⎤进行分解。
A=[1,2,3,4;5,6,7,8;2,3,4,1;7,8,5,6];
[L1,U1]=lu(A)L1 = 0.1429 1.0000 0 0
0.7143 0.3333 1.0000 0
0.2857 0.8333 0.2500 1.0000
1.0000 0 0 0U1 = 7.0000 8.0000 5.0000 6.0000
0 0.8571 2.2857 3.1429
0 0 2.6667 2.6667
0 0 0 -4.0000[L2,U2,P]=lu(A)L2 = 1.0000 0 0 0
0.1429 1.0000 0 0
0.7143 0.3333 1.0000 0
0.2857 0.8333 0.2500 1.0000U2 = 7.0000 8.0000 5.0000 6.0000
0 0.8571 2.2857 3.1429
0 0 2.6667 2.6667
0 0 0 -4.0000P =0 0 0 11 0 0 00 1 0 00 0 1 0
从上面两者的计算结果比较分析可以得出:使用第一种方法得到的上三角矩阵并不是严格的上三角矩阵,这样对于以后的分析和计算显然是不利的,所以在工程计算或者其他计算中都采用第二种方法。
2.LU分解法求解方程组
LU分解法求解的基本思路就是:将系数矩阵A进行分解,得到LU=PALU=PALU=PA,然后利用Ly=PbLy=PbLy=Pb,最后再解Ux=yUx=yUx=y,从而求解方程组的解。
例2:利用LU分解法求解方程组{x1+x2−3x3−x4=13x1−x2−3x3+4x4=4x1+5x2−9x3−8x4=0\left\{\begin{array}{l}x_{1}+x_{2}-3 x_{3}-x_{4}=1 \\ 3 x_{1}-x_{2}-3 x_{3}+4 x_{4}=4 \\ x_{1}+5 x_{2}-9 x_{3}-8 x_{4}=0\end{array}\right.⎩⎨⎧x1+x2−3x3−x4=13x1−x2−3x3+4x4=4x1+5x2−9x3−8x4=0 的解。
A = [1,1,-3,-1;3,-1,-3,4;1,5,-9,-8];
b=[1;4;0]b =140[L,U,P]=lu(A)L =1.0000 0 00.3333 1.0000 00.3333 0.2500 1.0000U =3.0000 -1.0000 -3.0000 4.00000 5.3333 -8.0000 -9.33330 0 0 0.0000P =0 1 00 0 11 0 0y = L'*P*by =4.33330.25001.0000>> x = U'*yx =13.0000-3.0000-15.000015.0000
利用函数实现如下:
function x= solvebyLU(A,b)
%此函数用于利用LU分解法解方程组
flag=isexist(A,b); %判断方程组是否有解
if flag==0disp('方程组无解');x = [];return;
elser = rank(A);[m,n]=size(A);[L,U,P]=lu(A);b = P*b;%解Ly=by(1) = b(1);if m>1for i=2:my(i)=b(i)-L(i,1:i-1)*y(1:i-1)';endendy = y';%解Ux=y得方程组的解x0(r)=y(r)/U(r,r);if r>1for i=r-1:-1:1x0(i)=(y(i)-U(i,i+1:r)*x0(i+1:r)')/U(i,i);endendx0 = x0';if flag==1x=x0;return;elseformat rat;Z = null(A,'r');[mz,nz]=size(Z);x0(r+1:n)=0;for i=1:nzt=sym(char([107 48+i]));k(i)=t;endx=x0;for i=1:nzx = x+k(i)*Z(:,i);endendend
运行结果:
A = [1,1,-3,-1;3,-1,-3,4;1,5,-9,-8];b = [1;4;0];
x = solvebyLU(A,b)x =(3*k1)/2 - (3*k2)/4 + 5/4(3*k1)/2 + (7*k2)/4 - 1/4k1k2
MATLAB之LU分解法(十)相关推荐
- Matlab实现 LU分解法解线性方程组(全选主元列选主元)
选主元LU分解 实验内容:列选主元LU分解和全选主元LU分解求解线性方程组 计算方法: 全选主元消元法 1.1 初始化 根据参数A.b,记录下矩阵.右端项的尺寸n: 以得到的尺寸n初始化解向量x: 同 ...
- Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)
1.要求 考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给定解(例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU ...
- 数值分析3-解线性方程组的高斯消去法、LU分解法及列主元消去法的matlab程序和调试方法
对于形如Ax=b的线性方程组,在线性代数中是通过求逆的方式求解的,即x=A-1b,而在数值分析中,解线性方程组的方法是通过直接法或者迭代法来实现的,今天写的三个程序都属于直接法,分别为高斯消去法.LU ...
- matlab lu解线性方程,MATLAB报告用LU分解法求解线性方程组.doc
MATLAB报告用LU分解法求解线性方程组 <MATLAB>期末大报告 报告内容:用LU分解法求解线性方程组 学院(系): 专 业: 班 级: 学 号: 学生姓名: 2014 年 6 月 ...
- LU分解法 | matlab
% LU分解法 % M为输入的增广矩阵 % precision为输入的精度要求,如不输入或输入有误,则默认为10位if nargin == 2trydigits(precision);catchdis ...
- matlab 电力系统分析 毕设,基于MATLAB的P-Q分解法电力系统潮流计算毕业设计
基于MATLAB的P-Q分解法电力系统潮流计算毕业设计 摘 要 电力系统潮流计算是研究电力系统稳定运行情况的一种重要的计算,在电力系统规划设计和现有电力系统运行方式的研究中,都需要利用它来定量地分析比 ...
- 紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法
紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法 标签:计算方法实验 /* 紧凑存储的杜利特尔分解法Doolittle:如果初始矩阵不要求保留的话,可以紧凑存储.因为每 ...
- Doolittle分解法(LU分解法)的Python实现
在解一般的非奇异矩阵线性方程组的时候,或者在迭代改善算法中,需要使用LU分解法. 对于一个一般的非奇异矩阵A=(a11, a12,-,a1n,a21,-ann),可分解为一个下三角矩阵L和一个上三角矩 ...
- 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)
Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...
- 计算机数值方法——LU分解法(C++\Python代码实现)
算法流程 首先,LU分解法就是在高斯消元法的基础上,把矩阵AAA分解为一个上三角矩阵UUU与一个单位下三角矩阵LLL的乘积. 懒得敲LaTeX公式了,书上由具体的推导过程,这里我们重点介绍代码吧 主要 ...
最新文章
- Linux学习整理(一)
- 内置付费 inapp purchase and Error Domain=SKErrorDomain Code=0 “Cannot connect to iTunes Store”错误...
- 矩阵从左上到右下的最短距离问题
- 单链表按顺序插入节点
- linux小工具(2)终端记录器script命令
- CSS设置文字的划线
- 非关系型数据库mongodb的打开与连接
- CSS样式:覆盖规则
- 数据驱动开发_开发数据驱动的股票市场投资方法
- 调用线程必须为sta_Java手写分布式系统远程调用RPC框架
- opencv视频读写和视频等间隔采样
- 1 echo();2 print();3 die();4 printf();5 sprintf();6 print_r();7 var_dump(); 区别
- 分形:MandelBrot和Julia
- 提供《疯狂的程序员》下载地址
- OSChina 周日乱弹 ——不穿泳衣,我都不好意思上厕所
- 银河麒麟系统安装字体
- java什么是工厂_java – 创建工厂的什么名字是什么? (FooFactoryFactory听起来很傻的imo)...
- PGM:概率图模型Graphical Model
- C. Inna and Dima
- 函数模板和类模板详解
热门文章
- 一纬度横直线等于多公里_【归纳整理】高中地理必修一知识点总结
- 关于OriginPRO/Origin画图消锯齿以及平滑点与点之间的连接
- java 加密 —— 对称加密、非对称加密、消息摘要
- 工业镜头视场、倍率、焦距之间的关系
- 一份简单、直接、高效的中文求职信模板,一般是直接写在邮件正文中。
- 七步学习法 —— 如何高效学习一项技能
- 视觉跟踪的进展(Advances in Visual Tracking ) - 要饭的
- 面试总结(1)---7.28
- CocosCreator Shader Editor 2D/3D 特效编辑器
- 文件外链PHP,php如何去除外链