Engee功能块中的代码放置
使用区块 Engee Function 您可以创建根据您设置的算法行为的模型元素。 在以下情况下使用这些块是有意义的:
*如果您已经拥有Julia代码形式的必要的,经过测试的算法,或者如果您很容易自己编写它;
*如果在Julia中编写算法比从图形组件创建算法更容易;
*如果您需要的块的行为不是由任何现有的Engee块设置的,或者不能使用图形块设置。
街区 Engee Function 可以存储计算状态变量,不像块 MATLAB Function MATLAB/Simulink环境。 所以它们也可以用来替换块。 S Function.
让我们使用Engee函数块计算向量的数学期望和方差
让我们告诉你如何使用模型 Engee Function 计算应用于块输入的任意长度的向量的统计特性。
基于这样一个事实,即在块内附加库的连接 Engee Function (例如, Statistics.jl)不支持,我们根据公式在块中实现计算:
哪里 -样本的数学期望 , -方差, -选择项目的数量。
以下代码允许您实现这些计算(放置在块内 Engee Function):
struct Block <: AbstractCausalComponent; end
# Вычисление выходных сигналов блока
# Первый аргумент `t` - время, остальные - значения входных сигналов
function (c::Block)(t::Real, x)
N = length(x);
μ = sum(x)/N;
σ = sqrt( sum( (x .- μ).^2 ) / (N-1) )
return (μ, σ)
end
我们将用贝塞尔校正计算方差(从这里开始 N-1).
您可以通过单击块设置中的"编辑源代码"按钮打开编辑器来输入或编辑此代码。 Engee Function (当你双击块或在按一个按钮 对于所选择的方框).
值得关注的是该单元的输入和输出的配置。
图中显示的三个面板显示了块的属性、其输入和输出端口的配置以及传递给代码的参数的设置。
*在块属性(选项卡 Main)你需要注意输入和输出的数量–我们的例子有一个输入和两个输出信号;
*在端口属性(选项卡 Ports)我们指示输入端口被调用 x 将具有尺寸 -1 (在编译模型时继承自前一个块),两个输出信号的维度与名称 μ 和 σ 指定为 () –这是标量的维度;
*在选项选项卡上"(Parameters)我们只表示块没有传递给代码的附加参数(数量等于 0).
信号维度可以使用命令找到 size. 终端将告诉您在转移到块时指定哪个维度。 Engee Function 标量、向量或矩阵。
我们可以指定输入向量的具体长度。 (5,) 观察描述一维元组的语法(Tuple),或者我们可以依赖编译器并将输入信号的维度定义为inherited(等于 -1).
让我们把我们的块放在以下环境中(模型 engee_function_basics.engee):
让我们使用程序控制命令运行模型并构建一个图表。:
mName = "engee_function_basics"
model = mName in [m.name for m in engee.get_all_models()] ? engee.open( mName ) : engee.load( "$(@__DIR__)/$(mName).engee" );
data = engee.run( mName )
print( "μ = $(data["μ"].value[1]), σ = $(data["σ"].value[1])" )
该图向我们展示了序列的数学期望和方差是 [2,3,4,5,6] 它们等于值4.0和1.58。
结论
到块应用程序 Engee Function 我们在这个例子中没有考虑的是:
*添加保存在文件中的外部代码 *.jl,通过指令 include
*设置从全局Engee变量空间接收的块参数,
*更改块参数,即创建块 Engee Function 具有时变参数。
您将在其他演示示例中找到它们。