文档

ssSetSolverNeedsReset

金宝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),以说明在何处以及如何使用此宏。

之前介绍过的R2006a