Matlab实现nxn矩阵两条对角线元素求和 避免重复计算中间元素
Matlab 计算n×n矩阵两条对角线元素总和的方法
实现逻辑
- 分别计算主对角线、反对角线的元素和,再针对奇数阶矩阵的重复中心元素做去重处理
- 主对角线元素可直接用
diag(A)提取,反对角线元素可通过将矩阵左右翻转后再提取主对角线得到(即diag(fliplr(A))) - 当n为奇数时,两条对角线共享中心位置
( (n+1)/2, (n+1)/2 )的元素,直接加总会重复计算,需额外减去一次该元素
可直接复用的封装函数
function total = sumTwoDiagonals(A) n = size(A, 1); % 校验输入为方阵 if size(A, 2) ~= n error('输入参数必须为n×n方阵'); end sumMain = sum(diag(A)); sumAnti = sum(diag(fliplr(A))); % 奇数阶矩阵去重 if mod(n, 2) == 1 midIdx = (n + 1) / 2; total = sumMain + sumAnti - A(midIdx, midIdx); else total = sumMain + sumAnti; end end
测试示例
奇数阶矩阵测试(3阶)
输入矩阵:
A = [1 2 3; 4 5 6; 7 8 9];
主对角线和为1+5+9=15,反对角线和为3+5+7=15,中心元素5重复,预期总结果为15+15-5=25
调用函数:sumTwoDiagonals(A),输出结果为25,符合预期。
偶数阶矩阵测试(2阶)
输入矩阵:
B = [1 2; 3 4];
主对角线和为1+4=5,反对角线和为2+3=5,无重复元素,预期总结果为10
调用函数:sumTwoDiagonals(B),输出结果为10,符合预期。
单行快捷实现
如果不需要封装和参数校验,可以直接用一行代码完成计算:
total = sum(diag(A)) + sum(diag(fliplr(A))) - (mod(size(A,1),2)==1)*A((size(A,1)+1)/2,(size(A,1)+1)/2);
逻辑说明:当n为奇数时,mod(n,2)==1返回逻辑值1,会减去中心元素;偶数时返回0,不会做额外扣除,自动完成去重。
内容的提问来源于stack exchange,提问作者Julia Bouchard
相关产品推荐
相关产品推荐

