1

我正在为fmi 2.0.API实现从属

 fmi2SetupExperiment(fmi2Component c, 
 fmi2Boolean toleranceDefined, 
 fmi2Real tolerance, 
 fmi2Real startTime, 
 fmi2Boolean stopTimeDefined, 
 fmi2Real stopTime)

我了解公差参数用于模拟期间的误差估计。

我想知道tolerance参数的单位/值形式,例如如果tolerance是 5%,那么 的值是tolerance多少?是 5 还是 1.05 或其他形式?

4

2 回答 2

0

FMI 2.0 标准在第 22 页谈到了“相对容差”。这在此处没有严格定义,但对应于传递给数值求解器的相对容差值。许多 FMI 导入工具,例如,使用日晷求解器。此处解释了相对公差:https ://computation.llnl.gov/projects/sundials/faq#cvode_tols 。因此,在您的示例中,我希望 0.05 是正确的值。

于 2017-09-19T18:48:22.570 回答
0

FMI 规范 2.0规定通常使用没有单位的相对容差(% 不是单位,它仅代表 × 10^-2)。因此,最有可能的是,要将 5% 的值作为容差传递,您必须将 0.05 作为 传递tolerance

以下内容来自FMI 规范 2.0

参数toleranceDefinedtolerance取决于 FMU 类型:

fmuType = fmi2ModelExchange:

如果toleranceDefined = fmi2True然后使用数值积分方案调用模型,其中步长通过tolerance用于误差估计(通常作为相对容差)来控制。在这种情况下,模型内部使用的所有数值算法(例如求解非线性代数方程)也应该以适当的较小相对容差的误差估计运行。

fmuType = fmi2CoSimulation:

如果toleranceDefined = fmi2True那么从机的通信间隔由错误估计控制。如果从机使用具有可变步长和误差估计的数值积分器,建议使用tolerance内部积分器的误差估计(通常作为相对容差)。用于联合仿真的 FMU 可能会忽略此论点。

如果您想确切地知道这个参数是如何实现的,您必须询问您的 FMU 的创建者 - 或者如果可以的话,请查看您自己的内部。

如果您无法查看 FMU 内部并且创建者无法告诉您它在内部做了什么,只需更改值并比较结果和运行时间。

于 2017-09-19T18:51:42.507 回答