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

在Matlab函数中调用Simulink并动态修改输入参数的运行问题

问题原因

Matlab 函数的工作区是独立的局部作用域,和全局base工作区不互通。默认情况下Simulink运行时会从base工作区读取所需变量,你把仿真逻辑封装进函数后,模型找不到对应变量就会报错。

解决方案
  • 方案1:指定仿真读取的工作区为当前函数作用域,最简单直接
    仅需修改sim调用语句,添加SrcWorkspace参数即可,代码如下:
function [Out] = Function(Var1, Var2 ....)
        % 加参数指定从当前函数工作区读取变量
        simout = sim('Simulinkblock', 'SrcWorkspace', 'current');
        Yx = simout.yout{1}.Values.Data;
        Cx = Yx(end);
        Out = Cx; % 补充给输出变量赋值的逻辑,原代码缺失这步会报错
end
  • 方案2:使用Simulink.SimulationInput对象传参,更适合多批次改参数的场景
    你需要多次启停仿真修改参数,用这个方案可以避免变量作用域冲突,参数传递更清晰,示例代码:
function [Out] = Function(Var1, Var2 ....)
        % 初始化仿真输入对象
        simIn = Simulink.SimulationInput('Simulinkblock');
        % 给模型需要的所有变量赋值,示例给参数a、b赋值为入参Var1、Var2
        simIn = setVariable(simIn, 'a', Var1);
        simIn = setVariable(simIn, 'b', Var2);
        % 运行仿真
        simout = sim(simIn);
        Yx = simout.yout{1}.Values.Data;
        Cx = Yx(end);
        Out = Cx;
end
注意事项
  • 不推荐用assignin把变量写入base工作区的方案,会污染全局工作区,多仿真并行运行时极易出现变量冲突。
  • 原代码没有给输出变量Out赋值,运行会报错,需要把你需要返回的结果赋值给Out。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 03:21:04