W * diag(S) * W' 形式的矩阵的特征分解MATLAB 中的矩阵指数

发布于 2024-10-02 08:17:06 字数 584 浏览 1 评论 0原文

W 是一个又高又瘦的实值矩阵,diag(S) 是一个对角矩阵,由 +1-1 组成 在对角线上。我想要 A = W * diag(S) * W' 的特征分解,其中单引号表示转置。主要问题是 A 太大了。由于 A 是对称的,秩不足,而且我实际上知道 A 的最大秩(来自 W),我认为我应该能够有效地做到这一点。知道如何解决这个问题吗?

我的最终目标是在不使用 MATLAB 的 expm 的情况下计算 A 的矩阵指数,这对于大矩阵来说非常慢,并且没有利用秩缺陷。如果 A = U * diag(Z) * U' 是特征分解,则 exp(A) = U * diag(exp(Z)) * U'

虽然找到一个正交 U 使得 W * diag(S) * W' = U' * diag(Z) * U' 看起来很有希望有一个简单的算法,但我这里需要一些线性代数的帮助。

W is a tall and skinny real valued matrix, and diag(S) is a diagonal matrix consists of +1 or -1 on the diagonal. I want the eigen decomposition of A = W * diag(S) * W' where single quote denotes transposition. The main problem is that A is pretty big. Since A is symmetric, rank deficient, and I actually know the maximum rank of A (from W), I think I should be able to do this efficiently. Any idea how to approach this?

My eventual goal is to compute the matrix exponential of A without using MATLAB's expm which is pretty slow for big matrices and does not take advantage of rank deficiency. If A = U * diag(Z) * U' is the eigen decomposition, exp(A) = U * diag(exp(Z)) * U'.

While finding an orthogonal U such that W * diag(S) * W' = U' * diag(Z) * U' looks promising to have an easy algorithm, I need some linear algebra help here.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

离旧人 2024-10-09 08:17:06

我首先对 W 执行所谓的“薄”QR 分解,然后计算 R*diag(S)*R' 的特征值分解,然后用它来计算 A 的 eig 分解。

N = 10;
n=3;
S = 2*(rand(1,n)>0.5)-1;
W = rand(N,n);

[Q,R] = qr(W,0);
[V,D] = eig(R*diag(S)*R');

%this is the non rank-deficient part of eig(W*diag(S)*W')
D_A = D;
V_A = Q*V;

%compare with
[V_full,D_full] = eig(W*diag(S)*W');

希望这有帮助。

一个。

I'd first perform the so called 'thin' QR factorization of W, then compute the eigenvalue decomposition of R*diag(S)*R', then use this to compute the eig decomposition of A.

N = 10;
n=3;
S = 2*(rand(1,n)>0.5)-1;
W = rand(N,n);

[Q,R] = qr(W,0);
[V,D] = eig(R*diag(S)*R');

%this is the non rank-deficient part of eig(W*diag(S)*W')
D_A = D;
V_A = Q*V;

%compare with
[V_full,D_full] = eig(W*diag(S)*W');

Hope this helps.

A.

北方的韩爷 2024-10-09 08:17:06

MATLAB 实际上有一个用于检索最大(或最小)特征值和向量的实现。使用 eigs(A,k) 获取最大的 k。

为了仅获得最大的,可以使用幂迭代方法,或者更好的瑞利商迭代。

MATLAB actually has an implementation for retrieving the largest (or smallest) eigen values and vectors. Use eigs(A,k) to get the k largest.

To get the largest only, one can use the Power iteration method, or better yet Rayleigh quotient iteration.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文