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