Modelica 变量作为信号而不是函数的时间导数
在Modelica中,我有一个变量x,它依赖于(a,b,c)。对于给定的模拟时间,其绘图(x,time)看起来平滑且连续。我想要得到这条曲线的斜率,而不必显式地微分der(x),因为我得到了关于a,b或c的偏导数的误差。这可能吗?换句话说,我想要最终输出的斜率,而不必区分它背后的内容。您不能在Modelica本身中执行类似操作,因为您无法访问积分器、以前的时间或类似内容。通过使用采样,可以在Modelica代码中获得近似值,但这会略微改变模拟结果,并可能成为性能瓶颈:Modelica 变量作为信号而不是函数的时间导数,modelica,derivative,dymola,Modelica,Derivative,Dymola,在Modelica中,我有一个变量x,它依赖于(a,b,c)。对于给定的模拟时间,其绘图(x,time)看起来平滑且连续。我想要得到这条曲线的斜率,而不必显式地微分der(x),因为我得到了关于a,b或c的偏导数的误差。这可能吗?换句话说,我想要最终输出的斜率,而不必区分它背后的内容。您不能在Modelica本身中执行类似操作,因为您无法访问积分器、以前的时间或类似内容。通过使用采样,可以在Modelica代码中获得近似值,但这会略微改变模拟结果,并可能成为性能瓶颈: M型 实时信号=时间; 实
M型
实时信号=时间;
实际近似值(起始值=0);
离散实x(起始值=0);
离散实数t(起始=0);
方程式
当样本为(0.1,0.1)时
x=信号;
t=时间;
近似值=(x-pre(x))/(t-pre(t));
结束时;
M端;
简单地使用后处理更容易。在倍频程、matlab或类似软件中加载结果文件,并绘制近似导数:
plot(time(2:length(time)),diff(y)。/diff(time))
您无法在Modelica本身中执行类似操作,因为您无法访问积分器、上一次或类似操作。通过使用采样,可以在Modelica代码中获得近似值,但这会略微改变模拟结果,并可能成为性能瓶颈:
M型
实时信号=时间;
实际近似值(起始值=0);
离散实x(起始值=0);
离散实数t(起始=0);
方程式
当样本为(0.1,0.1)时
x=信号;
t=时间;
近似值=(x-pre(x))/(t-pre(t));
结束时;
M端;
简单地使用后处理更容易。在倍频程、matlab或类似软件中加载结果文件,并绘制近似导数:
绘图(时间(2:长度(时间)),差值(y)。/diff(时间))
Modelica.Blocks.Continuous.Derivative x_点(开始=1)这提供了导数的近似值。我将x作为输入,并将x_点.y作为导数,没有问题。Modelica.Blocks.Continuous.derivative x_点(start=1)这提供了导数的近似值。我把X作为输入,得到Xydot.y作为导数,没有问题。考虑添加一些断线,并使用编辑器的<代码>代码< /COD>格式化选项使其更可读。考虑添加一些断线,并使用编辑器的<代码>代码< /COD>格式选项,使其更可读。谢谢您的帮助。回答,实际上我需要实时的斜率值。我使用了Modelica.Blocks.Continuous.Derivative x_点(start=1)代码>。我以x作为输入,以x_dot.y
作为导数,没有问题。谢谢你的回答,实际上我需要实时的斜率值。我使用了Modelica.Blocks.Continuous.Derivative x_点(start=1)代码>。我给x作为输入,得到x_dot.y
作为导数,没有问题。