如何在matlab里用lu分解求出一个矩阵的lu分解 matlab逆矩阵,需要代码,

Matlab中矩阵的LU分解,为什么和书上的不一样呢??求大神指? - 爱问知识人
(window.slotbydup=window.slotbydup || []).push({
id: '2491531',
container: s,
size: '150,90',
display: 'inlay-fix'
上的不一样呢??求大神指导~
您的举报已经提交成功,我们将尽快处理,谢谢!
[L1,U1]=lu(x)
[L2,U2,P]=lu(x)
[L3,U3,P,Q] = lu(X)
MATLAB中[L1,U1]=lu(x)的结果:L是下三角的...
请认准官网唯一指定客服QQ:▓▓
【业务范围】:
1.查询微信/QQ/陌陌的聊天记录!
2.破解找回手机微信/手机QQ/陌陌的账号密...
赛门铁克的杀毒软件安装程式
lusetup.exe is a process associated with Symantec LiveUpdate from ...
在Simulink里有Powergui工具可以分析谐波成分,非常方便。
但只能分析Simulink仿真出的数据,如果我手里有采集到的数据,在matlab中有没有...
大家还关注5093人阅读
直接算会死人的。根据矩阵特点用不用的分解,写成几个例程,每次实验之前进行尝试,根据尝试结果在算法里决定里决定用哪个。
1.全阶矩阵A的求逆运算inv(A) 和稀疏矩阵B(阶数和a一样)
的求逆运算inv(B)是不是采取一样的方法啊?也就是说他们的
计算量是不是一样的啊?不会因为是稀疏矩阵就采取特殊的
方法来处理求逆吧?
我电脑内存256M ,做的矩阵求逆还可以,上万阶的
就跑不动了
稀疏存储方式会减少不必要的计算,虽然原理还是一样,不过
计算量大大减少了。
2.如果一个矩阵C非零元素都集中在主对角线的周围,那么对C求逆最好
应该采用什么样的方法最好呢?
一般还是用LU分解+前后迭代的方法,如果矩阵对角占优就更好办了。
只不过还是需要稀疏存储。
稀疏矩阵的逆一般不会是稀疏矩阵,所以对高阶的稀疏矩阵求逆,
是不可行的,对1万阶的全矩阵需要的内存差不多已经达到了pc的
极限,我想最好的办法就是迭代,既然是稀疏,乘法的次数就有限,
效率还是很高的。
不过求逆运算基本上就是解方程,对稀疏矩阵,特别是他那种基本上非零元素都在对角线附近的矩阵来说,LU分解不会产生很多的注入元,所以用LU分解解方程方法的方法是可行的。
如果用迭代法,好像也就是共轭梯度法了。
C的资源网络上有很多 google一下
或者到,oonumerics.org上找找
或者用IMSL for C
或者用Lapack
或者用Matlab+C混合编程
有现成代码,但要你自己找了
也可以使用程序库
30,000*30,000的稀疏矩阵求逆如何实现?
试试基于krylov子空间方法的算法吧。
如arnoldi和GMRES方法。
matlab中有函数可以直接调用。
直接help gmres就可以了。
如果效果还不好 。
就用用预处理技术。
比如不完全lu预处理方法。。等等。。
各种各样的预处理+GMRES是现在解决大规模稀疏矩阵的主力方法。。
维数再多还是用不完全LU分解预处理+CG or Gmres
我一个同学这么求过200W阶的矩阵
求逆一般是不可取的,无需多说。但稀疏矩阵的直接解法还是不少的。基本上都是对矩阵进行重新排序以期减少填充或运算量。
在matlab里面,有许多算法可以利用:
colamd, colmmd, colperm, spparms, symamd, symmmd, symrcm.
根据是否对称,采用LU分解或者chol分解。
这些算法在internet上搜一下,很多都有相应的C或fortran版本。
稀疏矩阵的存储最常见的是压缩列(行)存储,最近发现一种利用hash表来存储的,其存取复杂度是O(1),很是不错。有幸趣的可以看看下面网页咯,作者提供了源程序。
事实上Hash表存储的效率也跟Hash算法有关,弄不好的话,不见得比直接按行或者列
顺序检索快。而且规模越大,效率肯定越来越低。
对称正定的稀疏矩阵很好办啊,用LU分解就可以了。
如果维数实在太大,比如超过10^4量级,那就只能用
共轭梯度法之类的迭代法求解了。
好多文献中用Cholesky分解处理的,好像结果还可以
你觉得LL’分解不会破坏矩阵的稀疏性么——如果矩阵不是带状的话?
而且数值稳定性也有问题。
对于一些注入元不是很多的矩阵这应该是个好办法。
但是对于有些矩阵,LU分解后可能就把整个矩阵充满了。~
这是比较郁闷的事情。。
带状矩阵的逆有快速算法吗?
我觉得这个说法不对,至少在Matlab里面,使用稀疏矩阵求逆对于效率的提高还是很显著的。利用稀疏特性,很多对于零元素的操作就省掉了。如果原矩阵还是对称的,可以考虑三角分解,把单位阵的列向量作为右端项,求解得到的是对应的逆阵的列向量。
但是,按照前辈的说法,“绝大部分情况下,求逆阵肯定不是必需的”,这一说法我现在还是挺赞同的。 至少, 一般我们不会在有限元求解或者普通的线性方程组求解的时候,是先对系数矩阵求逆的吧。 所以,我认为,逆阵在数学上很漂亮,对于公式推导有所帮助,但是在数值计算中是应该尽量避免直接计算它的,而且,更重要的是,在绝大部分情况下,是可以避免的。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:123735次
积分:2091
积分:2091
排名:第14003名
原创:82篇
转载:28篇
评论:39条
(2)(2)(1)(2)(1)(2)(4)(1)(3)(1)(5)(2)(3)(11)(26)(1)(1)(7)(1)(4)(2)(3)(8)(4)(11)(2)矩阵的LU分解,可是怎么跟书上说的不一样呢?设A=[2 1 1;4 4 3;6 7 7],运用MATLAB中的LU分解语句[L1,U1]=lu(A),得到:L1 =
-1.0000如果是[L1,U1,P]=lu(A),结果为L1 =
1.0000U1 =
-1.0000P =
0可是,我又翻了以前学过的数值分析课程,如果按照书上的方法,LU分解的结果应该是:L2=[1 0 0; 2 1 0; 3 2 1]U2=[2 1 1; 0 2 1; 0 0 2]为什么结果会是这样的呢?而且LU分解应该是L是单位下三角,U是上三角,可是MATLAB的lu函数的结果却不是这样的,甚至多出了一个转置矩阵P,该如何解释呢?
風逝9960186
从数值稳定性的角度考虑,LU分解需要选主元,你用的“书上的方法”没有选主元,所以L当中有绝对值大于1的元素。
为您推荐:
扫描下载二维码matlab inv求逆采用什么算法,是LU分解吗就是我怎么才可以看到inv采用的算法,如果是稀疏矩阵,采用的算法,我怎么去查看呢?
国安御林葈
具体是什么办法,要到matlab的函数库里面去分析,但应该不会是LU分解,因为LU分解是不稳定的 用PLU分解倒还有可能 INV的解释:%INV Matrix inverse.% INV(X) is the inverse of the square matrix X.% A warning message is printed if X is badly scaled or% nearly singular.%% See also SLASH,PINV,COND,CONDEST,LSQNONNEG,LSCOV.% Copyright
The MathWorks,Inc.% $Revision:5.10.4.4 $ $Date: 19:35:54 $% Built-in function.所以去SLASH,PINV,COND,CONDEST,LSQNONNEG,LSCOV看看吧
为您推荐:
其他类似问题
扫描下载二维码如何计算可逆矩阵的逆矩阵?
尽可能地给出更多的方法 最好分类 手算用什么方法 计算机算用什么算法……
1 A的伴随矩阵除以A的行列式 2 给A的右边拼一个同阶单位阵 【A|E】然后通过行变换把左边变位单位阵,这时右边的就是A的逆矩阵【E|A逆】 3 如果A是二阶的,那么就主对角线元素交换位置,副对角线元素变号,然后除以行列式 4如果A是抽象的,用定义,凑成AB=E,B就是你要求的 5 0比较多的时候可以分块矩阵求逆 6 如果A很特殊: 对角阵直接取各元素倒数,正交阵直接转置
可能还有别的吧,我也记不得了,正常情况方法2还是比较好用的
另外我不同意那些让楼主自己去看书的答案,而且我也不认为这样的问题会降低知乎的吸引力
Python numpy 计算逆矩阵。
打开matlab, 输入inv(A)
提供一个不需要什么基础知识的方法
例如求3阶可逆矩阵A的逆矩阵,首先做这样的一个矩阵
a11 a12 a13 1 0 0
a21 a22 a23 0 1 0
a31 a32 a33 0 0 1
(也就是 [原矩阵:单位矩阵]
通过若干次初等行变换(“某行乘以一个数后加到另一行”、“某两行互换位置”、“某行乘以某一个数”,这三种以行做运算的方法),将上面的矩阵变为
1 0 0 b11 b12 b13
0 1 0 b21 b22 b23
0 0 1 b31 b32 b33
(也就是想办法把原来的A矩阵变成单位矩阵,变成这样的形式
[单位矩阵:B矩阵]
这样B矩阵就是A矩阵的逆矩阵了。
以此类推到N阶可逆矩阵求逆矩阵。
别的手算方法还有很多,例如先求A的伴随阵,再求A的行列式,这样逆矩阵就等于
A的伴随阵/A的行列式。 二阶可逆矩阵求逆矩阵一般用这个方法最快。
(切记,A的行列式是一个数,伴随阵是一个矩阵)
手工运算请参考任何一本大学线性代数或矩阵论课本。工程应用一般使用matlab:inv(a)或a^-1。  例如:  && a =  8 4 9  2 3 5  7 6 1  && a^-1  ans =  0.0 0.0424  -0.3 0.1333  0.2 -0.0970  && inv(a)  ans =  0.0 0.0424  -0.3 0.1333  0.2 -0.0970  以下是对MATLAB中Inv用法的解释。  原文(来自matlab help doc)  In practice, it is seldom necessary to form the explicit inverse of a matrix. A frequent misuse of inv  arises when solving the system of linear equations Ax=B .  One way to solve this is with x = inv(A)*B.A better way, from both an execution time and numerical accuracy standpoint,is to use the matrix division operator x = A\b.  实际上,很少需要矩阵逆的精确值。在解方程 Ax=B的时候可以使用x = inv(A)*B,  但通常我们求解这种形式的线性方程时,不必要求出A的逆矩阵,在MATLAB中精度更高,速度更快的方法是用左除——x = A\b。  另外,用LU分解法的速度更快,只是要多写一条LU分解语句。  速度可以通过matlab中tic和toc来估算运行的时间。
矩阵求逆的渐进最快方法是分治的,基于以下恒等式它的渐进和矩阵乘法相当,矩阵乘法多快求逆就多快。
用matlab编一段码算也成,就是没有原来的快;这段码的思想就是高斯消去%code for inverse matrix a[n,l]=size(a);if n == l
disp('a good matrix')endI= eye(n);new = [a I];
for i = 1:n;
for j = i+1:n;
if new(i,i) == 0 || new(j,j) == 0;
disp ('remind:row order has been changed ');
new([i i+1],:)=new([i+1 i],:);
m = new(j,i)/new(i,i);
new(j,:) = new(j,:)-m*new(i,:);
for k = n:-1:1;
for p = k-1:-1:1;
if new(k,k) == 0 || new(p,p) == 0;
new([k k-1],:)=new([k-1 k],:);
disp('remind
:row order has been changed');
q = new(p,k)/new(k,k);
new(p,:) = new(p,:)-q*new(k,:);
for i=1:n;
new (i,:) = new (i,:)/new(i,i);
end A = new (1:n,n+1:2*n);
Crammer法则:因此
数值分析里面一般用基于LU分解的方法
应该尽可能避免矩阵求逆。当你的算法含有直接对矩阵求逆的步骤时,应该改进算法,而不是去想如何求逆矩阵。
已有帐号?
无法登录?
社交帐号登录

我要回帖

更多关于 lu分解 逆矩阵 的文章

 

随机推荐