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

Matlab有限差分法求解梁挠度RHS赋值维度不匹配报错解决

报错核心成因

该赋值维度不匹配错误的直接触发原因:你在循环中给RHS(i)这个单个标量位置赋值时,传入的右侧变量p是长度为N=6的全行向量,单元素位置无法存储长度为6的向量,直接触发报错。
除了显性的维度问题,你的代码还存在3个会导致结果完全错误的隐性逻辑问题:

  • 右端项物理公式写错:欧拉梁简支均布载荷的差分控制方程为EI*(u(i+1)-2u(i)+u(i-1))/dx² = w*x(i)*(L-x(i))/2,整理后右端项应为M(i)*dx²/EI,你误将EI写到了分子位置,计算出的挠度量级会完全偏离真实值。
  • 载荷项维度不匹配:你计算的p是包含首尾两个边界节点的全节点向量,但RHS只对应N-2个内部未知节点,不需要边界点的载荷值。
  • 刚度矩阵构造缺项:原循环逻辑漏了刚度矩阵最后一行的次对角元素,就算RHS维度修正完成,求解出的挠度也是错误的。

修正后可直接运行的代码
clear;
clc;
close all;

%%% 基础参数输入
L = 2;
I = 200000;
E = 2000000000;
EI = E * I;
w = 20000;

N = 6;
dx = L/(N-1);
x = linspace(0,L,N);
u = zeros(1,N);

%%% 简支梁边界条件:首尾挠度为0
u(1) = 0;
u(end) = 0;

%%% 计算各节点截面弯矩
M = w.*x.*(L-x)/2;
%%% 构建右端项:仅截取内部节点对应载荷,无需循环赋值,转置为列向量匹配矩阵求解维度
RHS = M(2:end-1)' * dx^2 / EI;

%%% 构造三对角刚度矩阵,补全原代码缺失的对角元素
stiffness = -2*eye(N-2,N-2);
for i = 1:N-3
    stiffness(i,i+1) = 1;
    stiffness(i+1,i) = 1;
end

%%% 求解未知节点挠度
u_unknowns = stiffness\RHS;
u(2:end-1) = u_unknowns;

%%% 结果绘制
plot(x,u,'-o','LineWidth',1.5)
xlabel('梁轴向位置 x')
ylabel('挠度 u')
grid on

排查这类报错的通用方法

后续再碰到「左右两侧元素数量不一致」的报错,直接在报错行加断点,分别查看左侧被赋值位置的维度、右侧待赋值内容的维度,90%以上的场景都是索引截取错误、向量行列方向不匹配、循环赋值时误传入全量数组导致的,不需要逐行通读代码就能快速定位问题。

注:如果运行后发现挠度数值不符合物理常识,优先检查弹性模量、截面惯性矩、梁长、载荷的单位是否统一,原代码未做单位匹配,可根据你实际使用的单位体系调整参数。

内容的提问来源于stack exchange,提问作者Cheng Kai Chew

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:27:17