gpt4 book ai didi

python - dymola.readTrajectory - 不同的采样时间

转载 作者:行者123 更新时间:2023-12-01 08:14:20 24 4
gpt4 key购买 nike

给定一个在动态建模实验室 (Dymola) 中触发模拟的 Python 脚本。

我的目标是获取模拟轨迹的数据,但采样间隔不同。例如。我希望以 1 秒的间隔对从 0 秒到 1000 秒的 transient 部分进行采样,并以 100 秒的间隔对从 1000 秒到 100000 秒的稳态部分进行采样,而不必执行具有不同开始时间、停止时间和输出的两次模拟间隔。

触发 transient 部分模拟的代码摘录:

[result, simulation_result] = dymola.simulateExtendedModel(problem=problem,
initialNames=["input1", "input2", "input3"],
initialValues=[input1, input2, input3],
finalNames=output_names,
outputInterval=1,
startTime=0,
stopTime=1000,
resultFile=result_filename)

trajectory_size_transient = dymola.readTrajectorySize("simulation_result_python.mat")
sim_res_transient = np.array(dymola.readTrajectory("simulation_result_python.mat",
output_names,
trajectory_size_transient))

模拟稳态的代码:

[result, simulation_result] = dymola.simulateExtendedModel(problem=problem,
initialNames=["input1", "input2", "input3"],
initialValues=[input1, input2, input3],
finalNames=output_names,
outputInterval=100,
startTime=1000,
stopTime=10000,
resultFile=result_filename)

trajectory_size_steady = dymola.readTrajectorySize("simulation_result_python.mat")
sim_res_steady = np.array(dymola.readTrajectory("simulation_result_python.mat",
output_names,
trajectory_size_steady))

值“outputInterval”是将结果写入轨迹的时间间隔。如所见,我必须执行两次模拟并稍后叠加结果。我宁愿进行一次模拟,并设置两个不同的“outputInterval”值

 startTime=0
stopTime=10000

这样我就可以从一次模拟中获得两条轨迹

有人知道这是否可行吗?或者也许还有其他方法?

最佳答案

我认为以下内容可以满足您的需求。虽然有点麻烦,但值得一试:

  1. 构建一个包含所需输出点的列向量并将其存储在 Dymola 的工作目录中,例如使用 MATLAB:
tgrid = [0,10,13.75,97]'
save tgrid.mat tgrid -v4
  • 修改dsin.txt看起来像这样:
  • #    Method tuning parameters
    double method(27,1)
    2 # grid type of communication time grid, defined by
    # = 1: equidistant points ("Increment/nInterval")
    # = 2: vector of grid points ("tgrid")
    # = 3: variable step integrator (automatically)
    # = 4: model (call of "increment" in Dymola, e.g.
    # incr=Time > 2 then 0 else 0.1
    # dummy=increment(incr))
    # grid = 1,3 is stopped by "StopTime"
    # grid = 2 is stopped by "tgrid(last)"
    # grid = 4 runs forever (stopped by model)
    1 # nt Use every NT time instant, if grid = 3
    3 # dense 1/2/3 restart/step/interpolate GRID points
    0 # evgrid 0/1 do not/save event points in comm. time grid

    通常需要更改以下内容:(1) 第 3 行 ( 2 ) 中的标志激活 tgrid 的使用-向量。(2) 最后一行中的标志 ( 0 ) 禁止在事件中创建网格点。

  • 使用alist.exe应用 tgrid -矢量至dsin.txt使用命令行:
  • "<DymolaInstallDir>\Mfiles\alist.exe" -b "<DymolaWD>\dsin.txt" "<DymolaWD>\tgrid.mat" "<DymolaWD>\dsin.mat"

    这应该创建一个文件 dsin.mat新网格存储在其中。如果重新翻译模型,则不应覆盖该文件。从 Dymola GUI 进行模拟将忽略 dsin.mat 中的设置.

  • 模拟:
  • DymolaWD执行dymosim.exe -s dsin.mat ,对于给定的示例,这应该产生以下结果:

    Integration terminated successfully at T = 97
    CPU-time for integration : 0.031 seconds
    CPU-time for one GRID interval: 10.3 milli-seconds
    Number of result points : 4
    Number of GRID points : 4
    Number of (successful) steps : 492
    Number of F-evaluations : 19726
    Number of Jacobian-evaluations: 0
    Number of (model) time events : 0
    Number of (U) time events : 0
    Number of state events : 0
    Number of step events : 0
    Minimum integration stepsize : 0.000732
    Maximum integration stepsize : 20
    Maximum integration order : 7
    Calling terminal section
    ... "dsfinal.txt" creating (final states)

    并创建一个文件dsres.mat包含模拟结果。

    关于python - dymola.readTrajectory - 不同的采样时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55059721/

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