我正在为fmi 2.0.
实现API
fmi2SetupExperiment(fmi2Component c,
fmi2Boolean toleranceDefined,
fmi2Real tolerance,
fmi2Real startTime,
fmi2Boolean stopTimeDefined,
fmi2Real stopTime)
我知道公差参数用于模拟期间的误差估计。
我想知道tolerance
参数的单位/值格式,例如tolerance
是5%,tolerance
的值是多少?
它会是5还是1.05还是其他形式?
答案 0 :(得分:0)
FMI 2.0标准谈到了第22页的“相对容忍度”。 这里没有严格定义,但对应于传递给数值解算器的相对容差值。 许多FMI导入工具,例如,使用Sundials求解器。 相对容差在那里解释:https://computation.llnl.gov/projects/sundials/faq#cvode_tols。 所以在你的例子中,我认为0.05是正确的值。
答案 1 :(得分:0)
FMI Specification 2.0表示通常使用的相对容差没有单位(%不是单位,它只代表×10 ^ -2)。
因此,最有可能的是,要将5%的值作为容差传递,您必须将{0.05}作为tolerance
传递。
以下内容来自FMI Specification 2.0:
参数 toleranceDefined 和容差取决于FMU类型:
fmuType = fmi2ModelExchange:
如果
toleranceDefined = fmi2True
,则使用数字调用模型 积分方案,其中通过使用tolerance
进行误差估计(通常作为相对容差)来控制步长。 在这种情况下,模型中使用的所有数值算法(例如,用于求解非线性代数方程)也应该使用适当的较小相对容差的误差估计。fmuType = fmi2CoSimulation:
如果
toleranceDefined = fmi2True
,则从属设备的通信间隔由误差估计控制。 如果从机使用具有可变步长和误差估计的数值积分器,建议使用tolerance
进行内部积分器的误差估计(通常作为相对容差)。 用于协同仿真的FMU可能会忽略这一论点。
如果您想确切了解此参数的实施方式,您必须询问FMU的创建者 - 或者如果可以,请自己查看。
如果您无法查看FMU并且创建者无法告诉您内部的操作,只需更改该值并比较结果和运行时间。