用LU分解法来解矩阵方程
运用的是克劳特(Crout)分解,也就是U是单位上三角形矩阵
import numpy as np
#np.set_printoptions(threshold=np.inf)def LU(A, n):L = [[0 for x in range(n)] for y in range(n)]U = [[0 for x in range(n)] for y in range(n)] for i in range(n, 0, -1):for tmp1 in range(n - i, n):sum = 0for tmp2 in range(n - i):sum += L[tmp1][tmp2] * U[tmp2][n - i]L[tmp1][n - i] = A[tmp1][n - i] - sumfor tmp1 in range(n - i + 1, n):sum = 0for tmp2 in range(n - i):sum += L[n - i][tmp2] * U[tmp2][tmp1]U[n - i][tmp1] = (A[n - i][tmp1] - sum) / float(L[n - i][n - i])for i in range(n):U[i][i] = 1#print("L:")#printMat(L, 3) #print("U")#printMat(U, 3)return L, Udef LUSolve(A, b, n):L = [[0 for x in range(n)] for y in range(n)]U = [[0 for x in range(n)] for y in range(n)]L, U = LU(A, n)Y = [0 for x in range(n)]X = [0 for x in range(n)]Y[0] = b[0][0] / L[0][0]for i in range(1, n):sum = 0for tmp in range(0, i):sum += L[i][tmp] * Y[tmp]Y[i] = (b[0][i] - sum) / float(L[i][i])X[n - 1] = Y[n - 1]for i in range(n - 2, -1, -1):sum = 0for tmp in range(i + 1, n):sum += U[i][tmp] * X[tmp]X[i] = Y[i] - sumreturn Xif __name__ == "__main__":M = np.random.random(size = (100, 100))#print("M:")#print(M)A = Mfor i in range(0, 100):A[i][i] += 1 # A = M + I#print("A:")#print(A)X = np.random.random(size = (100, 1))for i in range(0, 100):X[i][0] = i + 1#print("X:")#print(X)B = np.dot(A, X)b = np.transpose(B)#(b)result = LUSolve(A, b, 100)print(result)
用LU分解法来解矩阵方程相关推荐
- 紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法
紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法 标签:计算方法实验 /* 紧凑存储的杜利特尔分解法Doolittle:如果初始矩阵不要求保留的话,可以紧凑存储.因为每 ...
- 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)
Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...
- Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)
1.要求 考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给定解(例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU ...
- matlab lu解线性方程,MATLAB报告用LU分解法求解线性方程组.doc
MATLAB报告用LU分解法求解线性方程组 <MATLAB>期末大报告 报告内容:用LU分解法求解线性方程组 学院(系): 专 业: 班 级: 学 号: 学生姓名: 2014 年 6 月 ...
- 解线性方程组的直接方法:LU分解法及其C语言算法实现
在上一篇博客里面,笔者介绍了解线性方程组的列主元Guass消元法,这篇将介绍LU分解法及其算法实现. 什么是LU分解? 对于一个线性方程组Ax=b,其中A是非奇异系数矩阵,b是线性方程组右端项,在列主 ...
- Doolittle分解法(LU分解法)的Python实现
在解一般的非奇异矩阵线性方程组的时候,或者在迭代改善算法中,需要使用LU分解法. 对于一个一般的非奇异矩阵A=(a11, a12,-,a1n,a21,-ann),可分解为一个下三角矩阵L和一个上三角矩 ...
- Python02 雅克比迭代法 Gauss-Seidel迭代法 列选主元法 LU分解法(附代码)
1. 实验结果 (1)在定义的矩阵类中设置需要求解的方程为: (2)在 test.py 中选择雅克比迭代法求解: 输入:最大容许迭代次数和精度要求: 输出:根据谱半径判断方法是否收敛,收敛时得到满足精 ...
- 数值分析3-解线性方程组的高斯消去法、LU分解法及列主元消去法的matlab程序和调试方法
对于形如Ax=b的线性方程组,在线性代数中是通过求逆的方式求解的,即x=A-1b,而在数值分析中,解线性方程组的方法是通过直接法或者迭代法来实现的,今天写的三个程序都属于直接法,分别为高斯消去法.LU ...
- LU分解法 | matlab
% LU分解法 % M为输入的增广矩阵 % precision为输入的精度要求,如不输入或输入有误,则默认为10位if nargin == 2trydigits(precision);catchdis ...
最新文章
- 卷积网络基础知识---Depthwise Convolution Pointwise Convolution Separable Convolution
- java多态口诀,Java之路---Day12(多态),多态Java
- python3下载教程-Python3 教程
- SAP中凭证类型的作用
- GIMP 2.10教程
- 网络:常见的端口号及分类
- 一个做法是给一个解决方案一个ComDLL的目录
- 2016年5月心情吧 233
- [渝粤教育] 江西理工大学 新融合大学英语(I) 参考 资料
- 要点初见:用Python进行微观交通模型仿真——基于SUMO的伯克利开源项目Flow Project初探与拓展
- C++入门——实现十字消除游戏
- 根据 ”艾宾浩斯遗忘曲线“复习时间点生成的复习计划模板
- JavaScript代码实现冒泡排序
- 电子书管理神器 calibre 5.0.0中文版
- 001电机的分类:不骗你,如果你没读这篇文章,可能都不知道还有这种类型的电机!
- Android安全之使用root权限绕过检测机制,强行自动允许应用的悬浮窗/应用后台弹出界面等权限
- 04-读取Word文档内容
- 35岁以后的Android程序员出路在哪里?大牛最佳总结
- Leetcode 电话号码的字母组合
- CAN节点报文丢失超时时间检测CANoe自动化脚本实现
热门文章
- matlab电流可逆斩波电路,电流可逆斩波电路.PPT
- 清远通业(谁有 清远通业 请在跟帖中:(1) 留名 (2)留个电子邮件地址 (3)回答你分了几次红利)...
- Google智能家居控制ESP8266
- 俄警告将在东欧部署导弹报复美国 惹怒波兰
- 随机合并多个视频,同时更换背景音频
- GPT系列:GPT1 -> 2 -> 3 -> InstructGPT ->ChatGPT
- 伯远帖 - Java Spring 4.0 集成 MyBatis 3.1 支持
- Opencv学习笔记 - 使用opencvsharp和决策树进行训练和预测
- react - 利用a标签,完成下载及跳转
- 一个故事搞懂经济危机(少儿不宜)