LU分解法

2023-11-16

LU分解的原理是将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积。

下面是LU分解的原理:
定一个n * n的矩阵A,我们希望将它分解为下三角矩阵L和上三角矩阵U的乘积,即A = LU。 我们可以在矩阵A上进行列主元高斯消元,消元的过程中会用到矩阵的初等变换。我们把消元过程中记录下来的消元主元放到一个n * n的矩阵U的对角线上,将消元过程中得到的消元因子放到一个n * n的矩阵L的对角线以下,得到LU分解。

import numpy as np

# 定义函数进行LU分解
def LU_decomposition(A):
    n = len(A[0])
    L = np.zeros([n, n])
    U = np.zeros([n, n])
    for i in range(n):
        L[i][i] = 1
        if 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:
            # 求U的第i行
            for j in range(i, n):
                sum = 0
                for k in range(0, i):
                    sum += L[i][k] * U[k][j]
                U[i][j] = A[i][j]-sum
            # 求L的第i列
            for j in range(i+1, n):
                sum = 0
                for k in range(0, i):
                    sum += L[j][k] * U[k][i]
                L[j][i] = (A[j][i] - sum)/U[i][i]
    return L, U

# 定义函数进行前/回代
def solve(L, U, b):
    n = len(b)
    y = np.zeros(n)
    x = np.zeros(n)
    # 前代
    for i in range(n):
        s = sum(L[i][j] * y[j] for j in range(i))
        y[i] = b[i] - s

    # 回代
    for i in range(n - 1, -1, -1):
        s = sum(U[i][j] * x[j] for j in range(i, n))
        x[i] = (y[i] - s) / U[i][i]

    return x


# 测试
A = np.array([[1, 2, -1], [2, 1, -2], [-3, 1, 1]])
b = np.array([3, 3, -6])

# 进行LU分解
L, U = LU_decomposition(A)
# 求解线性方程组
x = solve(L, U, b)

# 输出结果
print('系数矩阵A:\n', A)
print('向量b:', b)
print('解向量x:', x)
print('库函数解的结果', np.linalg.solve(A, b))

"""
#L*U=A
for i in range(1,n+1):
    for j in range(1,n+1):
        sum = 0
        for k in range(1,n+1):
            sum+=L[i][k]*U[k][j]
        A[i][j]=sum

step1:用矩阵L的第一行,去乘矩阵U的第i列,得到矩阵U的第1行
        U[1][i]=A[1][i]         (矩阵L的第1行L[1][1]==1,L[1][j]==0)
      用矩阵L的第j行,去乘矩阵U的第1列,得到矩阵L的第1列
        L[j][1]=A[j][1]/U[1][1] (矩阵U的第1列U[1][1]=A[1][1],U[j][1]==0)
next_step:用矩阵L的第k行去乘矩阵U的第i列(i>=k),得到矩阵U的第k行
        U[k][i]=A[k][i]-sum(L[k][m]*U[m][k] for k in range(1,k))
      用矩阵L的第j行,去乘矩阵U的第k列,得到矩阵L的第k列
      L[j][k]=(A[j][k]-sum(L[j][m]*U[m][k] for m in range(1,k)))/U[k][k]
goto next_step

LU分解法先求出矩阵U的一行元素,再求出矩阵L的一列元素,就这样逐行逐列交替求得矩阵中的所有元素。
"""

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LU分解法 的相关文章

