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