Глава II
2.3. Производные базисных функций B-сплайнов

Производная базисной функции определяется

`N_{i,p}^'=p/{u_{i+p}-u_i}N_{i,p-1}(u)-p/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)`(2.7)

(Смотрите рисунок 2.8 для графической иллюстрации). Докажем это индукцией по `p`. При `p=1`, `N_{i,p-1}` и `N_{i+1,p-1}`, либо 0, либо 1, и, таким образом, `N_{i,p}'` либо

Рисунок 2.8. Рекурсивное определение производных B-сплайнов.

`1/{u_{i+1}-u_i}`   или   `-1/{u_{i+2}-u_{i+1}}`

(рис 2.5). Теперь предположим, что уравнение (2.7) верно для `p-1`, `p>1`. Используя правило продукта `(fg)'=f'g+fg'`, чтобы отличить базисную функцию

`N_{i,p}(u)={u-u_i}/{u_{i+p}-u_i}N_{i,p-1}(u)+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)`

следует   `N_{i,p}^'=1/{u_{i+p}-u_i}N_{i,p-1}+{u-u_i}/{u_{i+p}-u_i}N_{i,p-1}^'(u)` `-1/{u_{i+p+1}-u_{i+1}}N_{i,p-1}+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}^'(u)` (2.8)

Подставляя (2.7) в уравнение (2.8) для `N_(i,p-1)^'` и `N_(i+1,p-1)^'` получаем

`N_{i,p}^'=1/{u_{i+p}-u_i}N_{i,p-1}-1/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}` `+{u-u_i}/{u_{i+p}-u_i}({p-1}/{u_{i+p-1]-u_i}N_{i,p-2}-{p-1}/{u_{i+p}-u_{i+1}}N_{i+1,p-2})` `+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}({p-1}/{u_{i+p}-u_{i+1}}N_{i+1,p-2}-{p-1}/{u_{i+p+1}-u_{i+2})N_{i+2,p-2})`

 `=1/{u_{i+p}-u_i}N_{i,p-1}-1/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}` `+{p-1}/{u_{i+p}-u_i}{u-u_i}/{u_{i+p-1}-u_i}N_{i,p-2}` `+{p-1}/{u_{i+p}-u_{i+1}}({u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}-{u-u_i}/{u_{i+p}-u_i})N_{i+1,p-2}` `-{p-1}/{u_{i+p+1}-u_{i+1}}{u_{i+p+1}-u_i}/{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}`

Отметив, что

`{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+2}}-{u-u_i}/{u_{i+p}-u_i}=-1+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}+1-{u-u_i}/{u_{i+p}-u_i}` `=-{u_{i+p+1}-u_{i+1}}/{u_{i+p+1}-u_{i+1}}+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}+{u_{i+p}-u_i}/{u_{i+p}-u_i}-{u-u_i}/{u_{i+p}-u_i}` `={u_{i+p}-u_i}/{u_{i+p}-u_i}-{u-u_{i+1}}/{u_{i+p+1}-u_{i+1}}`

мы получаем

`N_{i,p}^'=1/{u_{i+p}-u_i}N_{i,p-1}-1/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}` `+{p-1}/{u_{i+p}-u_i}({u-u_i}/{u_{i+p-1}-u_i}N_{i,p-2}-{u_{i+p}-u}/{u_{i+p}-u_{i+1}}N_{i+1,p-2})` `-{p-1}/{u_{i+p+1}-u_{i+1}}({u-u_{i+1}}/{u_{i+p}-u_{i+1}}N_{i+1,p-2}-{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+2}}N_{i+2,p-2})`

По формуле Cox-deBoor (уравнение [2.5]), то выражение в скобках могут быть заменены на `N_{i,p-1}` и `N_{i+1,p-1}`, соответственно. Отсюда следует, что

`N_{i,p}^'=1/{u_{i+p}-u_i}N_{i,p-1}-1/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}` `+{p-1}/{u_{i+p}-u_i}N_{i,p-1}-{p-1}/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}`

 `=p/{u_{i+p}-u_i}N_{i,p-1}-p/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}`

Это завершает доказательство.

Пусть `N_{i,p}^{(k)}` обозначает `k`ую производную `N_{i,p}(u)`. Повторное дифференцирова­ние уравнения (2,7) дает общую формулу

