Diagonal/Symmetric matrix
3 次查看(过去 30 天)
显示 更早的评论
Hi, I'm new to matlab. I wanted to make a program that takes a nxn matrix and outputs a symetric matrix such that the elements are the average of the 2 diagonals elements of the original matrix. I suceeded with a 3x3, but it won't work for a nxn. Here's my code so far.
clear
clc
PA = [81 3 15;
43 67 90;
22.5 10 68]
for i=1:length(PA)
OD(i,i) = PA(i,i);
end
for i=2:length(PA)
OD(1,i) = (PA(1,i) + PA(i,1))/2;
OD(i,1) = OD(1,i);
end
OD(2,end) = (PA(end,2)+PA(2,end)) / 2;
OD(end,2) = OD(2,end)
0 个评论
采纳的回答
John D'Errico
2019-11-9
I don't even think your code works for a 3x3 matrix. The matrix it produces is
OD
OD =
81 23 18.75
23 67 50
18.75 0 68
Give the matrix PA, note that the (3,2) element does not seem to be correct, at least by my guess as to what you really want to do.
However, I think what you may be asking is how to do the following computation:
OD = (PA + PA.')/2
OD =
81 23 18.75
23 67 50
18.75 50 68
I'm not sure why you would want to write a complicated routine using loops to do exactly that. Note that what I wrote will work for any square matrix. And it took one line of code.
2 个评论
John D'Errico
2019-11-9
This is the standard way in MATLAB to symmetrize a matrix, having learned it on the order of 30 years ago.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!