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
相关产品推荐
相关产品推荐

