首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在MATLAB中执行不旋转的LU分解

在MATLAB中执行不旋转的LU分解
EN

Stack Overflow用户
提问于 2016-12-14 19:49:17
回答 3查看 18.5K关注 0票数 7

如何在MATLAB中实现函数lu(A),使L*U直接为A,同时也得到真实的L矩阵?

当我使用[L,U] = lu(A)时,MATLAB没有给出正确的L矩阵。当我使用[L,U,P] = lu( A )时,我需要实现P*A = L*U,但我只想将L*U相乘以接收A。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-14 20:02:41

默认情况下,MATLAB的lu总是执行旋转。例如,当您尝试执行常规LU分解算法时,如果您的对角系数等于0,则它将不起作用,因为在执行高斯消元法以创建上三角矩阵U时,需要使用对角系数,因此您将得到除以零的错误。需要旋转以确保分解是稳定的。

然而,如果你能保证你的矩阵的对角系数是非零的,这是非常简单的,但你必须自己写。你所要做的就是对矩阵进行高斯消元,并将矩阵简化为简化的梯形。得到的降阶梯形矩阵为U,而高斯消元法中去除L下三角部分所需的系数将被放置在下三角半部分中,从而得到U

假设您的矩阵存储在A中,则可以使用类似的方法。请记住,我在这里假设了一个方阵。非旋转LU分解算法的实现放在名为lu_nopivot的MATLAB函数文件中

代码语言:javascript
运行
AI代码解释
复制
function [L, U] = lu_nopivot(A)

n = size(A, 1); % Obtain number of rows (should equal number of columns)
L = eye(n); % Start L off as identity and populate the lower triangular half slowly
for k = 1 : n
    % For each row k, access columns from k+1 to the end and divide by
    % the diagonal coefficient at A(k ,k)
    L(k + 1 : n, k) = A(k + 1 : n, k) / A(k, k);

    % For each row k+1 to the end, perform Gaussian elimination
    % In the end, A will contain U
    for l = k + 1 : n
        A(l, :) = A(l, :) - L(l, k) * A(k, :);
    end
end
U = A;

end

作为一个运行示例,假设我们有以下3 x 3矩阵:

代码语言:javascript
运行
AI代码解释
复制
>> rng(123)
>> A = randi(10, 3, 3)

A =

     7     6    10
     3     8     7
     3     5     5

运行该算法可以得到以下结果:

代码语言:javascript
运行
AI代码解释
复制
>> [L,U] = lu_nopivot(A)

L =

    1.0000         0         0
    0.4286    1.0000         0
    0.4286    0.4474    1.0000   

U =

    7.0000    6.0000   10.0000
         0    5.4286    2.7143
         0         0   -0.5000

LU相乘可实现:

代码语言:javascript
运行
AI代码解释
复制
>> L*U

ans =

     7     6    10
     3     8     7
     3     5     5

..。这是原始矩阵A

票数 12
EN

Stack Overflow用户

发布于 2019-04-17 15:12:27

你可以使用这个技巧(尽管如前所述,你可能会失去数值稳定性):

代码语言:javascript
运行
AI代码解释
复制
[L, U] = lu(sparse(A), 0)
票数 2
EN

Stack Overflow用户

发布于 2019-05-31 20:39:36

您可能想要考虑进行LDU分解,而不是未旋转的LU。看,没有旋转的LU在数字上是不稳定的-即使对于满秩和可逆的矩阵也是如此。上面提供的简单算法说明了原因-有除以涉及的矩阵的每个对角元素。因此,如果对角线上的任何地方都有零,分解就会失败,即使矩阵可能仍然是非奇异的。

Wikipedia在这里谈了一点LDU分解:

https://en.wikipedia.org/wiki/LU_decomposition#LDU_decomposition

而不引用算法。它引用了以下教科书作为存在的证明:

罗杰·霍恩;约翰逊·查尔斯·R. (1985年),矩阵分析,剑桥大学出版社,ISBN 978-0-521-38632-6。请参见第3.5节。

