我有一个 3x3 矩阵 A。我还计算了一个值,g,作为 A 的最大特征值。我试图将元素 A(3,3) = 0 更改为所有值从 0 到 1,增量为 0.10,然后更新每个值的 g。我希望所有其他矩阵元素保持不变。
我认为 for 循环将是执行此操作的方法,但我不知道如何仅更新矩阵中的一个元素而不将此更新存储为一个越来越大的矩阵。如果我调用 A(3,3) = p 处的元素(从而创建一个新矩阵 Atry),我能够(如下)获得我想要的从 0 到 1 的所有值。我不知道如何更新 Atry 以获得我想要的所有 g 值。正如预期的那样,代码的状态现在将为所有迭代提供相同的 g 值,因为我不知道如何使用不同的 p 值更新 Atry > 然后计算 g 的值。
任何有关如何执行此操作的建议或对我进行网络搜索的行话或短语的建议将不胜感激。
A = [1 1 1; 2 2 2; 3 3 0];
g = max(eig(A));
% This below is what I attempted to achieve my solution
clear all
p(1) = 0;
Atry = [1 1 1; 2 2 2; 3 3 p];
g(1) = max(eig(Atry));
for i=1:100;
p(i+1) = p(i)+ 0.01;
% this makes a one giant matrix, not many
%Atry(:,i+1) = Atry(:,i);
g(i+1) = max(eig(Atry));
end
最佳答案
这也将完成你想做的事情:
A = @(x) [1 1 1; 2 2 2; 3 3 x];
p = 0:0.01:1;
g = arrayfun(@(x) eigs(A(x),1), p);
分割:
- 将
A
定义为匿名函数。这意味着命令A(x)
将返回矩阵A
,其中(3,3)
元素等于x
。 - 定义您想要在矢量
p
中采取的所有步骤 - 然后使用
arrayfun
而不是实际循环来“循环”p
中的所有元素。
arrayfun
循环的函数不是 max(eig(A))
而是 eigs(A,1)
,即1
最大特征值。结果将是相同的,但 eigs 使用的算法更适合您的问题类型 - 而不是计算所有特征值,然后仅使用最大的特征值,您仅计算最大的一个。不用说,这要快得多。
关于matlab - 仅更新一个矩阵元素进行迭代计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12488005/