matlab s function 中的mdlDerivatives 的sys在 mdlOutputs中怎么接收?
时间: 2024-02-27 10:52:24 浏览: 185
matlab中sfunction的编写.docx
在 MATLAB S-Function 中,`mdlDerivatives` 和 `mdlOutputs` 方法都是用来计算模型的输出和导数的。 `mdlDerivatives` 计算模型的导数,而 `mdlOutputs` 计算模型的输出。在 `mdlDerivatives` 中,您可以计算模型的导数,并将其存储在 `sys` 结构中的 `dx` 字段中。在 `mdlOutputs` 中,您可以使用 `sys` 结构中的 `x` 和 `dx` 字段来计算模型的输出。
下面是一个简单的示例,演示如何在 `mdlDerivatives` 中计算导数并在 `mdlOutputs` 中使用它们计算输出:
```matlab
function [sys, x0, str, ts] = mySFunction(t,x,u,flag)
switch flag
case 0
[sys, x0, str, ts] = mdlInitializeSizes();
case 2
sys = mdlUpdate(t,x,u);
case 3
sys = mdlOutputs(t,x,u);
case {1, 4, 9}
sys = [];
otherwise
error(['Unhandled flag = ',num2str(flag)]);
end
function [sys, x0, str, ts] = mdlInitializeSizes()
sizes = simsizes;
sizes.NumContStates = 2;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 1;
sizes.NumInputs = 1;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [0; 0];
str = [];
ts = [0 0];
function sys = mdlUpdate(t,x,u)
sys = [];
function sys = mdlOutputs(t,x,u)
sys = x(1) + x(2)^2;
function sys = mdlDerivatives(t,x,u)
sys = struct('dx',zeros(2,1));
sys.dx(1) = x(2);
sys.dx(2) = -x(1);
```
在此示例中,`mdlDerivatives` 计算了 `dx` 并将其存储在 `sys` 结构中。在 `mdlOutputs` 中,我们使用 `x` 和 `dx` 来计算输出。注意,在 `mdlOutputs` 中,我们不需要显式地接收 `sys` 结构。在 MATLAB S-Function 中,`sys` 结构可以在 `mdlDerivatives` 和 `mdlOutputs` 之间自动传递。
阅读全文