我收到此错误“指定了太多的返回参数。仅指定一个。”
我理解这是什么意思,但这没有任何意义。因为我的simulink文件中已经有两个输出块和作用域。
该错误的原因可能是什么?
这是我的“错误”代码:
[tout,yout]=sim("TP_sub.slx")
答案 0 :(得分:1)
您的simulink模型没有问题,问题在于您如何调用sim
函数。如果您查看docs,就会发现sim
仅返回一个输出:
simOut = sim(modelname)
在早期版本的Matlab中,可以将状态和输出添加为其他输出参数,但是当前您只能输出simOut
对象。
该simOut
对象将包含一些信息,但默认情况下将不包含仿真时间和模型输出。
您可以通过向sim
调用中添加其他参数(完整列表here)来获取此数据。例如,使用'vdp'
模型,
mdl = 'vdp';
load_system(mdl);
simOut = sim(mdl, 'SaveOutput','on','OutputSaveName','yout', 'SaveTime', 'on')
您将获得
simOut =
Simulink.SimulationOutput:
tout: [64x1 double]
yout: [64x2 double]
SimulationMetadata: [1x1 Simulink.SimulationMetadata]
ErrorMessage: [0x0 char]
从中可以获得仿真时间,通过
输出1和2t = simOut.tout;
y1 = simOut.yout(:,1);
y1 = simOut.yout(:,2);
在工作空间中获取数据的另一种方法是添加To Workspace块,就像您已经在做的那样。
答案 1 :(得分:0)
我理解这是什么意思,但这没有任何意义。
该错误的原因可能是什么?
很显然,您不知道以下示例中的a
和b
可能会完全不同:
[x,y] = myFunction(someValue)
a = [x,y]
b = myFunction(someValue)
至少如果函数myFunction
是“ mex
函数”(并且大多数与Simulink相关的函数都是!),则可以用完全不同的方式定义函数myFunction
返回值取决于给定的返回值数量:
[x,y]=myFunction(someValue)
可能返回两个10x20矩阵,而b=myFunction(someValue)
可能会返回一个数字(1x1矩阵)。
您不能仅仅使用[x,y]=someFunction(someValue)
将函数someFunction
返回的单个值“拆分”为两部分!
sim
函数返回一个值。
答案 2 :(得分:0)
感谢您的评论。但是实际上有可能从sim函数获得多个输出。您只需更改“模型配置设置>数据导入/导出窗格并取消选中单个模拟”