首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在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 ORDER BY,GROUPBY 与各种JOIN
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
泰坦HW
2020/07/22
2K0
MySQL索引优化order by与group by
MySQL索引优化order by与group by 案例一 name符合最左前缀法则,但在age处断了,所以只能用到name列,索引长度202,order by也用到了index_union索引 树,通过Extra可看出。 案例二 where后符合最左前缀,所以只用到了name列,而order by处不是用的索引树index_union,因为age还没排序呢, position排序肯定是乱的,需要将结果集放在内存中排序。 案例三 如第二张图所示,在确定最左列name后,其实下面
晓果冻
2022/09/08
6380
MySQL索引优化order by与group by
Mysql order by 优化
本节描述MySQL何时可以使用索引来满足ORDER BY子句,当不能使用索引时使用filesort,以及优化器中有关ORDER BY的执行计划信息。
XING辋
2019/03/26
1.5K0
zend studio 8安装与汉化
正确操作: 1、大家可以用这个地址作为更新源(操作:菜单栏中window->property->Installation/update->update 添加这个地址,并打勾)
Java架构师必看
2021/03/22
4710
【mysql】order by排序
排序数据 1. 排序规则 如果没有使用排序操作,默认情况下查询返回的数据是按照添加数据的顺序显示的。 使用 ORDER BY 对查询到的数据进行排序操作。 使用 ORDER BY 子句排序 ASC(ascend): 升序 DESC(descend):降序 ORDER BY 子句在SELECT语句的结尾。 2. 单列排序 按照salary从高到低的顺序显示员工信息 SELECT employee_id,last_name,salary FROM employees ORDER BY salary DESC;
兮动人
2022/03/03
2.5K0
PHP 扩展与 ZEND 引擎的整合
PHP 扩展是对 PHP 功能的一个补充,编写完 PHP 扩展以后, ZEND 引擎需要获取到 PHP 扩展的信息,比如 phpinfo() 函数是如何列出 PHP 扩展的信息,PHP 扩展中的函数如何提供给 PHP 程序员使用,这些是开发 PHP 扩展需要了解的内容。
码农UP2U
2020/08/26
7430
MySQL ORDER BY IF() 条件排序
在做sqlzoo的时候,碰到一个SQL的排序问题,他把符合条件的单独几行,可以放在查询结果的开始,或者查询结果的尾部
用户7657330
2020/08/14
3.9K0
MySQL ORDER BY IF() 条件排序
[1009]mysql中Cast()函数的用法
来源:https://blog.csdn.net/m0_37450089/article/details/80750994
周小董
2021/06/29
2K0
MySQL Order By工作原理
Extra中包含Using filesort表示需要排序,在排序时,MySQL会为每个线程分配一块内存区域用于排序,称之为sort_buffer。
shysh95
2022/02/16
8370
MySQL Order By工作原理
MySQL——优化ORDER BY语句
本篇文章我们将了解ORDER BY语句的优化,在此之前,你需要对索引有基本的了解,不了解的老少爷们可以先看一下我之前写过的索引相关文章。现在让我们开始吧。
撸码那些事
2018/10/08
1.2K0
MySQL——优化ORDER BY语句
Mysql order by排序优化
1. 加大max_length_for_sort_data参数的设置 在MySQL中,排序算法分为两种,一是只加载排序字段到内存,排序完成后再到表中取其他字段,二是加载所有需要的字段到内存,显然第二种节省了IO操作,所以更快 决定使用哪种算法是通过参数max_length_for_sort_data来决定的 当所有返回字段的最大长度小于这个参数值时,MySQL就会选择第二种算法,反之使用第一种。所以,如果有充足的内存让MySQL存放须要返回的非排序字段,就可以加大这个参数的值来让MySQL选择第二种排序算法
dys
2018/04/02
2.5K0
mysql order by的坑
结论:当我们需要按照多个字段排序时,我们需要显式的指出每个字段的排序方式。 1.下面两条语句的结果是一样的 SELECT *from issue_info ORDER BY create_time ,
IT云清
2019/01/22
8560
C++ const_cast static_cast dynamic_cast reinterpret_cast
对static限定的改变必然会造成范围性的影响,而const限定的只是变量或对象自身
jasong
2021/10/13
5280
static_cast const_cast reindivter_cast dynamic_cast
C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这两种形式称为旧风格(old-style)的强制转型。 使用标准C++的类型转换符:static_cast 、dynamic_cast、
用户1154259
2018/01/17
8630
Zend_string与写时复制
学习过C语言的应该知道,字符串中除了最后一个字符外不允许含有\0,否则会被认为是字符串的结束字符,这就导致了C语言的字符串有很多的限制,比如不存储图片、文件等二进制数据。但是PHP就没有这样的限制,它的字符串可以存储二进制数据,并不会出现任何报错,而PHP的这种能力就叫做字符串的二进制安全 c语言代码片段
程序员小饭
2020/09/07
6710
Mysql(9)——排序的方法order by与limit的用法
其中,order by即按照升序或者降序的方式排列,如果后面跟的是desc则是降序排列,如果后面跟的是asc,则是升序排列。
gzq大数据
2020/11/11
1.3K0
Mysql(9)——排序的方法order by与limit的用法
MySQL中的ORDER BY field
MySQL可以通过field()函数自定义排序,格式:field(value,str1,str2,str3,str4),value与str1、str2、str3、str4比较,返回1、2、3、 4,如遇到null或者不在列表中的数据则返回0. 这个函数好像Oracle中没有专门提供(也可能是我没有用到),不过自己实现这样一个函数还是比较 简单的。
用户7657330
2020/08/14
3.3K0
Mysql如何使用order by工作
日常开发中,我们经常要进行字段的排序,但是我们大多不知道排序是如何执行的,今天我们就说说order by 的执行逻辑,
小土豆Yuki
2020/11/03
1.1K0
mysql使用ORDER BY和GROUP BY
今天写代码时遇到一个需求是这样的: 取表内最新的一条数据,根据用户名分组 本来以为又是那种 需求,然后就开始写sql,写完一运行,报错。。。 然后发现GROUP BY必须放在ORDER BY的前面 但这样又会导致不能取最新的一条数据 于是用了一个“子查询”的办法解决 <select id="cowBeer" resultType="map" parameterType="map"> SELECT [字段] FROM ( SELECT DISTINCT
阿超
2022/08/16
9390
mysql使用ORDER BY和GROUP BY
mysql随机排序 order by rand()
@Query("SELECT a from #{#entityName} a where a.isDeleted=0 and a.sourceType=1 order by rand()") fun findGankAll(pageable: Pageable): Page<Image> @Query("SELECT a from #{#entityName} a where a.sourceType=1 and a.isDeleted=0 and a.category like %:searchTex
一个会写诗的程序员
2018/08/17
2.1K0

相似问题

mysql by order by case when cast()

20

Linq order by with cast as

20

字段名“order”与mysql与Zend_Db_table_Abstract冲突?

14

jpa openjpa - order by with cast

11

在具有多个SELECT或ORDER变量的SELECT查询(或ORDER )中使用MySql CAST函数

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档