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

MATLAB用指定值填充方阵下副对角线时出现全NaN问题求助

问题解决:Matlab下副对角线赋值出错导致全NaN

你的核心问题是变量名使用了逗号,Matlab里变量名只能包含字母、数字和下划线,逗号是用来分隔多个变量的符号,所以你写的W_res,DLR会被解析成两个独立变量:W_res和DLR。

初始化时zeros(N,N)只给W_res赋了全零矩阵,DLR完全没被初始化(属于未定义状态),后续你用W_res,DLR(...)这种写法进行赋值时,Matlab会因为DLR未定义而报错,最终导致矩阵全为NaN。

修正后的代码示例

先把变量名改成合法的(比如W_res_DLR),然后用几种正确的方式给下副对角线赋值:

r = 0.5;
N = 4;
% 初始化合法命名的全零矩阵
W_res_DLR = zeros(N,N);

% 方法1:用diag生成下副对角线的逻辑索引
W_res_DLR(logical(diag(ones(1,N-1), -1))) = r;

% 方法2:直接定位行和列,赋值对角线
W_res_DLR(2:N, 1:N-1) = diag(repmat(r, 1, N-1));

% 方法3:循环逐个赋值(直观易懂)
for i = 1:N-1
    W_res_DLR(i+1, i) = r;
end

额外说明

  • 赋值时不需要写r*ones(1,N-1),Matlab会自动把标量r广播到所有选中的位置,直接写= r更简洁高效。
  • 下副对角线的位置规律是:行号 = 列号 + 1,所以用循环或者索引(2:N,1:N-1)都能精准定位。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 17:09:55