【问题标题】:Using matlab function in simulink error在simulink错误中使用matlab函数
【发布时间】:2016-08-08 10:32:35
【问题描述】:

我是 Simulink 新手,但我需要使用 matlab 函数。

我创建了一个“MATLAB Function1”模块,其中一个输入(来自另一个模块的时间信号)和一个输出(三个信号包裹在一个矩阵中,显示在 Scope 模块中)。

这里是matlab函数块里面的代码:

function outputSignal  = myFunction(input_signal)
coder.extrinsic('lsim');

time = [1:1:length(input_signal)];

k_dia = [19.5 13 9.9];
k_dia = k_dia*10^-3;

outputSignal = zeros(length(time), length(k_dia));

for j = 1:length(k_dia)
    A = [-k_dia(j) 0; k_dia(j) -k_dia(j)];
    B = [1 0]';
    C = [1 1];
    D = 0;
    sistem = feval('ss', A, B, C, D);
    outputSignal(:,j) = lsim(sistem, input_signal, time);
end
end

以前,由于代码生成问题,我在使用函数“ss”和“lsim”时遇到了问题,但我应该使用 feval 和 coder.extrinsic 解决它们。现在我有以下错误:

When simulating the response to a specific input signal, the input data U must be a matrix
of numeric values with at least two rows (samples) and without any NaN or Inf.  

我不明白问题是否仍然存在于这些函数上,或者我在如何在 simulink 中使用 matlab 函数时犯了错误。

编辑:我知道问题是因为 lsim 需要一个至少长度为 2 的 input_signal,而我的系统在每个时间步都为一个单一值的函数提供输入。因此,如果时间是 10 步,并且从前一个块生成的一系列值是 [1 2 3 4 5 6 7 8 9 10],我希望将其作为函数的输入:

  • [1] 在第 1 步,
  • [1 2] 在第 2 步,
  • [1 2 3] 在第 3 步, ....
  • [1 2 3 4 5 6 7 8 9 10] 在第 10 步。

当然,因为 lsim 不能使用一个值,所以在第 1 步我可以使用默认输出值。

我想我需要一个块来记住时间步骤中发生的事情 之前,类似于 Scope 块,但有一个输出。

【问题讨论】:

  • 如果你能提供你用来测试你的模型的输入信号就好了。
  • 您有 3 个系统,正如您的循环所证明的那样,对 sslsim 进行了 3 次独立调用。而是使用提供的 Simulink State-Space 模块。您的问题没有解决您必须使用 Matlab 功能块的原因。

标签: matlab function simulink ss


【解决方案1】:

由于您的系统是时不变的,您可以创建三个独立的状态空间系统,每个系统都有不同的参数值矩阵,并提供一个由三个分量组成的向量作为输入信号,我将其留空,因为我不知道您想发送到哪里从。

【讨论】:

  • 对不起,我听不懂你在说什么。请看一下编辑后的问题
  • @leonardovet 您不需要在 Simulink 中进行 lsim。 simulink的整个想法是让matlab为你做模拟
猜你喜欢
  • 1970-01-01
  • 2013-05-29
  • 2013-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多