如何与MATLAB中基质的对角线一起工作,而无需使用环



说我有一个矩阵,我想更改其元素。如何告诉MATLAB在(i,j)位置上元素?为了 示例:

matrix(i;j) ---> if i=j (then do something for example matrix(i;j)^2
                 else ( do something else)
matrix=rand(n)
  if (i=j)
   matrix(i,j)=(matrix(i.j))^
  else matrix(i,j)=matrix(i,j)*3
  end

现在如何到达矩阵的对角线?我是Matlab的新手,我还没有找到答案:我正在寻找提示或其他内容,但我无法使用循环!嘿,我得到了答案,但可以说我也希望相反的对角线在广场上我该怎么做?请任何帮助

> if a=1 2 3
>      4 5 6
>      7 8 9 i want a at the end to be a= 1  6  9
>                              12 25 18
>                              49 24 81

很明显,您不知道MATLAB的基础知识。在这里,我将尝试解释您需要的内容,但我鼓励您阅读编程MATLAB的基本文档。

如果您的矩阵称为A,则可以通过该元素的索引(行和列数(访问每个元素,例如A(2,3)为您提供第二行和第三列的元素。

diag(A)也将A的所有对角线元素作为向量。

您提到的可以以不同的方式完成,其中一些比其他方式更有效,但对于初学者来说可能更困难。最简单的方法之一是使用两个陆路。当第二个循环移动在矩阵的行上,而第二个循环在列上移动。目标是一一检查所有元素。

在这里,我们使用两个变量iijj来计数矩阵行和列。 ii在行上移动,因此它必须从矩阵所具有的1个行数量数为1。对于使用变量jj的列也是如此。此外,要查找矩阵的行数和列的数量,我们使用函数size

在两个前循环中,我们检查了元素是否在主角上是用ii==jj,如果不是,则您对该元素做其他事情。

for ii=1:size(A,1)
    for jj=1:size(A,2)
        if ii==jj
            A(ii,jj) = A(ii,jj)^2;
        else
            A(ii,jj) = A(ii,jj)*3;
        end
    end
end

更有效的解决方案如下:

diag(diag(A)).^2 + (tril(A,-1)+triu(A,1))*3

FIR部分计算一个对角矩阵,其元素在A的主对角线上。第二部分获得了矩阵的上部和下三角部分。

示例:

A = [1 2 3 4;
    1 2 3 4;
    4 3 2 1;
    4 3 2 1];

>> diag(diag(A))
ans =
     1     0     0     0
     0     2     0     0
     0     0     2     0
     0     0     0     1

>> (tril(A,-1)+triu(A,1))
ans =
     0     2     3     4
     1     0     3     4
     4     3     0     1
     4     3     2     0

其中

diag(diag(A)) + (tril(A,-1)+triu(A,1)) equals to A

最新更新