我爲可憐的標題道歉,但我發現很難用易理解的方式來描述問題。Modelica:同時使用der()和顯式聲明來計算變量
我想要做的是解決ODE,但我不想從time = 0
開始集成。我希望初始值(即集成的起始點)可用於更改,直到集成開始。我試着用一段代碼來說明這一點:
model testModel "A test"
parameter Real startTime = 10 "Starting time of integration";
parameter Real a = 0.1 "Some constant";
Real x;
input Real x_init = 3;
initial equation
x = x_init;
equation
if time <= startTime then
x = x_init;
else
der(x) = -a*x;
end if;
end testModel;
請注意,x_init被聲明爲輸入,並且可以連續更改。這段代碼產生了一條錯誤信息,據我所知,這是由於我宣佈x爲der(x) =
和x =
。錯誤消息是:
錯誤:對於der(x)=( - (如果時間< = 10,則x-x_init else a * x))/((如果時間< = 10則爲0.0其他)的奇異不一致標量系統1.0))= -1e-011/0
我考慮在if語句,這將避免該錯誤消息寫入
der(x) = 0
代替
x = init_x
。但是,這種方法存在的問題是,在集成開始之前,我失去了修改x_init的能力,即集成的起點。比方說,例如,x_init從3變爲4,在time = 7
。
是否有解決方案來執行我想要的操作?謝謝。
(我要用它來模擬幾個子模型作爲網絡的一部分,但子模型不會同時啓動,因此startTime
-可變,並且能夠在集成之前更改初始條件。)
建議解決方案:我已經試過了以下工作:
when time >= startTime
reinit(x,x_init);
end when;
與
der(x) = 0
替代組合
。這似乎工作。歡迎其他建議。
感謝您的反饋,邁克爾。我的問題是''x_init''不一定是一個平滑的信號,因此它可能有扭曲使它不可區分。儘管如此,你的解決方案仍然有幫助,在這方面對我來說最大的「啓示」就是你對可變指標系統的最後陳述。正如我在我原來的文章中所說的,我已經找到了使用''reinit()''函數解決特定問題的解決方法,但我不能說這是否是最佳解決方案。 – fredrikg