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是正确的值。

+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并且创建者无法告诉您它在内部执行了什么操作,只需更改该值并比较结果和运行时间即可。

+0

谢谢你的回答。我了解它。 –