我创建了一个简单的Simulink模型,它添加了两个信号:
控制此模型的代码如下:
clear X Y Result
data=ones(1,5);
X=timeseries(data);
Y=timeseries(data);
output = sim('model_test','StopTime',stop_time);
Result = output.get('Res');
显然,我希望得到以下结果,一个包含[2 2 2 2 2]的矩阵。 但是,我的结果如下所示:
结果是1x1x27双倍而不是希望的1x5双倍。 你知道我要改变什么吗?我的代码是错误的还是我必须更改simulink模型中的设置?提前谢谢!
答案 0 :(得分:4)
问题在于如何构建输入数据。
您用于timeseries
构造X
和Y
的语法,使得它们在时间等于0,1,2,3和4秒时的标量值为2。您可以通过查看X.Time
和X.Data
来查看此内容。
根据您的预期,您似乎希望将它们定义为每个时间步的5个元素向量。这将涉及使用
>> X = timeseries(ones(1,5),0);
或类似的东西,具体取决于您要定义的时间点数。以上仅在时间= 0秒时定义数据。再次,查看MATLAB Workspace中的变量来确认这一点。 (当然,如果你想在每个时间步都有相同的值,那么你应该只使用一个常量块而不是一个From Workspace块。)
输出(与输入一样)显示为3D矩阵,因为第三个维度是时间。对于模型所采用的每个模拟时间步长,您将获得一个信号值。在你的模型中它是一个标量,但一般来说它将/可以是任何二维矩阵。得到1x1x27的结果是因为你的信号是标量(1x1位)和27个时间步长(x27位)。