首页 文章

如何在matlab中使用矩阵的对角线而不使用循环?

提问于
浏览
-2

假设我有一个矩阵,我想改变它的元素 . 如何告诉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

1 回答

  • 0

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

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

    此外 diag(A)A 的所有对角元素作为向量 .

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

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

    在两个for循环中,我们使用 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
    

    第一部分使用 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
    

相关问题