fmi2:什么是在API“fmi2SetupExperiment”输入参数公差
我实现了fmi 2.0.
从有关APIfmi2:什么是在API“fmi2SetupExperiment”输入参数公差
fmi2SetupExperiment(fmi2Component c,
fmi2Boolean toleranceDefined,
fmi2Real tolerance,
fmi2Real startTime,
fmi2Boolean stopTimeDefined,
fmi2Real stopTime)
据我所知,在公差参数用于误差估计的单元模拟。
我想知道tolerance
参数的单位/数值形式,例如如果tolerance
是5%,那么tolerance
的值是多少? 它会是5或1.05或其他形式?
第22页的FMI 2.0标准提到了“相对公差”。 这里没有严格定义,但对应于传递给数值解算器的相对公差值。 许多FMI导入工具,例如使用Sundial求解器。 相关容差在这里解释:https://computation.llnl.gov/projects/sundials/faq#cvode_tols。 所以在你的例子中,我认为0.05是正确的值。
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并且创建者无法告诉您它在内部执行了什么操作,只需更改该值并比较结果和运行时间即可。
谢谢你的回答。我了解它。 –
谢谢你的回答。我了解它。 –