高斯消元法求解线性方程,包括把增广矩阵转换为三角矩阵形式的过程,消去阶段工作

步骤是把矩阵A分解成为下三角L和上三角U的乘积。这种计算L,U的过程称为LU分解法。

lu实现对矩阵的分解。

[L,U] = lu(A)

%%将矩阵A分解的上三角矩阵保存在U当中,将一个“心理学上的”下三角矩阵(例如一个下三角矩阵和置换矩阵的乘积)保存在L中,满足A=L*U,注意A不必须是方阵。

[L,U,P] = lu(A)

%%返回三个矩阵,下三角矩阵L、上三角矩阵U和一个置换矩阵P,满足P*A=L*U。

[L,U,p] = lu(A,'vector')

%%将使用向量而不是矩阵的方式返回置换信息,p是一个行向量,满足A(p,:) = L*U,如果使用[L,U,P] = lu(A,'matrix')则返回的P是向量,这也是默认的形式。

[L1,U1]=lu(x)
[L2,U2,P]=lu(x)
[L3,U3,P,Q] = lu(X)
MATLAB中[L1,U1]=lu(x)的结果:L是下三角的置换矩阵即L1=p*L2,U是上三角阵。Matlab中LU分解采用高斯消元法,结果是不唯一的,只要[L1,U1]=lu(x)满足L1*U1=x, [L2,U2,P]=lu(x)满足L2*U2=p*x,[L3,U3,P,Q] = lu(X)满足 L3*U3= P*X*Q就行了

例方程组:

x1+0.2*(x2)+0.5*(x3)=1

0.2*(x1)+0.4*(x2)+x3=2

0.5*(x1)+0.1*(x2)+0.6*(x3)=1.5

根据LU分解有LUx=b,记Y=L^(-1)b,则x=U^(-1)Y为方程组Ax=b解。

>> a=[1 0.2 0.5;0.2 0.4 1; 0.5 0.1 0.6];
>> b=[1 2 1.5];
>> [L,U]=lu(a)

L =

1.0000         0         0
    0.2000    1.0000         0
    0.5000         0    1.0000

U =

1.0000    0.2000    0.5000
         0    0.3600    0.9000
         0         0    0.3500

>> y=inv(L)*b'

y =

1.0000
    1.8000
    1.0000

或者

>> y=L^(-1)*b'

y =

1.0000
    1.8000
    1.0000

>> x=U^(-1)*y

x =

0
   -2.1429
    2.8571

>> x=inv(U)*y

x =

0
   -2.1429
    2.8571

下面就是lu函数的厂商代码,相信这段程序,对大家编写线性方程组直接解法的诸多算法都有启发作用。

 function [L,U,x]=lux(A,b)
%LU 分解法解线性方程组(列主元LU分解)
[n,n]=size(A);
p=eye(n);%p记录了选择主元时候所进行的行变换
for k=:n-
[r,m]=max(abs(A(k:n,k))); %选列主元
m=m+k-;
if(A(m,k)~=)
if(m~=k)
A([k m],:)=A([m k],:);
p([k m])=p([m k]);
end
for i=k+:n
A(i,k)=A(i,k)/A(k,k);
j=k+:n; A(i,j)=A(i,j)-A(i,k)*A(k,j);
end
end
end
L=tril(A,-)+eye(n,n);
U=triu(A);
%解下三角矩阵 Ly=b
newb=p*b;
y=zeros(n,);
for k=:n
j=:k-;
y(k)=(newb(k)-L(k,j)*y(j))/L(k,k);
end
%解上三角方程组 Ux=y
x=zeros(n,);
for k=n:-:
j=k+:n;
x(k)=(y(k)-U(k,j)*x(j))/U(k,k);
end

