算法流程

首先,LU分解法就是在高斯消元法的基础上,把矩阵AAA分解为一个上三角矩阵UUU与一个单位下三角矩阵LLL的乘积。

懒得敲LaTeX公式了,书上由具体的推导过程,这里我们重点介绍代码吧

主要就是在高斯消元的过程中标记单位下三角矩阵LLL,算法复杂度O(N3)O(N^3)O(N3),没有变化。

C++代码

#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> PII;
#define int long long
const int N = 1e2 + 10;
int a[N][N], b[N][N];
int n;
void LU_Factorization()
{for (int i = 0; i < n; i++)b[i][i] = 1;for (int k = 0; k < n; k++)for (int i = k + 1; i < n; i++){double t = a[i][k] / a[k][k];b[i][k] = t;for (int j = 0; j < n; j++){a[i][j] -= a[k][j] * t;}}printf("L矩阵为:\n");for (int i = 0; i < n; i++){for (int j = 0; j < n; j++)printf("%d ", b[i][j]);puts("");}printf("U矩阵为:\n");for (int i = 0; i < n; i++){for (int j = 0; j < n; j++)printf("%d ", a[i][j]);puts("");}
}
signed main()
{cin >> n;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)cin >> a[i][j];LU_Factorization();return 0;
}

python代码

老师同意调库了,,试一下numpy(虽然本质上没改变什么,但是在学习中成长)

# LU分解
import numpy as np
def LU_Factorization(A):n = A.shape[0]L = np.zeros([n, n])U = np.zeros([n, n])for i in range(n):L[i][i] = 1if i == 0:U[0][0] = A[0][0]for j in range(1, n):U[0][j] = A[0][j]L[j][0] = A[j][0] / U[0][0]else:for j in range(i, n):temp = 0for k in range(0, i):temp = temp + L[i][k] * U[k][j]U[i][j] = A[i][j] - tempfor j in range(i + 1, n):temp = 0for k in range(0, i):temp = temp + L[j][k] * U[k][i]L[j][i] = (A[j][i] - temp) / U[i][i]return L, U
def main():A = np.array([[1, 1, 1], [0, 4, -1], [2, -2, -1]])L, U = LU_Factorization(A)print('L矩阵为:\n',L, '\nU矩阵为:\n', U)
main()

计算机数值方法——LU分解法(C++\Python代码实现)相关推荐

  1. Doolittle分解法(LU分解法)的Python实现

    在解一般的非奇异矩阵线性方程组的时候,或者在迭代改善算法中,需要使用LU分解法. 对于一个一般的非奇异矩阵A=(a11, a12,-,a1n,a21,-ann),可分解为一个下三角矩阵L和一个上三角矩 ...

  2. Python02 雅克比迭代法 Gauss-Seidel迭代法 列选主元法 LU分解法(附代码)

    1. 实验结果 (1)在定义的矩阵类中设置需要求解的方程为: (2)在 test.py 中选择雅克比迭代法求解: 输入:最大容许迭代次数和精度要求: 输出:根据谱半径判断方法是否收敛,收敛时得到满足精 ...

  3. 解线性方程组的直接方法:LU分解法及其C语言算法实现

    在上一篇博客里面,笔者介绍了解线性方程组的列主元Guass消元法,这篇将介绍LU分解法及其算法实现. 什么是LU分解? 对于一个线性方程组Ax=b,其中A是非奇异系数矩阵,b是线性方程组右端项,在列主 ...

  4. 数值分析3-解线性方程组的高斯消去法、LU分解法及列主元消去法的matlab程序和调试方法

    对于形如Ax=b的线性方程组,在线性代数中是通过求逆的方式求解的,即x=A-1b,而在数值分析中,解线性方程组的方法是通过直接法或者迭代法来实现的,今天写的三个程序都属于直接法,分别为高斯消去法.LU ...

  5. 紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法

    紧凑存储的杜利特尔分解法Doolittle(LU分解法)_解线性方程组的直接解法 标签:计算方法实验 /* 紧凑存储的杜利特尔分解法Doolittle:如果初始矩阵不要求保留的话,可以紧凑存储.因为每 ...

  6. 计算方法:列主元消去法,LU分解法, 雅可比迭代法,高斯塞德尔迭代法 解线性方程(C++)

    Matrix.h包括矩阵类Matrix的定义,Matrix.cpp包括该类成员函数的实现,LinearEqu.h包括线性方程类LinearEqu的定义,继承自Matrix类,其中solve()方法为列 ...

  7. LU分解法 | matlab

    % LU分解法 % M为输入的增广矩阵 % precision为输入的精度要求,如不输入或输入有误,则默认为10位if nargin == 2trydigits(precision);catchdis ...

  8. Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)

    1.要求 考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给定解(例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU ...

  9. 抖音热门游戏Fill one-line puzzle game解法的Python代码实现

    抖音热门游戏Fill one-line puzzle game解法的Python代码实现 导语 思路 代码 验证 谢谢小李同学的提醒,加上了无解的判断,不然如果无解就进入死循环了! 版权声明:原创文章 ...

最新文章

  1. Revising Aggregations - Averages(集合函数-avg)
  2. js 闭包的用法详解
  3. 转载:Linux命令之查看文件占用空间大小-du,df
  4. RAM的一个实例,向下取整
  5. idea编译工程时出现Error:java: 无效的目标发行版: 1.8
  6. msp430入门编程42
  7. JEECG Framework 3.5.0 GA 新版本终于发布了,重量级功能(数据权限,国际化,多数据源),团队会努力推出新版本,希望大家多多支持!!
  8. python 字符串replace函数_01-Python里字符串的常用操作方法--replace()函数
  9. hive的lateral view行转列
  10. nyoj-488-素数环
  11. Visual Studio Code的设置及插件同步
  12. linux查看数据区块大小,Linux显示指定区块大小为1048576字节
  13. 【C++】-- STL容器适配器之stack
  14. Java 安装+环境配置(图文详解)
  15. 64qam带宽计算_烧脑:5G 理论峰值速率是怎么计算的?
  16. 类选择器和ID选择器
  17. linux trace 进程 文件路径,linux panic 问题定位
  18. 你这么努力,为何还如此焦虑?
  19. IDEA 关于两个分支代码合并的操作
  20. Sierpiński 的初等数论问题

热门文章

  1. 【DIY】树莓派ROS智能小车
  2. 项目实训(十三)——FPS游戏射击反馈震屏及UI子弹数量
  3. 任意离散点曲线求交点c++实现
  4. 建筑施工技术【20】
  5. Python实现寻找完美数问题
  6. pytorch实现 minist 手写体分类任务
  7. 机器学习实战——密度聚类算法
  8. Altium Designer15通用规则设置
  9. MySQL卸载不干净回不到初始安装页面(MySQL Connector Net卸载不了),重装报错Database initialization failed等问题解决办法
  10. 网络规划设计师难考吗?