在Modelica中,我有一个变量x,它取决于(a,b,c)。对于给定的模拟时间,其图(x,时间)看起来平滑且连续。我希望得到这条曲线的斜率而不必明确区分der(x),因为我得到关于a,b或c的偏导数的误差。这可能吗?换句话说,我想要最终输出的斜率,而不必区分它背后的内容。
答案 0 :(得分:2)
您无法在Modelica中执行此类操作,因为您无法访问集成商,之前的时间或类似情况。您可以通过使用采样获得Modelica代码的近似值,但这会略微改变模拟结果并可能成为性能瓶颈:
model M
Real signal = time;
Real approx_der(start=0);
discrete Real x(start=0);
discrete Real t(start=0);
equation
when sample(0.1,0.1) then
x = signal;
t = time;
approx_der = (x-pre(x)) / (t-pre(t));
end when;
end M;
简单地使用后处理更容易。以八度,matlab或类似方式加载结果文件并绘制近似导数:
plot(time(2:length(time)),diff(y) ./ diff(time))
答案 1 :(得分:2)
Modelica.Blocks.Continuous.Derivative x_dot(start = 1)这提供了导数的近似值。我给了x作为输入,得到了x_dot.y作为导数而没有任何问题。