这是我在这个网站上的第一个问题。我在看一个Matlab问题,好像不知道怎么做在我输入问题之前,我想清楚地表明我是在寻求理解,而不是答案。不过,我必须承认,如果有回信,我不会生气的。但更重要的是,我需要理解这一点。
“矩阵分解lu=pa可以用来计算a的行列式。
det(L)det(U) = det(P)det(A)
因为l是三角形,对角线上有一个,所以det(l)=1。因为你是
三角形,det(u)=u11u22··u nn。因为p是一个置换,det(p)=
+如果互换数量为偶数,则为1;如果互换数量为奇数,则为-1。所以
探测(A)=±U 11 U 22··U nn。
修改lutx函数,使其返回四个输出。

function [L,U,p,sig] = lutx(A)
%LU Triangular factorization
% [L,U,p,sig] = lutx(A) computes a unit lower triangular
% matrix L, an upper triangular matrix U, a permutation
% vector p, and a scalar sig, so that L*U = A(p,:) and
% sig = +1 or -1 if p is an even or odd permutation.

编写一个函数mydet(a),它使用修改后的lutx计算
a的行列式。在matlab中,可以计算出u 11u 22··u nn的乘积。
通过表达式prod(diag(u)).”`
可以找到lutx代码here
我很难理解这个问题的概念,以及需要编写的代码。任何帮助都将不胜感激谢谢您。

最佳答案

正如你在下面的方程式中提到的:

det(L)det(U) = det(P)det(A)

实际上,lutx函数分解输入矩阵并返回分解的元素这意味着如果你给它A矩阵,它将计算L,U,P。你可以检查源代码。
实际上在您的问题中,四个元素中有三个是“已知的”,因此您可以使用lutx函数来查找det(A)。
因为:
det(A) = det(L)det(U) / det(P);

你能做的就是:
[L,U,p,sig] = lutx(A); % here I am using the modified version of lutx that you mentioned
DetA = 1 * prod(diag(U)) * sig;

因为,det(l)=1(我在前一行代码中提到它只是为了understanding),det(u)=prod(diag(u)),sig给出符号。
最后,您可以将结果与matlab函数det(A)进行比较。

关于algorithm - 使用Matlab的矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21516217/

10-11 22:01