数值计算-线性方程组求解(1)-LU分解-MATLAB实现
来源:互联网 发布:卓讯数据库 编辑:程序博客网 时间:2024/06/06 01:47
LU分解1
矩阵三角分解基本定理:设
A∈Rn×n ,若A的顺序主子式detAk≠0(k=1,2,⋯,n) ,则存在唯一的Doolittle 分解
其中A=LU, L 为单位下三角矩阵,U 为非奇异的上三角矩阵.
A=L×U=⎡⎣⎢⎢⎢⎢⎢⎢⎢1l21l31⋮ln11l32⋮ln21⋱⋯⋱ln,n−11⎤⎦⎥⎥⎥⎥⎥⎥⎥×⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢u11u12u22u13u23u33⋯⋯⋱⋱u1nu2n⋮un−1,nunn⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥
依照矩阵乘法规则展开上式可知:
U 的第一行求法:u1i=a1i(i=1,2,⋯,n)
L 的第一列求法:l1i=ai1u11(i=1,2,⋯,n)
一般地,在求出U 的第k−1 行和L 的第k−1 列后,第k 步计算公式如下:
uki=aki−∑j=1k−1lkjuji(i=k,k+1,⋯,n)
lik=aik−∑k−1j=1lijujkukk(i=k+1,k+2,⋯,n;k≠n)
代码实现:
% FILENAME: LU.mfunction [ L, U ] = LU( A )% This function expresses a matrix A as the product of two essentially triangular matrices, one of them a permutation of a lower triangular matrix and the other an upper triangular matrix. [N, ~] = size(A); L = zeros(N); U = zeros(N); for i = 1 : N U(1,i) = A(1, i); % Get the first row of U L(i, 1) = A(i, 1) / U(1,1); % Get the first column of L end for k = 2 : N % Get the 2~n rows of U and k-th column of L for i = 1 : N sum = 0; for j = 1 : (k-1) sum = sum+L(k, j) * U(j, i); end U(k, i) = A(k, i) - sum; % U(k, i) = round(U(k, i), 4); end for i = 1 : N sum = 0; for j = 1 : (k-1) sum = sum+L(i, j) * U(j, k); end L(i, k) = (A(i, k) - sum) / U(k ,k); % L(i, k) = round(L(i, k), 4); end endend
在求出
% FILENAME: LU_Run.m% Your A and b go hereA=[2 1 5; 4 1 12; -2 -4 5];b=[11 27 12]';[L, U] = LU(A);[N,~] = size(A);% computing LY = bY = zeros(N, 1);Y(1) = b(1);for k = 2 : N sum = 0; for j = 1 : (k-1) sum = sum + L(k, j) * Y(j); end Y(k) = b(k) - sum;end% computing UX = YX = zeros(N ,1);X(N) = Y(N) / U(N, N);disp(X);
测试结果展示如下:
>> AA = 2 1 5 4 1 12 -2 -4 5>> [L,U]=LU(A)L = 1 0 0 2 1 0 -1 3 1U = 2 1 5 0 -1 2 0 0 4>> L*U % L*U == Aans = 2 1 5 4 1 12 -2 -4 5>> bb = 11 27 12>> LU_Runx = 1 -1 2>> A*X % A*X == bans = 11 27 12
- 此文章中除代码外,均参考于《数值计算方法(第三版)》 ↩
阅读全文
0 0
- 数值计算-线性方程组求解(1)-LU分解-MATLAB实现
- 矩阵的LU分解求解线性方程组(C++实现)
- 数值计算线性方程组求解实现
- matlab 用LU分解求解线性方程组——代码记录
- 求解线性方程组之LU分解
- 数值计算-线性方程组求解(2)-追赶法解三对角矩阵-MATLAB实现
- LU分解(Doolittle分解)解线性方程组(Matlab版)
- 解线性方程组的直接方法(1):杜利特尔LU分解MATLAB实例
- 数值计算-线性方程组求解(0)
- LU分解(matlab实现)
- 数值分析 追赶法求解三对角线性方程组 MATLAB实现
- 数值分析 jacobi迭代法求解线性方程组 MATLAB程序实现
- 数值分析 Gauss-Seidel迭代法求解线性方程组 MATLAB程序实现
- 求解线性方程组(SVD,QR,Gauss,LU)
- matlab实现矩阵LU分解
- 解线性方程组之LU分解(Doolittle 分解)
- LU分解法求解线性方程组
- 数值计算方法(高斯消元以及LU分解)
- swift做一个表示分数的方法
- 电磁铁实验
- 7-3 Goldbach's Conjecture (哥德巴赫猜想)(30 分)
- 购物车的简单实现
- okhttp应用拦截器
- 数值计算-线性方程组求解(1)-LU分解-MATLAB实现
- E
- ubuntu14.04安装cuda8.0后,编译安装opencv2.4.13.4
- Ubuntu屏幕分辨率设置
- bzoj 5059: 前鬼后鬼的守护
- IMHuanXin环信
- 利用python进入数据分析之数据规整化:清理、转换、合并、重塑(二)
- 写爬虫时遇到的   处理
- 10月英语