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

MATLAB符号计算赋值时矩阵尺寸不匹配,求原因与解决方法

MATLAB符号计算矩阵尺寸不匹配问题排查与解决

在MATLAB中进行符号计算时出现矩阵尺寸不匹配报错,代码及报错信息如下:

原代码

syms xi eta
    N1 = ((1+xi)*(1+eta))/4;
    N2 = ((1-xi)*(1+eta))/4;
    N3 = ((1-xi)*(1-eta))/4;
    N4 = ((1+xi)*(1-eta))/4;
    Nxieta = [N1 N2 N3 N4];
    difNxieta = sym(zeros(2,4))
    for i = 1:4
        difNxieta(1,i) = diff(Nxieta(1:i),xi);
        difNxieta(2,i) = diff(Nxieta(1:i),eta);
    end

报错信息

Unable to perform assignment because the size of the left side is 1-by-1 and the
size of the right side is 1-by-2.

Error in sym/privsubsasgn (line 1128)
                L_tilde2 =
                builtin('subsasgn',L_tilde,struct('type','()','subs',{varargin}),R_tilde);

Error in sym/subsasgn (line 965)
            C = privsubsasgn(L,R,inds{:});

Error in Ae420_FEA_project>localstiffnessmatrix (line 55)
        difNxieta(1,i) = diff(Nxieta(1:i),xi);

问题原因

报错核心是索引错误:循环中使用Nxieta(1:i)会提取数组的前i个元素(比如i=2时是[N1 N2]),对这个1×i的符号数组求导后,返回的结果是同样1×i的导数数组。而左侧difNxieta(1,i)是一个1×1的位置,当i≥2时,右侧1×2的数组无法赋值到左侧1×1的位置,因此触发尺寸不匹配错误。

你原本想取第i个元素求导,应该用Nxieta(i)而非Nxieta(1:i),前者是单个符号变量,求导后返回1×1的结果,和左侧位置尺寸匹配。

修正后的代码

syms xi eta
N1 = ((1+xi)*(1+eta))/4;
N2 = ((1-xi)*(1+eta))/4;
N3 = ((1-xi)*(1-eta))/4;
N4 = ((1+xi)*(1-eta))/4;
Nxieta = [N1 N2 N3 N4];
difNxieta = sym(zeros(2,4));
for i = 1:4
    difNxieta(1,i) = diff(Nxieta(i),xi);  % 修正索引为单个元素
    difNxieta(2,i) = diff(Nxieta(i),eta); % 修正索引为单个元素
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:37:01