作者:凯鲁嘎吉 - 博客园
http://www.cnblogs.com/kailugaji/

三、实验程序

五、解答(按如下顺序提交电子版)

1.(程序)

(1)LU分解源程序:

function [l,u]=lu12(a,n)
for k=1:n-1
for i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)*a(k,j);
end
end
end
l=eye(n);
u=zeros(n,n);
for k=1:n
for i=k:n
u(k,i)=a(k,i);
end
end
for k=1:n
for j=1:k-1
l(k,j)=a(k,j);
end
end

(2)直接三角分解法源程序:

function [a,l,u,y,x]=direct_triangle(a,b,n)
%a为N*N矩阵,b为n*1列向量
for k=1:n-1
for i=k+1:n
a(i,k)=a(i,k)/a(k,k);
for j=k+1:n
a(i,j)=a(i,j)-a(i,k)*a(k,j);
end
end
end
l=eye(n);
u=zeros(n,n);
for k=1:n
for i=k:n
u(k,i)=a(k,i);
end
end
for k=1:n
for j=1:k-1
l(k,j)=a(k,j);
end
end
y=ones(n,1);
x=ones(n,1);
y(1,1)=b(1,1);
for i=2:n
s=0;
for k=1:i-1
s=s+l(i,k)*y(k,1);
end
y(i,1)=b(i,1)-s;
end x(n,1)=y(n,1)/u(n,n);
for j=n-1:-1:1
s1=0;
for k1=j+1:n
s1=s1+u(j,k1)*x(k1,1);
end
x(j,1)=(y(j,1)-s1)/u(j,j);
end

2.(运算结果)

(1)求一个4阶矩阵的LU分解。

>> a=[10,7,8,7;7,5,6,5;8,6,10,9;7,5,9,10];
>> [l,u]=lu12(a,4) l = 1.0000 0 0 0
0.7000 1.0000 0 0
0.8000 4.0000 1.0000 0
0.7000 1.0000 1.5000 1.0000 u = 10.0000 7.0000 8.0000 7.0000
0 0.1000 0.4000 0.1000
0 0 2.0000 3.0000
0 0 0 0.5000

>>  a=[10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10];b=[32 23 33 31]';
>> [a,l,u,y,x]=direct_triangle(a,b,4) a = 10.0000 7.0000 8.0000 7.0000
0.7000 0.1000 0.4000 0.1000
0.8000 4.0000 2.0000 3.0000
0.7000 1.0000 1.5000 0.5000 l = 1.0000 0 0 0
0.7000 1.0000 0 0
0.8000 4.0000 1.0000 0
0.7000 1.0000 1.5000 1.0000 u = 10.0000 7.0000 8.0000 7.0000
0 0.1000 0.4000 0.1000
0 0 2.0000 3.0000
0 0 0 0.5000 y = 32.0000
0.6000
5.0000
0.5000 x = 1.0000
1.0000
1.0000
1.0000

比如,希尔伯特矩阵就是一个病态矩阵,在方程组问题求解之前,可以先判断其条件数是否较大。

源程序:hilbert.m:

function [A,cond1]=hilbert(k)
format rat
A=zeros(k,k);
for m=1:k
for n=1:k
A(m,n)=1/(m+n-1);
end
end
cond1=cond(A,inf);

运行结果:

>> [A,cond1]=hilbert(3)

A =

       1              1/2            1/3
1/2 1/3 1/4
1/3 1/4 1/5 cond1 = 748
>> [A,cond1]=hilbert(4) A = 1 1/2 1/3 1/4
1/2 1/3 1/4 1/5
1/3 1/4 1/5 1/6
1/4 1/5 1/6 1/7 cond1 = 28375
>> [A,cond1]=hilbert(5) A = 1 1/2 1/3 1/4 1/5
1/2 1/3 1/4 1/5 1/6
1/3 1/4 1/5 1/6 1/7
1/4 1/5 1/6 1/7 1/8
1/5 1/6 1/7 1/8 1/9 cond1 = 943656

从结果可见希尔伯特矩阵是一个病态矩阵,用一般的直接法和迭代法会有较大的误差,甚至严重失真。