`N_{i,p}^{(k)}(u)=p({N_{i,p-1}^{(k-1)}}/{u_{i+p}-u_i}-{N_{i+1,p-1}^{(k-1)}}/{u_{i+p+1}-u_{i+1}})` (2.9)

Уравнение (2.10) является еще одним обобщение уравнения (2.7). Он вычисляет `k`ую производную `N_{i,p}(u)` в терминах функций `N_{i,p-k},…,N_{i+k,p-k}`

`N_{i,p}^{(k)}=p!/{(p-k)!}sum_{j=0}^ka_{k,j}N_{i+j,p-k}`(2.10)

с   `a_{0,0}=1`

`a_{k,0}=a_{k-1,0}/{u_{i+p-k+1}-u_i}`

`a_{k,j}={a_{k-1,j}-a_{k-1,j-1}}/{u_{i+p+j-k+1}-u_{i+j}}`   `j=1,…,k-1`

`a_{k,k}={-a_{k-1,k-1}}/{u_{i+p+1}-u_{i+k}}`

Замечания к уравнению (2.10)

Мы опускаем доказательство уравнения (2.10), но убедитесь, что оно верно и для `k=1,2`. По определению

`a_{1,0}=1/{u_{i+p}-u_i}`   `a_{1,1}=1/{u_{i+p+1}-u_{i+1}}`

и   `N_{i,p}^{(1)}=2(a_{1,0}N_{i,p-1]+a_{,1}N_{i+1,p-1})`

Сравнивая это с уравнением (2.7) доказывает случай для `k=1`; теперь `k=2`. Дифференцируя уравнение (2.7) дает

`N_{i,p}^{(2)}=p/{u_{i+p}-u_i}N_{i,p-1}^{(1)}-p/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}^{(1)}` `=p/{u_{i+p}-u_i}({p-1}/{u_{i+p-1}-u_i}N_{i,p-2}-{p-1}/{u_{i+p}-u_{i+1}}N_{i+1,p-2})` `-p/{u_{i+p+1}-u_{i+1}}({p-1}/{u_{i+p}-u_{i+1}}N_{i+1,p-2}-{p-1}/{u_{i+p+1}-u_{i+2}}N_{i+2,p-2})` `=p(p-1)[{a_{1,0}}/{u_{i+p-1}-u_i}N_{i,p-2}` `-1/{u_{i+p}-u_{i+1}}(1/{u_{i+p}-u_i}+1/{u_{i+p+1}-u_{i+1}})N_{i+1,p-2}` `+a_{1,1}/{u_{i+p+1}-u_{i+2}}N_{i+2,p-2}]` `=p(p-1)(a_{2,0}N_{i,p-2}+(a_{1,1}-a_{1,0})/{u_{i+p}-u_{i+1}}N_{i+1,p-2}+a_2,2 N_{i+2,p-2)}`

Отметив, что `k=2` и

`a_{2,1}={a_{1,1}-a_{1,0}}/{u_{i+p}-u_{i+1}}`

отсюда следует, что

`N_{i,p}^{(2)}(u)=2sum_{j=0}^2a_{2,j}N_{i+j,p-2}(u)`

Для полноты изложения приведем еще одну формулу для вычисления производных от базисных функций B-сплайнов

`N_{i,p}^{(k)}=p/{p-k}({u-u_i}/{u_{i+p}-u_i}N_{i,p-1}^{(k)}+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}^{(k)})`   `k=0,...,p-1`(2.11)

Уравнение (2.11) дает `k`ую производную от `N_{i,p}(u)` в терминах `k`-ой производной `N_{i,p-1}` и `N_{(i+1,p-1}`.

На рис 2.9b и 2.10d показаны производные, соответствующие базисным функциям на рис 2.9а и 2.10а. Рисунок 2.11 показывает все ненулевые производные `N_{i,3}`. Обрати­те внимание на эффект нескольких узлов на рисунке 2.10б; `N_{6,3}^'` имеет скачок в тройной узел.

Рисунок 2.9. (а) Кубические базисные функции; (б) производные, соответствующие базисным функциям на рисунке 2.9а.

Рисунок 2.10. (а) Кубические базисные функции, показывающие одиночные, двойные и тройные узлы; (б) Производные функций на рисунке 2.10а.

Рисунок 2.11. `N_{i,3}` и все его ненулевые производные.