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

关于Dymola中interpolateTrajectory命令报错的技术咨询

解决Dymola中interpolateTrajectory的"Failed to expand InterpolateTrajectory"报错

核心输入要求梳理

interpolateTrajectory的输入必须满足两个硬条件:

  • 输入是2维实数矩阵,第一列为严格递增的时间戳,后续列是对应时刻的待插值变量值
  • 矩阵维度在编译/初始化阶段可确定,不能是无法解析的动态结构或非数值类型

针对你三种尝试的问题分析

  1. 直接导入.mat文件:
    该函数不支持直接传入文件路径,必须先用readMatrix将文件内容加载为符合格式的矩阵,且要确认.mat内的矩阵结构是「第一列时间+后续列变量」的形式。

  2. 传入{"data"}:
    这是字符串数组,不是函数要求的数值矩阵,类型不匹配必然触发报错。

  3. 传入readMatrix或size输出:

    • readMatrix的输出如果结构错误(比如时间列不递增、不是2维矩阵)会导致报错,需要先验证矩阵格式
    • size的输出是维度数组,完全不符合轨迹数据的要求,肯定无法被解析

具体解决步骤与示例

1. 处理本地.mat文件生成的10行矩阵

// 读取.mat中的矩阵数据
trajMatrix = readMatrix("your_10row_file.mat", "data");
// 验证时间列严格递增(必须步骤,否则插值逻辑会崩溃)
assert(all(diff(trajMatrix[:,1]) > 0), "时间列必须严格单调递增");
// 调用插值函数,currentTime为当前需要插值的时间点
interpResult = interpolateTrajectory(trajMatrix, currentTime);

2. 处理仿真输出的15行矩阵

仿真输出的.mat通常会把时间和变量分开存储,需要先合并成标准轨迹矩阵:

// 读取仿真输出的时间和变量数组
simTime = readMatrix("sim_output.mat", "time");
simVariable = readMatrix("sim_output.mat", "target_variable");
// 合并为「时间列+变量列」的2维矩阵
simTrajMatrix = [simTime, simVariable];
// 执行插值
simInterpResult = interpolateTrajectory(simTrajMatrix, currentTime);

额外注意事项

  • 如果矩阵有多列变量,interpolateTrajectory会返回对应时间点的所有变量插值结果,结果维度与变量列数一致
  • 确保矩阵中没有NaN或Inf值,否则会导致解析失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 21:12:50