.. role:: blue :class: blue Кубическая функция Эрмита MbCubicFunction ========================================= .. _MbCubicFunction_Cubic_Hermite_Function: .. версия ядра: Класс :blue:`MbCubicFunction` объявлен в файле *cur_cubic_function.h*. Кубическая функция Эрмита :blue:`MbCubicFunction` описывается множеством контрольных точек *valueList*, множеством производных функции в контрольных точках *firctList*, множеством значений параметра функции в контрольных точках *tList* и признаком периодичности функции *closed*. У функции есть ещё некоторые данные, которые не обязательны и служат для ускорения работы методов функции. Кубическая функция Эрмита при значении параметра *tList*\[*i*\], *i* = 0, 1, ..., *splinesCount*, где *splinesCount* = *tList*.MaxIndex(), проходит через контрольную точку *valueList*\[*i*\] и имеет в ней производную *firctList*\[*i*\]. Функция построена на основе *splinesCount* сплайнов Эрмита третьей степени, которые гладко стыкуются между собой. Каждый кубический сплайн Эрмита описывает участок функции между двумя соседними контрольными точками. Каждый кубический сплайн Эрмита определяется двумя крайними точками и двумя производными кривой в этих точках. При вычислении функции сначала по значению параметра *t* кривой определяется номер *i* рабочего участка (номер кубического сплайна Эрмита) из условия *tList*\[*i*\] ≤ *t* ≤ *tList*\[*i* + 1\]. Функция вычисляется для найденного рабочего участка по его локальному параметру *w*, который определяется по *tList*\[*i*\] и *tList*\[*i* + 1\]. В методе double :blue:`Value`\( double & *t* ) работает функция .. math:: f(t) = (1 - 3 w^{2} + 2 w^{3}) \, valueList[i] + (3 w^{2} + 2 w^{3}) \, valueList[i + 1] + \\ + \left( (w - 2 w^{2} + w^{3}) \, valueList[i] + (- w^{2} + w^{3}) \, valueList[i + 1] \right) ( tList[i + 1] - tList[i] ), где .. math:: w = \frac{ t - tList[i] }{ tList[i + 1] - tList[i] } — локальный параметр рабочего участка tList[i] ≤ t ≤ tList[i + 1]. Кубическая функция Эрмита приведена на рис. 1: .. figure:: /MODELER/SPECIAL_OBJECTS/pictures/O.6.4.1.png :width: 15cm :align: center Рис. 1 Область определения параметра функции располагается в пределах *tmin* ≤ *t* ≤ *tmax*, где *tmin* = *tList*\[0\], *tmax* = *tList*\[*splinesCount*\]. Функция может быть периодической. Форма функции зависит от расположения контрольных точек, от производных функции в контрольных точках и от множества *tList* значений параметра в контрольных точках. При построении функции только по контрольным точкам производные *firctList*\[*i*\] вычисляются путём построения параболы, проходящей по трём соседним точкам *valueList*\[*i* -- 1\], *valueList*\[*i*\], *valueList*\[*i* + 1\] при соответствующих значениях параметра *tList*\[*i* -- 1\], *tList*\[*i*\], *tList*\[*i* + 1\], и вычисления производной параболы в средней точке.