我是Modelica的新手,我想知道是否可以編寫一種動態規劃方程。假設時間被一個整數i離散化,並且在我的具體應用中,x是布爾值,f是x的布爾函數。Modelica時間依賴方程
x(t_i) = f(x(t_{i+d}))
其中d可以是正整數或負整數。當然,我會相應地初始化x,無論是對還是錯。
任何幫助或引用將不勝感激!
我是Modelica的新手,我想知道是否可以編寫一種動態規劃方程。假設時間被一個整數i離散化,並且在我的具體應用中,x是布爾值,f是x的布爾函數。Modelica時間依賴方程
x(t_i) = f(x(t_{i+d}))
其中d可以是正整數或負整數。當然,我會相應地初始化x,無論是對還是錯。
任何幫助或引用將不勝感激!
這是可能的。在Modelica中,時間離散化通常由編譯器進行,您必須關心方程式(連續動力學)。否則,如果要在離散時間點生成事件,可以使用when語句來完成。 我建議你看看Introduction to Object-Oriented Modeling and Simulation with OpenModelica (PDF format, 6.6 MB) - Peter Fritzson最近的一個教程(2012)。有關離散事件和混合系統的一節將闡明如何在Modelica中實現您的方程式。 您可以在下面找到該教程中關於彈跳球模型的示例,因爲您可以看到在編寫動態方程時不考慮時間離散。所以球V = DER(S),A = DER的連續模式(V)和比當子句中的分立部分處理與地面的接觸:
model BouncingBall "the bouncing ball model"
parameter Real g=9.81; //gravitational acc.
parameter Real c=0.90; //elasticity constant
Real height(start=10),velocity(start=0);
equation
der(height) = velocity;
der(velocity)=-g;
when height<0 then
reinit(velocity, -c*velocity);
end when;
end BouncingBall;
希望這有助於 馬爾科
如果我理解你的問題,你想使用x
的最後n
評估來確定下一個值x
。如果是這樣,此代碼顯示如何執行此操作:
model BooleanHistory
parameter Integer n=10 "How many points to keep";
parameter Modelica.SIunits.Time dt=1e-3;
protected
Boolean x[n];
function f
input Integer n;
input Boolean past[n-1];
output Boolean next;
algorithm
next :=not past[1]; // Example
end f;
initial equation
x = {false for i in 1:n};
equation
when sample(0,dt) then
x[2:n] = pre(x[1:(n-1)]);
x[1] = f(n, x[2:n]);
end when;
end BooleanHistory;