首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >默认表达式可以引用函数声明中的其他输入吗?

默认表达式可以引用函数声明中的其他输入吗?
EN

Stack Overflow用户
提问于 2019-12-06 10:46:45
回答 2查看 61关注 0票数 1

在Modelica clip中,我想实现一个名为clip,它的工作方式类似于Wolfram语言中的Clip。即该函数将获取一个值x的列表,并返回一个长度相同的向量y,其中对于每个组件,我们都有一个分段函数。

代码语言:javascript
复制
y_i := x_i for min ≤ x_i ≤ max, v_min for x_i < min, and v_max for x_i > max

因此,我们应该看到以下结果:

代码语言:javascript
复制
clip( {-3,-2,-1,0,1,2,3} , {-2,2} )           // { -2, -2, -1, 0, 1, 2, 2 }
clip( {-3,-2,-1,0,1,2,3} , {-2,2}, {-10,10} ) // { -10, -2, -1, 0, 1, 2, 10 }
clip( {-3,-2,-1,0,1,2,3} )                    // { -1, -1, -1, 0, 1, 1, 1 }

My 如下所示:

代码语言:javascript
复制
function clip "Clip values so they do not extend beyond a given interval"
    input Real x[:] "List of values to be clipped";
    input Real[2] x_range := {-1, 1} "Original range [min,max] given as a list (default = {-1,1})";
    input Real[2] extremes := x_range "Extreme values [v_min, v_max] given as a list (default {min,max})";
    output Real y[size(x, 1)] "Clipped values";
protected
    Integer n := size(x, 1) "Length of the input vector x";
algorithm
    for i in 1:n loop
        y[i] := if x[i] < x_range[1] then extremes[1] elseif x[i] > x_range[2] then extremes[2] else x[i];
    end for;
end clip;

注意,在这里,extremes的默认表达式引用输入x_range,输入x_range本身具有默认表达式{-1, 1}

不幸的是,我在Wolfram SystemModeler 12.0和OpenModelica (OMEdit v.1.13.2)中得到了错误的结果,甚至无法编译。

我的问题是:

specs?

  • Regardless of (1.)
  1. 是上述功能的合法模型库代码。还有别的办法吗?
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-06 11:30:26

  1. 是的,这是合法的。输入的默认值依赖于其他输入等,这是模型specification.

显式允许的

https://specification.modelica.org/master/Ch12.html#positional-or-named-input-arguments-of-functions

默认值可能依赖于其他输入(函数中这些依赖项必须是循环的)--然后这些其他输入的值将被替换为默认值(如果该输入的默认值依赖于另一个输入,则可以重复此过程)。输入的默认值可能不依赖于函数中的非输入变量。

我还没查过alternatives.

票数 2
EN

Stack Overflow用户

发布于 2019-12-06 18:57:19

可以使用

  1. 数组构造来代替for-循环:

Y := {如果xi < x_range1,则extremes1 x_range2 >x_range2,则表示I在1:n};

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59211629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档