随机推荐

  • python批量下载文件并压缩后上传到owncloud

    目录 1 首先获的一个保存url的文件 2 下载文件到服务器 3 将文件上传到owncloud 3 1 上传单个文件 3 2 上传多个文件 大文件拆分为小文件 推荐 摘要 笔者想下载东西到本地 直接下载速度超慢 一共需要下载1500张图 下
  • 每天进步一点点【图的深度优先遍历(DFS)】

    图是一种数据结构 其中节点可以具有零个或多个相邻元素 两个节点之间的连接称为边 节点也可以称为顶点 图分为三种 无向图 有向图 带权图 图的表示方式有两种 二维数组表示 邻接矩阵 链表表示 邻接表 邻接矩阵 邻接矩阵是表示图形中顶点之间相邻
  • 局域网使用kubeadm安装高可用k8s集群

    主机列表 ip 主机名 节点 cpu 内存 192 168 23 100 k8smaster01 master 2核 2G 192 168 23 101 k8smaster02 node 2核 2G 192 168 23 102 k8sma
  • 第三方支付自建商户池体系

    三方支付自建商户池体系通常指的是第三方支付机构自己搭建的商户池管理系统 商户池是指该支付机构所拥有的所有商户账户的集合 在支付领域 商户池的建立对于支付机构来说非常重要 它可以帮助支付机构更有效地管理商户 风控和支付流程 以下是自建商户池体
  • Animator的基本用法

    这里仅仅介绍Animator的一些基本的用法 说到Animator 最重要的最常用的的就是ObjectAnimator类 因为这个类可以对任意View的任意属性进行操作 首先以ImageView为例 以下所有的操作都针对ImageView
  • Node.js web3.js编译、部署智能合约

    Node js web3 js编译 部署智能合约 供参考脚本 https github com Saturday24 Smart Contracts Script 1 编译脚本 a install web3 solc fs path b 编
  • linux查看所有的进程及端口,linux查看所有进程和端口

    Linux下查看一个进程占用了哪个端口的方法 时候需要在Linux下查看一个进程占用了那个端口 但是只知道进程大致的名称 比如要查看hadoop的namenode在哪个端口上运行 以便在eclipse中连接 首先用ps命令查看进程的id 复
  • 校招算法题实在不会做,有没有关系?

    文章目录 前言 一 校招 二 时间复杂度 1 单层循环 2 双层循环 三 空间复杂度 四 数据结构 五 校招算法题实在不会做 有没有关系 六 英雄算法集训 前言 英雄算法联盟八月集训 已经接近尾声 九月算法集训将于 09月01日 正式开始
  • Mock 模拟测试简介及 Mockito 使用入门

    Mock 是什么 mock 测试就是在测试过程中 对于某些不容易构造或者不容易获取的对象 用一个虚拟的对象来创建以便测试的测试方法 这个虚拟的对象就是mock对象 mock对象就是真实对象在调试期间的代替品 简单的看一张图 我们在测试类 A
  • Java锁机制,synchronized和lock详解。

    Java锁机制详解 1 java各种锁详解 1 1 公平锁 vs 非公平锁 公平锁 是指多个线程按照申请锁的顺序来获取锁 线程直接进入队列中排队 队列中的第一个线程才能获得锁 类似排队打饭 先来后到 非公平锁 是指多个线程获取锁的顺序并不是
  • HDFS的基础详解

    概念 HDFS是Hadoop Distribute File System 的简称 Hadoop 分布式文件系统 是hadoop核心组件之一 作为最底层的分布式存储服务而存在 分布式文件系统解决的问题就是大数据存储问题 设计目标 1 硬件故
  • 自媒体爆款标题怎么写?手把手教你写热门标题

    自媒体内容想提高阅读量 标题是关键 如何创作优质且有吸引的标题呢 自媒体爆款标题怎么写 今天对热门标题进行解析 手把手教你写爆款标题 1 标题贴合热点 用户对热点的关注度超乎想象 有时候对热点关键词的搜索都能让系统崩溃 所以 在标题中添加热
  • Python语言学习实战-内置函数sorted()的使用(附源码和实现效果)

    实现功能 sorted 函数是Python的内置函数之一 用于对可迭代对象进行排序操作 它可以对列表 元组 字符串等可迭代对象进行排序 并返回一个新的已排序的列表 sorted 函数的语法如下 sorted iterable key Non
  • unity用visual studio写代码的时候一直显示importing assets

    项目场景 提示 使用Unity时打开C 弹出opening visual studio 然后一直停在importing assets这个界面 不影响写代码和运行 但是非常不舒服 困扰我许久 特别浪费时间 问题描述 unity3d打开项目中遇
  • JAVA应用程序集成控件JxBrowser v7.2来啦!允许自定义错误页面

    JxBrowser 点击下载 是将基于Chromium的浏览器与Java应用程序集成 以处理和显示HTML5 CSS3 JavaScript Flash等 JxBrowser更新至最新版v7 2 允许针对HTTP和网络错误覆盖标准Chrom
  • ES 搜索7 (多词查询)

    多词查询 如果我们一次只能搜索一个词 那么全文搜索就会不太灵活 幸运的是 match 查询让多词查询变得简单 GET my index my type search query match title BROWN DOG 上面这个查询返回所
  • vue 使用el-option标签解决不回显的问题

    一 问题描述
  • 最新----Dubbo Spring Cloud 重塑微服务治理

    spring cloud alibaba dubbo examples代码示例 摘要 在 Java 微服务生态中 Spring Cloud1 成为了开发人员的首选技术栈 然而随着实践的深入和运用规模的扩大 大家逐渐意识到 Spring Cl
  • 中兴2023秋招二面

    中兴二面 面试时长为20分钟的样子 请问你带了身份证或者学生证件吗 1 自我介绍 姓名 学校 专业 兴趣爱好 2 项目分工 应该问的是如何分工 我回答的不太好 首先根据项目工作量 分为几份工作 团队成员自行根据自己的情况认领对应项目 团队负
  • LU分解法

    LU分解的原理是将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积 下面是LU分解的原理 定一个n n的矩阵A 我们希望将它分解为下三角矩阵L和上三角矩阵U的乘积 即A LU 我们可以在矩阵A上进行列主元高斯消元 消元的过程中会用到矩