Doolittle分解法(LU分解法)的Python实现
在解一般的非奇异矩阵线性方程组的时候,或者在迭代改善算法中,需要使用LU分解法。
对于一个一般的非奇异矩阵A=(a11, a12,…,a1n,a21,…ann),可分解为一个下三角矩阵L和一个上三角矩阵U。其中L的主对角线元素都是1.
希望得到一个M,最后在需要的时候将M拆分为L和U
M=[[u11 u12 u13 ...... u1nl21 u22 u23 ...... u2nl31 l32 u33 ...... u3n...... ]]
L=[[1 0 0......l21 1 0......l31 l32 1............ ]]
U=[[u11 u12 u13......0 u22 u23......0 0 u33............ ]]
doolittle分解法分两步进行
首先,根据已知A直接做出一个基矩阵M,其中,矩阵的第一行就是A的第一行,矩阵的第一列为A的第一列除以矩阵M的第一列的第一个元。即
u1j=a1j j=1,2,…,n
li1=ai1/u11, i=1,2,…,n
接着,从第二行开始,从第二列到最后一列一次求解M的元素,列数大于等于行数则属于U,否则属于L,有公式
ukj=akj-sum(lkmumj)(m∈(1, k-1)), j=1,2,…,n
lik=(aik-sum(limumk)(m∈(1, k-1)))/ukk, i=1,2,…,n
可以发现lik与ukj公式的区别只有lik多除以了一个ukk即这一列的对角线元
下面给出一个例子
A=[[1 2 -32 -1 33 -2 2]]
将A进行doolittle分解
代码如下
# -*- coding: utf-8 -*-
"""
Created on Tue Feb 12 11:27:19 2019@author: 鹰皇
"""#Doolittle分解法
import numpy as np
A=[[1.0,2.0,-3.0],[2.0,-1.0,3.0],[3.0,-2.0,2.0]]def get_base(A):base=list(np.zeros((len(A),len(A))))D=[]for i in base:D.append(list(i))return Ddef U_initiate(A):u=get_base(A)for i in range(0,len(A)):u[0][i]=A[0][i]return udef L_initiate(A, u):l=get_base(A)for i in range(0,len(A)):l[i][i]=1.0if i==0:passelse:l[i][0]=A[i][0]/u[0][0]return ldef get_u(A,L,U,k,j):sum1=0.0for m in range(0,k):sum1=sum1+L[k][m]*U[m][j]U[k][j]=A[k][j]-sum1return Udef get_l(A,L,U,i,k):sum1=0.0for m in range(0,k):sum1=sum1+L[i][m]*U[m][k]L[i][k]=(A[i][k]-sum1)/U[k][k]return Ldef main(A):U=U_initiate(A)L=L_initiate(A,U)n=1while n<len(A):t=1while t<len(A):if t>=n:U=get_u(A,L,U,n,t)else:L=get_l(A,L,U,n,t)t=t+1print tn=n+1return U,Lprint main(A)
算得L,U,解答完毕
Doolittle分解法(LU分解法)的Python实现相关推荐
- 紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法
紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法 标签:计算方法实验 /* 紧凑存储的杜利特尔分解法Doolittle:如果初始矩阵不要求保留的话,可以紧凑存储.因为每 ...
- 计算机数值方法——LU分解法(C++\Python代码实现)
算法流程 首先,LU分解法就是在高斯消元法的基础上,把矩阵AAA分解为一个上三角矩阵UUU与一个单位下三角矩阵LLL的乘积. 懒得敲LaTeX公式了,书上由具体的推导过程,这里我们重点介绍代码吧 主要 ...
- Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)
1.要求 考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给定解(例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU ...
- Python02 雅克比迭代法 Gauss-Seidel迭代法 列选主元法 LU分解法(附代码)
1. 实验结果 (1)在定义的矩阵类中设置需要求解的方程为: (2)在 test.py 中选择雅克比迭代法求解: 输入:最大容许迭代次数和精度要求: 输出:根据谱半径判断方法是否收敛,收敛时得到满足精 ...
- 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)
Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...
- LU分解法 | matlab
% LU分解法 % M为输入的增广矩阵 % precision为输入的精度要求,如不输入或输入有误,则默认为10位if nargin == 2trydigits(precision);catchdis ...
- 解线性方程组的直接方法:LU分解法及其C语言算法实现
在上一篇博客里面,笔者介绍了解线性方程组的列主元Guass消元法,这篇将介绍LU分解法及其算法实现. 什么是LU分解? 对于一个线性方程组Ax=b,其中A是非奇异系数矩阵,b是线性方程组右端项,在列主 ...
- 数值分析3-解线性方程组的高斯消去法、LU分解法及列主元消去法的matlab程序和调试方法
对于形如Ax=b的线性方程组,在线性代数中是通过求逆的方式求解的,即x=A-1b,而在数值分析中,解线性方程组的方法是通过直接法或者迭代法来实现的,今天写的三个程序都属于直接法,分别为高斯消去法.LU ...
- matlab lu解线性方程,MATLAB报告用LU分解法求解线性方程组.doc
MATLAB报告用LU分解法求解线性方程组 <MATLAB>期末大报告 报告内容:用LU分解法求解线性方程组 学院(系): 专 业: 班 级: 学 号: 学生姓名: 2014 年 6 月 ...
最新文章
- PE文件结构详解(三)
- 图解易经:一部终于可以读懂的易经 祖行 扫描版 陕西师范大学出版社
- iOS RunLoop简介
- リアルタイム3Dニャンニャン 汉化补丁
- 利用ionic3进行上一行和左一行不动,中间移动的功能
- 2015c语言9月答案,2015年9月计算机二级C语言预测题答案
- Cocos2d-x动作CCAction
- 【备忘】加入L2范数正则化后的正规方程求解参数推导过程
- 70道经典Android面试题加答案--重要知识点几乎都涉及到了
- java三国策略手游_策略三国下载-策略三国手游官网版下载-Minecraft中文分享站
- 利用JS代码完成动态生成表格案例及解析
- c语言读取广播星历程序,GPS广播星历计算卫星位置和速度.doc
- 上传doc,pdf,ppt,png,jpg,html文件并解析内容
- 通过Python爬虫技术获取小说信息
- redis连接异常 redis.clients.jedis.exceptions.JedisClusterException CLUSTERDOWN The cluster is down
- html入门怎么换字体颜色,html怎么改字体颜色
- GTSAM 学习(一)
- 安装win8的坎坷经历
- HTML5字母为30px用h几,HTML 中 1pt 等于多少 px?
- 【NOIP2016普及组】复赛——海港