MATLAB矩阵的LU分解及在解线性方程组中的应用的更多相关文章

  1. 线性代数笔记10——矩阵的LU分解

    在线性代数中, LU分解(LU Decomposition)是矩阵分解的一种,可以将一个矩阵分解为一个单位下三角矩阵和一个上三角矩阵的乘积(有时是它们和一个置换矩阵的乘积).LU分解主要应用在数值分析 ...

  2. 矩阵LU分解的MATLAB与C++实现

    一:矩阵LU分解 矩阵的LU分解目的是将一个非奇异矩阵\(A\)分解成\(A=LU\)的形式,其中\(L\)是一个主对角线为\(1\)的下三角矩阵:\(U\)是一个上三角矩阵. 比如\(A= \beg ...

  3. 矩阵LU分解分块算法实现

    本文主要描述实现LU分解算法过程中遇到的问题及解决方案,并给出了全部源代码. 1. 什么是LU分解? 矩阵的LU分解源于线性方程组的高斯消元过程.对于一个含有N个变量的N个线性方程组,总可以用高斯消去 ...

  4. 矩阵分解---QR正交分解,LU分解

    相关概念: 正交矩阵:若一个方阵其行与列皆为正交的单位向量,则该矩阵为正交矩阵,且该矩阵的转置和其逆相等.两个向量正交的意思是两个向量的内积为 0 正定矩阵:如果对于所有的非零实系数向量x ,都有 x ...

  5. 矩阵LU分解

    有如下方程组 ,当矩阵 A 各列向量互不相关时, 方程组有位移解,可以使用消元法求解,具体如下: 使用消元矩阵将 A 变成上三角矩阵 , , 使用消元矩阵作用于向量 b,得到向量 c,, , Ax=b ...

  6. matlab 求解线性方程组之LU分解

    线性代数中的一个核心思想就是矩阵分解,既将一个复杂的矩阵分解为更简单的矩阵的乘积.常见的有如下分解: LU分解:A=LU,A是m×n矩阵,L是m×m下三角矩阵,U是m×n阶梯形矩阵 QR分解: 秩分解 ...

  7. LU分解(2)

    接着上次LU分解的讲解,这次给出使用不同的计算LU分解的方法,这种方法称为基于GaxPy的计算方法.这里需要了解lapapck中的一些函数.lapack中有一个函数名为gaxpy,所对应的矩阵计算公式 ...

  8. 矩阵LU分解程序实现(Matlab)

    n=4;%确定需要LU分解的矩阵维数 %A=zeros(n,n); L=eye(n,n);P=eye(n,n);U=zeros(n,n);%初始化矩阵 tempU=zeros(1,n);tempP=z ...

  9. 计算方法 -- 解线性方程组直接法(LU分解、列主元高斯消元、追赶法)

    #include <iostream> #include <cstdio> #include <algorithm> #include <cstdlib> ...

随机推荐

  1. CentOS部署pyspider

    0x00 环境 阿里云ECS云服务器 CPU:1核 内存:2G 操作系统:Centos 7.3 x64 地域:华北 2(华北 2 可用区 A) 系统盘:40G 0x01 安装依赖 yum instal ...

  2. 对python pickle的理解

    python 提供了pickle模块,能将对象进行序列化,将对象以文件形式存放在磁盘. 几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化.但是序列化后的数据可读性很差. pic ...

  3. thinkphp通用控制器

    <?php namespace 目录\Controller; class TypeController extends Controller { public function add() { ...

  4. Python机器学习笔记:不得不了解的机器学习面试知识点(1)

    机器学习岗位的面试中通常会对一些常见的机器学习算法和思想进行提问,在平时的学习过程中可能对算法的理论,注意点,区别会有一定的认识,但是这些知识可能不系统,在回答的时候未必能在短时间内答出自己的认识,因 ...

  5. EntityFramework附加实体

    //0.0创建修改的 实体对象 Models.BlogArticle model = new BlogArticle(); model.AId = 12; model.ATitle = "新 ...

  6. MySQL之库、表操作

    一.库操作 创建库 create database 库名(charset utf8 对库的编码进行设置,不写就用默认值) 库名可以由字母.数字.下划线.特殊字符,要区分大小写,唯一性,不能使用关键字, ...

  7. spring cloud zuul 传递 header

    最近在做一个项目时,发现在网关中调用和在子系统中调用request.getRequestURL()所得到的请求url是不一样的,在网关中得到的是通过域名访问的地址,而在子系统中得到的是网关发起的子系统 ...

  8. vue-cli+webpack项目,修改项目名称

    使用vue-cli+webpack创建的项目,修改文件名称或者更改文件的位置,运营时会报错,是因为npm项目,在安装依赖(node_nodules)时,会记录当前的文件路径,当修改之后就无法正常启动. ...

  9. .net Framework 源代码 · ScrollViewer

    本文是分析 .net Framework 源代码的系列,主要告诉大家微软做 ScrollViewer 的思路,分析很简单 看完本文,可以学会如何写一个 ScrollViewer ,如何定义一个 ISc ...

  10. 将不确定变为确定~老赵写的CodeTimer是代码性能测试的利器

    首先,非常感谢赵老大的CodeTimer,它让我们更好的了解到代码执行的性能,从而可以让我们从性能的角度来考虑问题,有些东西可能我们认为是这样的,但经理测试并非如何,这正应了我之前的那名话:“机器最能 ...