我试图在MATLAB中将参数结构传递给S函数。我有一堆参数,我想避免像这样传递它们:
%MATLAB S函数语法的一般形式是: %[SYS,X0,STR,TS,SIMSTATECOMPLIANCE] = SFUNC(T,X,U,FLAG,P1,...,Pn)
我更希望传递包含所有参数的单个结构。我将数据加载到Model Workspace中:
首先我试过(回应菲尔):
function [sys,x0,str,ts,simStateCompliance] = system1(t,x,u,flag,DATA_HMMWV)
sizes.NumInputs = 2;
也
但是我收到了这个错误:
菲尔,这就是为什么我试图为S-Function添加另一个输入端口,我认为它必须进入那里。我也尝试过: sizes.NumInputs = 1;
另外,你确定DATA_HMMWV是参数吗?它在这个窗口中看起来与Param略有不同:
新:::: 2016年1月25日
菲尔,问题不在于我的派生功能,问题是我仍然没有将结构传递给函数。这是一张照片。请注意,数据在Model Workspace中,我将它(DATA_HMMWV)传递给函数,但是当我在第13行(调试模式)停止模拟时,DATA_HMMWV不在函数工作区中。因此,没有足够的输入参数传递给函数。此外,功能非常简单:
% function sys = mdlDerivatives(t,x,u,DATA_HMMWV)
sys = DATA_HMMWV.g;
%end mdlDerivatives
它只是试图从结构中获取参数。
答案 0 :(得分:0)
设置1:将数据作为结构加载到基础工作区并运行simulink模型
clear;
clc;
close all
PlantName = 'untitled';
open(PlantName)
TFinal = 10;
load DATA_HMMWV.mat
sim(PlantName, TFinal)
设置4:你的功能也应该有结构:
function [sys,x0,str,ts,simStateCompliance]=system1(t,x,u,flag,DATA_HMMWV)
以及您需要该结构的任何其他功能,例如:
case 1
sys = mdlDerivatives(t,x,u,DATA_HMMWV);
然后,
function sys = mdlDerivatives(t,x,u,DATA_HMMWV)
现在,你已经将结构传递给了1级S函数!