MATLAB LU函数的更多相关文章

  1. MyEclipse调用Matlab打包函数

    本文部分内容参考了http://www.360doc.com/content/15/1103/16/1180274_510463048.shtml 一.检查Java环境 对于已经装上JAVA环境的计算 ...

  2. Matlab中函数定义方法

    Matlab自定义函数的六种方法 n1.函数文件+调用函数(命令)文件:需单独定义一个自定义函数的M文件: n2.函数文件+子函数:定义一个具有多个自定义函数的M文件: n3.Inline:无需M文件 ...

  3. Matlab图像处理函数:regionprops

    本篇文章为转载,仅为方便学术讨论所用,不用于商业用途.由于时间较久,原作者以及原始链接暂时无法找到,如有侵权以及其他任何事宜欢迎跟我联系,如有侵扰,在此提前表示歉意.----------------- ...

  4. 向量和矩阵的范数及MATLAB调用函数

    范数就是长度的一种推广形式,数学语言叫一种度量.比如有一个平面向量,有两个分量来描述:横坐标和纵坐标.向量的二范数就是欧几里得意义下的这个向量的长度.还有一些诸如极大值范数,就是横坐标或者纵坐标的最大 ...

  5. matlab中函数fscanf

    matlab中函数fscanf matlab中函数fscanf在文件读取方面的实例如下: 从文件中有格式地读数据 fscanf 语法1:[a,count]=fscanf(fid,format,size ...

  6. 用MATLAB画函数的曲线

    用MATLAB画函数曲线 2013年8月11日 命令funtool 这是单变量函数分析的交互界面,比较方便,特别适用于y=f(x)型,即y与x分开的函数形式.见下图

  7. matlab 子函数的使用

    本文参考了该篇博客:http://www.cnblogs.com/MarshallL/p/4048846.html 对其进行学习,为我所用吧. 一. 在matlab的函数定义中,如果函数如果函数较长或 ...

  8. matlab 常用函数

    Matlab常用函数 Matlab的内部常数  eps   浮点相对精度  pi  圆周率  exp  自然对数的底数e  i 或j  虚数单位  Inf或 inf  无穷大 Matlab概率密度函数 ...

  9. matlab——sparse函数和full函数

    转载:http://www.cnblogs.com/lihuidashen/p/3435883.html matlab——sparse函数和full函数(稀疏矩阵和非稀疏矩阵转换)   函数功能:生成 ...

随机推荐

  1. Channel 详解

    java.nio.channels.FileChannel封装了一个文件通道和一个FileChannel对象,这个FileChannel对象提供了读写文件的连接. 1.接口 2.通道操作 a.所有通道 ...

  2. temorrow read

    http://blog.csdn.net/yimiyangguang1314/article/details/6268177 http://www.cnblogs.com/killmyday/arch ...

  3. 进程隐藏与进程保护(SSDT Hook 实现)(一)

    读了这篇文章终于明白大致怎么回事了 文章目录:                   1. 引子 – Hook 技术: 2. SSDT 简介: 3. 应用层调用 Win32 API 的完整执行流程: 4 ...

  4. volatile,可变参数,memset,内联函数,宽字符窄字符,国际化,条件编译,预处理命令,define中##和#的区别,文件缓冲,位域

    1.volatile: 要求参数修改每次都从内存中的读取.这种情况要比普通运行的变量需要的时间长. 当设置了成按照C99标准运行之后,使用volatile变量之后的程序运行的时间将比register的 ...

  5. 恒天云IaaS基础设施标准

    系统总体要求: 支持多种操作系统:支持Windows,Redhat.Suse等Linux操作系统: 支持多种虚拟化系统:支持多种计算资源虚拟化方式: 网络接口:支持千兆及万兆以太网技术: 供电:支持直 ...

  6. android-serialport-api and libusb for android

    libusb for android: Even if you get it compiled, Android is probably not going to let you access the ...

  7. Asp.Net底层解析

    写的很好的一篇文章,但由于不能转载 所以把链接发在这里,以方便自己以后看 http://blog.csdn.net/mlcactus/article/details/8564347 http://ji ...

  8. Xcode8 创建NSManageObject subclass方法

    更新iOS8之后发现coredata也做了一些改变,创建本地的时候一脸懵逼,最后发现: 喜极而泣不能自已,(-.-!)

  9. struts2—拦截器

    在Struts2中,如果用户没有指定执行哪些拦截器,struts2有一个默认执行的栈,defaultStack; 一旦如果用户有指定执行哪些拦截器,默认的拦截器栈就不会被执行 拦截器配置举例(stru ...

  10. Android Studio 编译不通过,报错“找不到org.apache.http

    如果你使用的 target sdk是23请在build.gradle加入 android{ useLibrary ‘org.apache.http.legacy‘ }