You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:24:03