gpt4 book ai didi

matlab - 如何在 MATLAB 中求解只有一个分量的线性系统

转载 作者:太空宇宙 更新时间:2023-11-03 20:27:20 24 4
gpt4 key购买 nike

我需要求解线性系统

A x = b

这可以通过以下方式有效地完成

x = A \ b

但是现在 A 非常大,我实际上只需要一个组件,比如 x(1)。有没有比计算 x 的所有组件更有效地解决这个问题的方法?

A 不是稀疏的。在这里,效率实际上是一个问题,因为这是为许多 b 完成的。

此外,存储 K 的倒数并仅将其第一行乘以 b 是不可能的,因为 K 的条件很差。在这种情况下,使用 \ 运算符会使用 LDL 求解器,并且在显式使用逆运算时会失去准确性。

最佳答案

我认为从技术上讲,您不会比非常优化的 Matlab 例程得到加速,但是如果您了解它是如何求解的,那么您可以只求解 x 的一部分。例如 following.例如,在传统求解器中,您使用 backsub 进行 QR 求解。在 LU solve 中,您同时使用 back sub 和 front sub。我可以得到LU。不幸的是,由于它的解决方式,它实际上是从最后开始的。对于将同时使用两者的 LDL 也是如此。这并不排除可能有更有效的方法来解决您所拥有的问题。

 function [Q,R] = qrcgs(A)
%Classical Gram Schmidt for an m x n matrix

[m,n] = size(A);
% Generates the Q, R matrices
Q = zeros(m,n);
R = zeros(n,n);
for k = 1:n
% Assign the vector for normalization
w = A(:,k);
for j=1:k-1
% Gets R entries
R(j,k) = Q(:,j)'*w;
end

for j = 1:k-1
% Subtracts off orthogonal projections
w = w-R(j,k)*Q(:,j);
end
% Normalize
R(k,k) = norm(w);
Q(:,k) = w./R(k,k);
end

end

function x = backsub(R,b)
% Backsub for upper triangular matrix.
[m,n] = size(R);
p = min(m,n);
x = zeros(n,1);

for i=p:-1:1
% Look from bottom, assign to vector
r = b(i);
for j=(i+1):p
% Subtract off the difference
r = r-R(i,j)*x(j);
end
x(i) = r/R(i,i);
end

end

关于matlab - 如何在 MATLAB 中求解只有一个分量的线性系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50613928/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com