matlab - 仅更新一个矩阵元素进行迭代计算

标签 matlab for-loop matrix

我有一个 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/

相关文章:

matlab - 为什么我得到 "Unable to read file ' topo60c'. Matlab 中没有这样的文件或目录”错误?

c - 为什么 "movl $1, %edx"而不是 "movl $0, %edx"

python - Numpy根据条件选择行

java - 如何在 Matlab 中运行 java .jar

matlab - 如果 3 个碱基的 gcd 为 1,则在不使用大量 for 循环的情况下评估碱基的幂

.net - 在 winforms 中丢弃 ui 事件的简单解决方案?

javascript - 如何在 for 循环中使用 .getElementsByClassName() 来隐藏 HTML 元素

Python:如何在 For 循环中嵌套 plt.imshow() ?

c++ - 什么是最广泛使用的 C++ vector/矩阵数学/线性代数库,以及它们的成本和 yield 权衡?

arrays - 根据 MA​​TLAB 中另一个矩阵中的索引从矩阵中选择条目