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

Matlab ode15i维度不匹配报错原因及代码修正咨询

问题分析与解决方法

核心问题:初始条件维度不匹配

你遇到的维度错误根源在于**y0和yp0被定义为行向量**,而Matlab的ode15i求解器(以及所有ODE/DAE求解器)默认期望状态变量初始值为列向量。

当ode15i执行到内部代码meshsol(:,2) = y0 - h*yp0时:

  • meshsol(:,2)是一个2×1的列向量(对应求解器内部的网格解列)
  • 你传入的y0和yp0是1×2的行向量,计算y0 - h*yp0后得到的仍然是1×2行向量
  • Matlab尝试将行向量赋值给列向量时,会错误地触发广播机制,把行向量重复成2×2矩阵,最终导致"2×1左侧无法匹配2×2右侧"的报错

解决步骤

只需要把y0和yp0从行向量改为列向量即可,具体修改如下:

% 原代码(行向量)
y0 = [-0.5972 6.2068];
yp0 = 10000*[0.0006 1.0178];

% 修改为列向量(用分号分隔元素)
y0 = [-0.5972; 6.2068];
yp0 = 10000*[0.0006; 1.0178];

额外说明

你的StateII函数是显式ODE形式(yp = f(y)),而ode15i原本是用于求解隐式微分代数方程(DAE)的,但它完全兼容这种ODE场景——只要残差函数正确写成res = yp - f(y)的形式(你已经做到了),修改初始条件维度后就能正常运行。

事件函数myEventsFcnII的逻辑没有问题,修改初始条件后,y和yp会以列向量形式传入,y(1)、y(2)、yp(2)的索引访问依然有效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:36:06