Установите абсолютный допуск, используемый решателем переменного шага для определенной S-функции непрерывное состояние.
void ssSetStateAbsTol(SimStruct *S, const int_T idx, const Real_T val)
S
SimStruct, представляющий Блок s-function.
idx
Индекс, представляющий S-функцию непрерывное состояние. Этот индекс колеблется от 0
до n-1
, где n является количеством непрерывных состояний в S-функции.
val
Значение абсолютного допуска. Значение должно быть положительным действительным скаляром.
Используйте, чтобы установить абсолютные допуски, используемые для S-функции непрерывные состояния решателем переменного шага для текущего моделирования.
Абсолютные допуски не выделяются для решателей фиксированного шага. Поэтому вы никогда не должны вызывать этот макрос, пока вы не проверили, что моделирование использует решатель переменного шага. Можно использовать ssIsVariableStepSolver
, чтобы определить, использует ли модель решатель переменного шага.
C, C++
/* * Set the absolute tolerances based on the parameters */ static void mdlStart(SimStruct *S) { const real_T absTol0 = ( mxGetPr(ssGetSFcnParam(S,0)) )[0]; const real_T absTol1 = ( mxGetPr(ssGetSFcnParam(S,1)) )[0]; /* Absolute tolerance is not used by fixed-step solvers * Therefore every call to absolute tolerance API must be guarded */ if ( ssIsVariableStepSolver(S) ) { ssSetStateAbsTol(S, 0, absTol0); ssSetStateAbsTol(S, 1, absTol1); } }
Смотрите S-функцию sfun_atol.c
, используемый в sfcndemo_sfun_atol
для полного примера, который использует эту функцию.