Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何使矩阵的对角线等于另一个natrix对角线?_Matlab - Fatal编程技术网

Matlab 如何使矩阵的对角线等于另一个natrix对角线?

Matlab 如何使矩阵的对角线等于另一个natrix对角线?,matlab,Matlab,我想得到这个:如果 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 这意味着对角线,我用正方形做的,也是相反的对角线 矩阵中的其他元素我用3乘以。。所以我 到目前为止: 如果我在c

我想得到这个:如果

 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
这意味着对角线,我用正方形做的,也是相反的对角线 矩阵中的其他元素我用3乘以。。所以我 到目前为止:

如果我在comand窗口中执行此操作,则此操作有效,但我希望将其作为 功能!提前谢谢


使用逻辑索引更容易。如果要将其用作函数,只需使用
function a=myfunc(a)


使用逻辑索引的一种更短、计算更快的替代方法是使用元素级乘法和元素级幂

% function b = myfun(a)
n = 10000
a = randi(10,n);
I = eye(size(a,1),'logical');
b = a.^2.*I + a.*3.*~I;
% end

您的格式化有点疯狂,请考虑将帖子正确格式化。如果我将我编写的内容放入函数中,它将无法工作,因为行c(1:n+1:n^2)=0,这就是我的问题!
% random matrix
n = 5;
A = randi(10,n);
% here you can do:
% function A = myfunc(A)

% diagonal indexes
diagIdxs1 = eye(size(A),'logical');
diagIdxs2 = fliplr(diagIdxs1);
diagIdxs = diagIdxs1 | diagIdxs2;
% do operations on diagonals and on non-diagonals
A(diagIdxs) = A(diagIdxs).^2;
A(~diagIdxs) = A(~diagIdxs).*3;
% function b = myfun(a)
n = 10000
a = randi(10,n);
I = eye(size(a,1),'logical');
b = a.^2.*I + a.*3.*~I;
% end