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

Matlab报错求助:赋值右侧非单例维度多于左侧非单例下标

解决Matlab报错:"Assignment has more non-singleton rhs dimensions than non-singleton subscripts"

嘿,这个报错我太熟了!说白了就是你在给变量或者数组元素赋值的时候,右边的值的维度和左边要接收的位置的维度完全对不上。举个简单例子:你想给一个单个的数组元素T(1,1)赋值,结果右边塞了个20×20的完整温度矩阵,这肯定会炸;或者左边是一维数组,右边是二维数组,维度不匹配都会触发这个错误。

结合你给出的热传导代码片段来看,前面的参数定义(比如Lx、Ny、alpha这些)都是标量,暂时不会出问题,但后面的Fo = alpha*deltaT./d...被截断了,推测你后面应该是在做有限差分的温度场更新——这也是这类报错最常出现的环节。

给你列几个你大概率会踩的坑,以及对应的解决思路:

  • 坑1:更新温度场时维度不匹配
    比如你定义了T = zeros(Nx,Ny);,然后直接写T = T(2:end-1,2:end-1) + Fo*(...);——左边是Nx×Ny的矩阵,右边却是(Nx-2)×(Ny-2)的内部节点矩阵,维度差了一圈,自然报错。
    修正方法:先搞个临时矩阵存新温度场,再给内部节点切片赋值:
    T_new = T; % 先复制当前温度场
    % 只更新内部节点,维度匹配
    T_new(2:Ny-1, 2:Nx-1) = T(2:Ny-1,2:Nx-1) + Fo*(...
        T(3:Ny,2:Nx-1) + T(1:Ny-2,2:Nx-1) + T(2:Ny-1,3:Nx) + T(2:Ny-1,1:Nx-2) - 4*T(2:Ny-1,2:Nx-1)...
    );
    T = T_new; % 最后统一替换成新温度场
    
  • 坑2:不小心把标量运算搞成了数组运算
    比如计算Fo的时候,如果dx不小心变成了数组(比如你之前误操作定义了dx为矩阵),那Fo也会变成矩阵,后面和温度场运算时就容易出现维度不匹配。你可以先检查size(Fo),确保它是标量(输出1 1)。

最后给你个快速定位错误的小技巧:
Matlab报错时会直接告诉你错误发生在第几行,直接跳过去,分别用size()函数查看赋值语句左右两边的维度——比如size(左边变量)和size(右边变量),一看就知道哪里维度对不上了。如果没看到行号,就把代码拆成小段逐步运行,找到触发错误的那几行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:02:08