Установите абсолютную погрешность, используемый решателем с переменным шагом для определенного непрерывного состояния S-функции.
void ssSetStateAbsTol(SimStruct *S, const int_T idx, const Real_T val)
SSimStruct, представляющий блок 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 для полного примера, который использует эту функцию.