LDU被保证存在(至少对于可逆矩阵),它在数值上是稳定的,并且它也是唯一的(假设L和U都被约束为在对角线上具有单位元素)。

然后,如果由于任何原因"D“挡住了你的路,你可以将对角矩阵D吸收到L (L:=L_D)或U (U:=D_U)中,或者在L和U之间对称地分割它(比如L:=L*sqrt(D)和U:=sqrt(D)*U),或者你想怎么做都行。有无数种方法可以将LDU拆分成LU,这就是为什么LU分解不是唯一的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41150997

复制
相关文章
MySQL中 如何查询表名中包含某字段的表
information_schema 是MySQL系统自带的数据库,提供了对数据库元数据的访问 information_schema.tables 指数据库中的表(information_schema.columns 指列) table_schema 指数据库的名称 table_type 指是表的类型(base table 指基本表,不包含系统表) table_name 指具体的表名
全栈程序员站长
2022/02/10
13.6K0
Sqlserver查询数据表中的字段类型
select a.name 表名, b.name 字段名, case c.name when 'numeric' then 'numeric(' + convert(varchar,b.length) + ',' + convert(varchar,b.xscale) + ')' when 'char' then 'char(' + convert(varchar,b.length) + ')' when 'varchar' then 'varchar(' + convert(varchar,b.l
静谧的小码农
2019/04/25
4.4K0
Sqlserver查询数据表中的字段类型
mysql数据库(7):表中检索信息
方法一:先删除用 DELETE FROM pet;  去修改txt中内容,再LOAD DATA LOCAL INFILE 'D:/test/pet.txt' INTO TABLE pet;
川川菜鸟
2021/10/18
4.7K0
【求助】从大表中删除小表中存在的记录问题
A表:30万,主键ID B表:300万,主键ID 从B表中删除ID=A表ID的记录。 DELETE FROM B WHERE EXISTS (SELECT 1 FROM (SELECT ID FROM (SELECT T.ID, ROWNUM RN FROM A) WHERE RN > 0 AND RN <= 50000) AB WHERE A.ID = B.ID); 但执行计划显示COST较大,且瓶颈是B表的全表扫描。 需求是这里有B1 ... B10多个B表(都是300万),串行操作
bisal
2019/01/29
5.6K0
android sqlite 判断表和表中字段是否存在方法
/** *检查某表是否存在 * @param tableName 表名 * @return true:存在 false:不存在 */ public boolean tabIsExist(String tabName){ boolean result = false; if(tabName == null){ return false; } Cursor cursor = n
再见孙悟空_
2023/02/10
1.9K0
Django ORM 查询表中某列字段值
方式一获取到的是一个QuerySet,内容是键值对构成的,键为表的列名,值为对应的每个值。
BigYoung小站
2020/05/04
4K0
fastadmin 一个表中两个字段,关联另一个表同一个字段
例atten(关注表)中的userId(用户ID)和attenUserId(被关注用户ID),需要通过关联user(用户表)的id,获取user(用户表)的username(呢称)
正经人
2023/08/09
1.2K0
java如何获得数据库表中各字段的字段名
public class TestDemo { public static Connection getConnection() { Connection conn = null; try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://数据库IP地址:3306/数据库名称"; String user = "
ydymz
2018/09/10
3.2K0
改进 Elastic Stack 中的信息检索:混合检索
在我们的上一篇博文中,我们介绍了 Elastic Learned Sparse Encoder,这是一种经过训练可有效进行零样本文本检索的模型。Elasticsearch ®还具有强大的词汇检索功能和丰富的工具来组合不同查询的结果。在本博客中,我们介绍了混合检索的概念,并探讨了 Elasticsearch 中可用的两种具体实现。特别是,我们探索如何通过使用倒数排名融合和加权分数和将弹性学习稀疏编码器与 BM25 相结合来提高其性能。
点火三周
2023/07/20
2.2K0
改进 Elastic Stack 中的信息检索:混合检索
在Asp.Net中从sqlserver检索(retrieve)图片
介绍: 这篇文章是我写的"如何把图片存入sqlServer中"的后续。我建议你在读这篇文章之前先看看那篇。 和存储图片相比,读取图片就要简单多了。输出一副图片我们要做的就是使用Response对象的BinaryWrite方法。 同时设置图片的格式。在这篇文章中,我们将讨论如何从SqlServer中检索图片。 并将学习以下几个方面的知识. ·如何设置图片的格式? ·如何使用BinaryWrite方法。
Java架构师必看
2021/03/22
1.7K0
yii2.0之-模型中attributeLabels()函数的作用 和修改数据表中的字段后如何更新model中的字段
//1、后面的是前面的注释,在rules验证的时候,如果报错,会把此处的后面的内容显示出来
botkenni
2022/01/10
9K0
从Mysql备份中恢复单个表
因为云平台的备份是把库中所有的表都打包成一个 .sql文件,然而这一个.sql文件大约有20G,现阶段的方法是把.sql文件source到数据库数据处理机器上,然后再根据需求提出需要的表。每次这个操作都需要大约2个多小时,太耗时。闲暇时间,Google到了一个大神写的几行代码,经过实验确实很好用。下面就分享出来,仅供参考。 思路(原谅我也理解了好一会儿): 主要使用sed命令来实现,加上-n,-e参数把打印的结果追加到一个文件中,就得到了想要的表的内容。 一般情况下我们使用sed打印指定行的内容是: [ro
行 者
2018/03/26
4.8K0
从Mysql备份中恢复单个表
MySQL中的哥哥表、妹妹字段,是什么鬼?
晚上,我被叫进宽大的办公室,总监正在煮茶。高压锅煮着长嘴茶壶,水蒸气缭绕。领导举手之间,淡黄茶水奔涌而出,倒立而下浇上茶叶,漏出两杯茶水。
xjjdog
2021/01/11
1.6K0
MySQL中的哥哥表、妹妹字段,是什么鬼?
有两个表A和B,均有key和value两个字段,如果B的key在A中也有,就把B的value替换为A中对应的value
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/119566.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/09
1.6K0
sql server 更新两个表的某个字段
--临时表 create table tmp_cup ( a varchar(20), b varchar(50), c varchar(20) ) select * from t_customer --//更新简称字列 update t_customer set SHORTNAME=(select shortname from tmp_cup where a=custid) 不过如此的话, 如果子查询的某个查询返回多条数据的话就有可能报错:消息 512,级别 16,状态 1,
乔达摩@嘿
2020/09/11
2.2K0
Mysql中查询数据库中包含某个字段的所有表名
有一个商品的名称配置错误了,需要进行修改,但是涉及到的表太多了,因为商品的sku_name被冗余到了很多表中,一个一个的找非常的费事费力,特地记下便捷查询操作以备后用。
翎野君
2023/05/12
5K0
sql一张表中两个字段指向同一个外键
在项目开发中遇到这么一个例子,首先产品表 tb_product ----------------------------- id    name 1     手机 2    电脑 3     笔记本 第二张表 tb_product_chain(产品链) ------------------------------------------------------ int   product_id     parent_product_id 1       1                          
码农阿宇
2018/04/18
1.6K0
sql一张表中两个字段指向同一个外键
mysql修改数据库表和表中的字段的编码格式的修改
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
逝兮诚
2019/10/30
8.7K0
MySQL中的json字段
MySQL5.7.8中引入了json字段,这种类型的字段使用的频率比较低,但是在实际操作中,有些业务仍然在用,我们以此为例,介绍下json字段的操作方法:
AsiaYe
2019/12/23
9.4K0
点击加载更多

相似问题

如何从ms-access中的多个表中检索记录?

24

从查找表中动态检索表的字段

11

从外键表中检索字段

35

使用python从表存储中检索超过1000行

32

从查询字段中检索超过255个字符

12
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档