问金宝app引擎复位求解器
空白ssSetSolverNeedsReset (SimStruct *年代)
年代
表示s -功能块或Simulink的SimStruct金宝app®模型。
使用ssSetSolverNeedsReset
当s函数的动态发生变化时,会影响ODE求解器。例如,s函数连续状态的不连续或驱动其他连续块的输出不连续。s函数只能在一个主要的时间步长内改变它的连续状态向量。不要在较小的时间步骤中更改连续状态值。
一个状态或连续s函数的输出的不连续可以使ODE解算器中的缓存状态和导数信息失效。使用ssSetSolverNeedsReset
宏来让ODE求解器在下一个集成步骤中重新初始化缓存的信息。不重置求解器的连续状态更改是不安全的。改变连续状态而不使用ssSetSolverNeedsReset
宏可能导致错误的结果,因为ODE求解器可能会忽略这些更改,以保护其数据和集成结果的内部一致性。仅在主要时间步骤中重新初始化状态。积分算法不期望状态向量在较小的时间步长期间发生变化。
在使用此宏时,为了性能问题,也可以考虑使用ssSetSkipContStatesConsistencyCheck(年代,1)
在mdlInitializeSizes
方法。ssSetSkipContStatesConsistencyCheck
禁用Simulink对s函数连续状态的监控,提高仿真性能。金宝app
当模拟是多线程的时候,它会跳过求解器重置并忽略这个宏的使用。
C, c++
下面的示例使用此宏要求Simulink引擎重置求解器。金宝app
static void mdlOutputs(SimStruct *S, int_T tid) {::: if (ssIsMajorTimeStep(S) && YourConditionsForStateChange) {double *x = ssGetContStates(S);/*重置状态*/ for (i=0;我< nContStates;I ++) {x[I] = 0.0;} /*要求Simulin金宝appk引擎重置求解器。* / ssSetSolverNeedsReset(年代);}}
时变连续传递函数的源代码(stvctf.c
),以说明在何处以及如何使用此宏。