arrays - 给定某些条件,为数组元素赋值
问题描述
假设我有向量
Real x[5]={1,2,3,4,5};
和
Real y[5]={0,0,0,0,0};
y
我想为给定某些条件的元素赋值x
,例如,对于x
大于或等于的每个元素3
,对应的y
应该设置为1
,对于每个x<3: y=sin(x)
在matlab中,我会写如下:
y(x>=3)=1;
y(x<3)=sin(x(x<3));
所以
x=[1 2 3 4 5]
结果是
y=[sin(1) sin(2) 1 1 1]
在 Modelica 中可以做类似的事情吗?如果可以,怎么做?
解决方案
不幸的是,Modelica 中没有数组过滤,所以x>=3
它不起作用,也没有任何可用的东西可以与之相比。
但是仍然有一些方法可以得到结果向量,这取决于你想要一个方程还是一个算法。在使用方程式的模型中,您可以例如使用带有一个迭代器的数组构造函数:
model DemoModel
Real x[5]={1,2,3,4,5};
Real y[:]= {if i >= 3 then 1 else sin(i) for i in x};
end DemoModel;
使用这种方法,所有元素都被一次分配。在模型中,它不可能只更新符合条件的值(或者至少我不知道该怎么做),因为:
- 在翻译过程中必须知道矢量大小
- 向量的每个元素都需要一个方程
使用过滤器,方程的数量会动态变化,具体取决于值x
和条件。
在函数内部你有更多的可能性(你可以有灵活的数组大小),但是当你在模型中使用函数的输出时,你又面临着同样的限制。
推荐阅读
- python - 如何处理内存错误:用于做解码器
- c# - 到 Azure ACI 的基本容器化 ASP.NET 3.1 Core 应用部署失败
- ios - SwiftUI - 根据 API 字段选择正确的视图类型
- hadoop - Hadoop 归档命令
- vb.net - 在 VB.NET 中,是否允许所有类型的变量使用隐式变量声明(= 新)?
- r - 防止将类属性设置为元素
- android - 在styles.xml 中为*all* 主题样式添加一个子项以避免重复代码
- python - 传输样本数组的最佳方式
- c# - 如何创建 ASP .NET MVC 5 解决方案?
- amazon-web-services - AWS 复合警报 - 自动扩展操作