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

如何在MATLAB中生成主对角线为c(i)+c(i+1)的N阶矩阵?

实现N阶对角矩阵C的多种方法(无需依赖diag()或spdiag())

核心结论

不必非要使用diag()或spdiag()函数,用基础循环、向量索引操作都能完成需求,下面是几种可行的实现方式:

方法1:单循环实现(修复嵌套循环问题)

你之前用嵌套循环没成功,大概率是没必要嵌套——主对角线只需要遍历行/列索引相等的位置,单循环足够:

N = 3;
c = randi([1,20],N+1,1,"double");
C = zeros(N,N); % 先初始化N阶全零矩阵
for i = 1:N
    C(i,i) = c(i) + c(i+1); % 给主对角线第i个位置赋值
end

说明:先初始化全零矩阵避免未定义元素,然后循环遍历主对角线的每个位置,直接计算并赋值对应的和即可。

方法2:向量索引直接赋值(无循环)

利用MATLAB的线性索引特性,直接定位主对角线元素并批量赋值,代码更简洁:

N = 3;
c = randi([1,20],N+1,1,"double");
C = zeros(N,N);
% 主对角线的线性索引为1, 1+N+1, ..., 1+(N-1)*(N+1),即1:N+1:N^2
C(1:N+1:N^2) = c(1:N) + c(2:N+1);

说明:c(1:N) + c(2:N+1)直接生成所有主对角线元素的数值数组,再通过线性索引一次性赋值到主对角线上。

方法3:用diag()实现(最简洁的方式)

如果你觉得diag()用起来顺手,这也是非常高效的方案:

N = 3;
c = randi([1,20],N+1,1,"double");
diag_vals = c(1:N) + c(2:N+1);
C = diag(diag_vals);

说明:先计算主对角线的元素数组,再用diag()直接生成对角矩阵,代码量最少。

总结

三种方法都能满足生成指定矩阵的需求:

  • 单循环逻辑直观,适合刚接触MATLAB的用户理解;
  • 向量索引赋值兼顾高效和可读性;
  • diag()是最简洁的实现方式,但并非唯一选择。

内容的提问来源于stack exchange,提问作者Jonathan Frutschy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:50:57