假设我有一个矩阵,我想改变它的元素。
如何告诉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
答案 0 :(得分:0)
很明显,您不了解MATLAB的基础知识。在这里,我将尝试解释您需要的内容,但我鼓励您阅读MATLAB编程的基本文档。
如果您的矩阵被称为A
,则可以通过该元素的索引(行数和列数)访问每个元素,例如A(2,3)
为您提供第二行和第三行的元素柱。
同样diag(A)
将A
的所有对角元素作为向量。
你提到的可以用不同的方式完成,其中一些比其他方式更有效,但对初学者来说可能更难。最简单的方法之一是使用两个for循环。第一个循环在矩阵的行上移动,而第二个循环在列上移动。目标是逐个检查所有元素。
在这里,我们使用两个变量ii
和jj
来计算矩阵行和列。
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