Установите абсолютную погрешность, используемую решателем переменного шага в определенной 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
для полного примера, который использует эту функцию.