gpt4 book ai didi

algorithm - Modelica 中简单随机数生成的分配问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:37 26 4
gpt4 key购买 nike

我是 Modelica(Dymola 环境)的新手,我感到非常绝望/沮丧,因为我无法在 Modelica 中解决像随机数生成这样简单的问题,我希望你能帮助我。

简单函数 random 使用输入种子 seedIn[3] 生成 0 到 1 之间的随机数,并生成输出种子 seedOut[3] 用于下一个时间步长或事件。电话(z,seedOut) = random(seedIn);工作得很好。

问题是我无法在 Modelica 中找到一种方法来通过使用 seedOut[3] 作为下一个 seedIn[3] 来随时间计算此分配,这非常令人沮丧。

我的简单程序如下所示:

*model Randomgenerator
Real z;
Integer seedIn[3]( start={1,23,131},fixed=true), seedOut[3];
equation
(z,seedOut) = random(seedIn);
algorithm
seedIn := seedOut;

end Randomgenerator;*

我已经尝试了几乎所有的算法分配、初始条件和方程式的可能性,但都没有奏效。我只是想在下一个时间步骤中使用 seedOut。一个问题似乎是,当进入算法部分时,既没有使用初始条件也没有使用方程部分的值。

最佳答案

使用“sample”和“reinit”函数,下面的代码将以“sample”中指定的频率计算一个新的随机数。注意seedIn的“起始值”的定义方式。

model Randomgenerator

Real seedIn[3] = {1,23,131};

Real z;
Real[3] seedOut;

equation
(z,seedOut) = random(seedIn);
when sample(1,1) then
reinit(seedIn,pre(seedOut));
end when;

end Randomgenerator;

“pre”函数允许使用变量的前一个值。如果不使用它,输出“z”将返回一个常量值。关于“reinint”函数的两件事,它需要使用“when”并需要“Real”变量/表达式,因此 seedIn 和 seedOut 现在被定义为“Real”。

我使用的简单“随机”生成器是:

function random

input Real[3] seedIn;

output Real z;
output Real[3] seedOut;

algorithm
seedOut[1] :=seedIn[1] + 1;
seedOut[2] :=seedIn[2] + 5;
seedOut[3] :=seedIn[3] + 10;

z :=(0.1*seedIn[1] + 0.2*seedIn[2] + 0.3*seedIn[3])/(0.5*sum(seedIn));

end random;

根据应用程序的不同,当然还有其他方法可以执行此操作。至少这会给你一些开始的东西。希望对您有所帮助。

关于algorithm - Modelica 中简单随机数生成的分配问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36265293/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com