\(\newcommand{\footnotename}{footnote}\)
\(\def \LWRfootnote {1}\)
\(\newcommand {\footnote }[2][\LWRfootnote ]{{}^{\mathrm {#1}}}\)
\(\newcommand {\footnotemark }[1][\LWRfootnote ]{{}^{\mathrm {#1}}}\)
\(\newcommand \ensuremath [1]{#1}\)
\(\newcommand {\LWRframebox }[2][]{\fbox {#2}} \newcommand {\framebox }[1][]{\LWRframebox } \)
\(\newcommand {\setlength }[2]{}\)
\(\newcommand {\addtolength }[2]{}\)
\(\newcommand {\setcounter }[2]{}\)
\(\newcommand {\addtocounter }[2]{}\)
\(\newcommand {\cline }[1]{}\)
\(\newcommand {\directlua }[1]{\text {(directlua)}}\)
\(\newcommand {\luatexdirectlua }[1]{\text {(directlua)}}\)
\(\newcommand {\protect }{}\)
\(\def \LWRabsorbnumber #1 {}\)
\(\def \LWRabsorbquotenumber "#1 {}\)
\(\def \mathchar {\ifnextchar "\LWRabsorbquotenumber \LWRabsorbnumber }\)
\(\def \mathcode #1={\mathchar }\)
\(\let \delcode \mathcode \)
\(\let \delimiter \mathchar \)
\(\let \LWRref \ref \)
\(\renewcommand {\ref }{\ifstar \LWRref \LWRref }\)
\(\newcommand {\intertext }[1]{\text {#1}\notag \\}\)
\(\newcommand {\mathllap }[2][]{{#1#2}}\)
\(\newcommand {\mathrlap }[2][]{{#1#2}}\)
\(\newcommand {\mathclap }[2][]{{#1#2}}\)
\(\newcommand {\mathmbox }[1]{#1}\)
\(\newcommand {\clap }[1]{#1}\)
\(\newcommand {\LWRmathmakebox }[2][]{#2}\)
\(\newcommand {\mathmakebox }[1][]{\LWRmathmakebox }\)
\(\newcommand {\cramped }[2][]{{#1#2}}\)
\(\newcommand {\crampedllap }[2][]{{#1#2}}\)
\(\newcommand {\crampedrlap }[2][]{{#1#2}}\)
\(\newcommand {\crampedclap }[2][]{{#1#2}}\)
\(\newenvironment {crampedsubarray}[1]{}{}\)
\(\newcommand {\crampedsubstack }{}\)
\(\newcommand {\smashoperator }[2][]{#2\limits }\)
\(\newcommand {\adjustlimits }{}\)
\(\newcommand {\SwapAboveDisplaySkip }{}\)
\(\require {extpfeil}\)
\(\Newextarrow \xleftrightarrow {10,10}{0x2194}\)
\(\Newextarrow \xLeftarrow {10,10}{0x21d0}\)
\(\Newextarrow \xhookleftarrow {10,10}{0x21a9}\)
\(\Newextarrow \xmapsto {10,10}{0x21a6}\)
\(\Newextarrow \xRightarrow {10,10}{0x21d2}\)
\(\Newextarrow \xLeftrightarrow {10,10}{0x21d4}\)
\(\Newextarrow \xhookrightarrow {10,10}{0x21aa}\)
\(\Newextarrow \xrightharpoondown {10,10}{0x21c1}\)
\(\Newextarrow \xleftharpoondown {10,10}{0x21bd}\)
\(\Newextarrow \xrightleftharpoons {10,10}{0x21cc}\)
\(\Newextarrow \xrightharpoonup {10,10}{0x21c0}\)
\(\Newextarrow \xleftharpoonup {10,10}{0x21bc}\)
\(\Newextarrow \xleftrightharpoons {10,10}{0x21cb}\)
\(\newcommand {\LWRdounderbracket }[3]{\underset {#3}{\underline {#1}}}\)
\(\newcommand {\LWRunderbracket }[2][]{\LWRdounderbracket {#2}}\)
\(\newcommand {\underbracket }[1][]{\LWRunderbracket }\)
\(\newcommand {\LWRdooverbracket }[3]{\overset {#3}{\overline {#1}}}\)
\(\newcommand {\LWRoverbracket }[2][]{\LWRdooverbracket {#2}}\)
\(\newcommand {\overbracket }[1][]{\LWRoverbracket }\)
\(\newcommand {\LATEXunderbrace }[1]{\underbrace {#1}}\)
\(\newcommand {\LATEXoverbrace }[1]{\overbrace {#1}}\)
\(\newenvironment {matrix*}[1][]{\begin {matrix}}{\end {matrix}}\)
\(\newenvironment {pmatrix*}[1][]{\begin {pmatrix}}{\end {pmatrix}}\)
\(\newenvironment {bmatrix*}[1][]{\begin {bmatrix}}{\end {bmatrix}}\)
\(\newenvironment {Bmatrix*}[1][]{\begin {Bmatrix}}{\end {Bmatrix}}\)
\(\newenvironment {vmatrix*}[1][]{\begin {vmatrix}}{\end {vmatrix}}\)
\(\newenvironment {Vmatrix*}[1][]{\begin {Vmatrix}}{\end {Vmatrix}}\)
\(\newenvironment {smallmatrix*}[1][]{\begin {matrix}}{\end {matrix}}\)
\(\newenvironment {psmallmatrix*}[1][]{\begin {pmatrix}}{\end {pmatrix}}\)
\(\newenvironment {bsmallmatrix*}[1][]{\begin {bmatrix}}{\end {bmatrix}}\)
\(\newenvironment {Bsmallmatrix*}[1][]{\begin {Bmatrix}}{\end {Bmatrix}}\)
\(\newenvironment {vsmallmatrix*}[1][]{\begin {vmatrix}}{\end {vmatrix}}\)
\(\newenvironment {Vsmallmatrix*}[1][]{\begin {Vmatrix}}{\end {Vmatrix}}\)
\(\newenvironment {psmallmatrix}[1][]{\begin {pmatrix}}{\end {pmatrix}}\)
\(\newenvironment {bsmallmatrix}[1][]{\begin {bmatrix}}{\end {bmatrix}}\)
\(\newenvironment {Bsmallmatrix}[1][]{\begin {Bmatrix}}{\end {Bmatrix}}\)
\(\newenvironment {vsmallmatrix}[1][]{\begin {vmatrix}}{\end {vmatrix}}\)
\(\newenvironment {Vsmallmatrix}[1][]{\begin {Vmatrix}}{\end {Vmatrix}}\)
\(\newcommand {\LWRmultlined }[1][]{\begin {multline*}}\)
\(\newenvironment {multlined}[1][]{\LWRmultlined }{\end {multline*}}\)
\(\let \LWRorigshoveleft \shoveleft \)
\(\renewcommand {\shoveleft }[1][]{\LWRorigshoveleft }\)
\(\let \LWRorigshoveright \shoveright \)
\(\renewcommand {\shoveright }[1][]{\LWRorigshoveright }\)
\(\newenvironment {dcases}{\begin {cases}}{\end {cases}}\)
\(\newenvironment {dcases*}{\begin {cases}}{\end {cases}}\)
\(\newenvironment {rcases}{\begin {cases}}{\end {cases}}\)
\(\newenvironment {rcases*}{\begin {cases}}{\end {cases}}\)
\(\newenvironment {drcases}{\begin {cases}}{\end {cases}}\)
\(\newenvironment {drcases*}{\begin {cases}}{\end {cases}}\)
\(\newenvironment {cases*}{\begin {cases}}{\end {cases}}\)
\(\newcommand {\MoveEqLeft }[1][]{}\)
\(\def \LWRAboxed #1!|!{\fbox {\(#1\)}&\fbox {\(#2\)}} \newcommand {\Aboxed }[1]{\LWRAboxed #1&&!|!} \)
\( \newcommand {\LWRABLines }[1][\Updownarrow ]{#1 \notag \\}\newcommand {\ArrowBetweenLines }{\ifstar \LWRABLines \LWRABLines } \)
\(\newcommand {\shortintertext }[1]{\text {#1}\notag \\}\)
\(\newcommand {\vdotswithin }[1]{\hspace {.5em}\vdots }\)
\(\newcommand {\LWRshortvdotswithinstar }[1]{\vdots \hspace {.5em} & \\}\)
\(\newcommand {\LWRshortvdotswithinnostar }[1]{& \hspace {.5em}\vdots \\}\)
\(\newcommand {\shortvdotswithin }{\ifstar \LWRshortvdotswithinstar \LWRshortvdotswithinnostar }\)
\(\newcommand {\MTFlushSpaceAbove }{}\)
\(\newcommand {\MTFlushSpaceBelow }{\\}\)
\(\newcommand \lparen {(}\)
\(\newcommand \rparen {)}\)
\(\newcommand {\ordinarycolon }{:}\)
\(\newcommand {\vcentcolon }{\mathrel {\mathop \ordinarycolon }}\)
\(\newcommand \dblcolon {\vcentcolon \vcentcolon }\)
\(\newcommand \coloneqq {\vcentcolon =}\)
\(\newcommand \Coloneqq {\dblcolon =}\)
\(\newcommand \coloneq {\vcentcolon {-}}\)
\(\newcommand \Coloneq {\dblcolon {-}}\)
\(\newcommand \eqqcolon {=\vcentcolon }\)
\(\newcommand \Eqqcolon {=\dblcolon }\)
\(\newcommand \eqcolon {\mathrel {-}\vcentcolon }\)
\(\newcommand \Eqcolon {\mathrel {-}\dblcolon }\)
\(\newcommand \colonapprox {\vcentcolon \approx }\)
\(\newcommand \Colonapprox {\dblcolon \approx }\)
\(\newcommand \colonsim {\vcentcolon \sim }\)
\(\newcommand \Colonsim {\dblcolon \sim }\)
\(\newcommand {\nuparrow }{\mathrel {\cancel {\uparrow }}}\)
\(\newcommand {\ndownarrow }{\mathrel {\cancel {\downarrow }}}\)
\(\newcommand {\bigtimes }{\mathop {\Large \times }\limits }\)
\(\newcommand {\prescript }[3]{{}^{#1}_{#2}#3}\)
\(\newenvironment {lgathered}{\begin {gathered}}{\end {gathered}}\)
\(\newenvironment {rgathered}{\begin {gathered}}{\end {gathered}}\)
\(\newcommand {\splitfrac }[2]{{}^{#1}_{#2}}\)
\(\let \splitdfrac \splitfrac \)
\(\newcommand {\LWRoverlaysymbols }[2]{\mathord {\smash {\mathop {#2\strut }\limits ^{\smash {\lower 3ex{#1}}}}\strut }}\)
\(\newcommand{\alphaup}{\unicode{x03B1}}\)
\(\newcommand{\betaup}{\unicode{x03B2}}\)
\(\newcommand{\gammaup}{\unicode{x03B3}}\)
\(\newcommand{\digammaup}{\unicode{x03DD}}\)
\(\newcommand{\deltaup}{\unicode{x03B4}}\)
\(\newcommand{\epsilonup}{\unicode{x03F5}}\)
\(\newcommand{\varepsilonup}{\unicode{x03B5}}\)
\(\newcommand{\zetaup}{\unicode{x03B6}}\)
\(\newcommand{\etaup}{\unicode{x03B7}}\)
\(\newcommand{\thetaup}{\unicode{x03B8}}\)
\(\newcommand{\varthetaup}{\unicode{x03D1}}\)
\(\newcommand{\iotaup}{\unicode{x03B9}}\)
\(\newcommand{\kappaup}{\unicode{x03BA}}\)
\(\newcommand{\varkappaup}{\unicode{x03F0}}\)
\(\newcommand{\lambdaup}{\unicode{x03BB}}\)
\(\newcommand{\muup}{\unicode{x03BC}}\)
\(\newcommand{\nuup}{\unicode{x03BD}}\)
\(\newcommand{\xiup}{\unicode{x03BE}}\)
\(\newcommand{\omicronup}{\unicode{x03BF}}\)
\(\newcommand{\piup}{\unicode{x03C0}}\)
\(\newcommand{\varpiup}{\unicode{x03D6}}\)
\(\newcommand{\rhoup}{\unicode{x03C1}}\)
\(\newcommand{\varrhoup}{\unicode{x03F1}}\)
\(\newcommand{\sigmaup}{\unicode{x03C3}}\)
\(\newcommand{\varsigmaup}{\unicode{x03C2}}\)
\(\newcommand{\tauup}{\unicode{x03C4}}\)
\(\newcommand{\upsilonup}{\unicode{x03C5}}\)
\(\newcommand{\phiup}{\unicode{x03D5}}\)
\(\newcommand{\varphiup}{\unicode{x03C6}}\)
\(\newcommand{\chiup}{\unicode{x03C7}}\)
\(\newcommand{\psiup}{\unicode{x03C8}}\)
\(\newcommand{\omegaup}{\unicode{x03C9}}\)
\(\newcommand{\Alphaup}{\unicode{x0391}}\)
\(\newcommand{\Betaup}{\unicode{x0392}}\)
\(\newcommand{\Gammaup}{\unicode{x0393}}\)
\(\newcommand{\Digammaup}{\unicode{x03DC}}\)
\(\newcommand{\Deltaup}{\unicode{x0394}}\)
\(\newcommand{\Epsilonup}{\unicode{x0395}}\)
\(\newcommand{\Zetaup}{\unicode{x0396}}\)
\(\newcommand{\Etaup}{\unicode{x0397}}\)
\(\newcommand{\Thetaup}{\unicode{x0398}}\)
\(\newcommand{\Varthetaup}{\unicode{x03F4}}\)
\(\newcommand{\Iotaup}{\unicode{x0399}}\)
\(\newcommand{\Kappaup}{\unicode{x039A}}\)
\(\newcommand{\Lambdaup}{\unicode{x039B}}\)
\(\newcommand{\Muup}{\unicode{x039C}}\)
\(\newcommand{\Nuup}{\unicode{x039D}}\)
\(\newcommand{\Xiup}{\unicode{x039E}}\)
\(\newcommand{\Omicronup}{\unicode{x039F}}\)
\(\newcommand{\Piup}{\unicode{x03A0}}\)
\(\newcommand{\Varpiup}{\unicode{x03D6}}\)
\(\newcommand{\Rhoup}{\unicode{x03A1}}\)
\(\newcommand{\Sigmaup}{\unicode{x03A3}}\)
\(\newcommand{\Tauup}{\unicode{x03A4}}\)
\(\newcommand{\Upsilonup}{\unicode{x03A5}}\)
\(\newcommand{\Phiup}{\unicode{x03A6}}\)
\(\newcommand{\Chiup}{\unicode{x03A7}}\)
\(\newcommand{\Psiup}{\unicode{x03A8}}\)
\(\newcommand{\Omegaup}{\unicode{x03A9}}\)
\(\newcommand{\alphait}{\unicode{x1D6FC}}\)
\(\newcommand{\betait}{\unicode{x1D6FD}}\)
\(\newcommand{\gammait}{\unicode{x1D6FE}}\)
\(\newcommand{\digammait}{\mathit{\unicode{x03DD}}}\)
\(\newcommand{\deltait}{\unicode{x1D6FF}}\)
\(\newcommand{\epsilonit}{\unicode{x1D716}}\)
\(\newcommand{\varepsilonit}{\unicode{x1D700}}\)
\(\newcommand{\zetait}{\unicode{x1D701}}\)
\(\newcommand{\etait}{\unicode{x1D702}}\)
\(\newcommand{\thetait}{\unicode{x1D703}}\)
\(\newcommand{\varthetait}{\unicode{x1D717}}\)
\(\newcommand{\iotait}{\unicode{x1D704}}\)
\(\newcommand{\kappait}{\unicode{x1D705}}\)
\(\newcommand{\varkappait}{\unicode{x1D718}}\)
\(\newcommand{\lambdait}{\unicode{x1D706}}\)
\(\newcommand{\muit}{\unicode{x1D707}}\)
\(\newcommand{\nuit}{\unicode{x1D708}}\)
\(\newcommand{\xiit}{\unicode{x1D709}}\)
\(\newcommand{\omicronit}{\unicode{x1D70A}}\)
\(\newcommand{\piit}{\unicode{x1D70B}}\)
\(\newcommand{\varpiit}{\unicode{x1D71B}}\)
\(\newcommand{\rhoit}{\unicode{x1D70C}}\)
\(\newcommand{\varrhoit}{\unicode{x1D71A}}\)
\(\newcommand{\sigmait}{\unicode{x1D70E}}\)
\(\newcommand{\varsigmait}{\unicode{x1D70D}}\)
\(\newcommand{\tauit}{\unicode{x1D70F}}\)
\(\newcommand{\upsilonit}{\unicode{x1D710}}\)
\(\newcommand{\phiit}{\unicode{x1D719}}\)
\(\newcommand{\varphiit}{\unicode{x1D711}}\)
\(\newcommand{\chiit}{\unicode{x1D712}}\)
\(\newcommand{\psiit}{\unicode{x1D713}}\)
\(\newcommand{\omegait}{\unicode{x1D714}}\)
\(\newcommand{\Alphait}{\unicode{x1D6E2}}\)
\(\newcommand{\Betait}{\unicode{x1D6E3}}\)
\(\newcommand{\Gammait}{\unicode{x1D6E4}}\)
\(\newcommand{\Digammait}{\mathit{\unicode{x03DC}}}\)
\(\newcommand{\Deltait}{\unicode{x1D6E5}}\)
\(\newcommand{\Epsilonit}{\unicode{x1D6E6}}\)
\(\newcommand{\Zetait}{\unicode{x1D6E7}}\)
\(\newcommand{\Etait}{\unicode{x1D6E8}}\)
\(\newcommand{\Thetait}{\unicode{x1D6E9}}\)
\(\newcommand{\Varthetait}{\unicode{x1D6F3}}\)
\(\newcommand{\Iotait}{\unicode{x1D6EA}}\)
\(\newcommand{\Kappait}{\unicode{x1D6EB}}\)
\(\newcommand{\Lambdait}{\unicode{x1D6EC}}\)
\(\newcommand{\Muit}{\unicode{x1D6ED}}\)
\(\newcommand{\Nuit}{\unicode{x1D6EE}}\)
\(\newcommand{\Xiit}{\unicode{x1D6EF}}\)
\(\newcommand{\Omicronit}{\unicode{x1D6F0}}\)
\(\newcommand{\Piit}{\unicode{x1D6F1}}\)
\(\newcommand{\Rhoit}{\unicode{x1D6F2}}\)
\(\newcommand{\Sigmait}{\unicode{x1D6F4}}\)
\(\newcommand{\Tauit}{\unicode{x1D6F5}}\)
\(\newcommand{\Upsilonit}{\unicode{x1D6F6}}\)
\(\newcommand{\Phiit}{\unicode{x1D6F7}}\)
\(\newcommand{\Chiit}{\unicode{x1D6F8}}\)
\(\newcommand{\Psiit}{\unicode{x1D6F9}}\)
\(\newcommand{\Omegait}{\unicode{x1D6FA}}\)
\(\let \digammaup \Digammaup \)
\(\renewcommand {\digammait }{\mathit {\digammaup }}\)
\(\newcommand {\smallin }{\unicode {x220A}}\)
\(\newcommand {\smallowns }{\unicode {x220D}}\)
\(\newcommand {\notsmallin }{\LWRoverlaysymbols {/}{\unicode {x220A}}}\)
\(\newcommand {\notsmallowns }{\LWRoverlaysymbols {/}{\unicode {x220D}}}\)
\(\newcommand {\rightangle }{\unicode {x221F}}\)
\(\newcommand {\intclockwise }{\unicode {x2231}}\)
\(\newcommand {\ointclockwise }{\unicode {x2232}}\)
\(\newcommand {\ointctrclockwise }{\unicode {x2233}}\)
\(\newcommand {\oiint }{\unicode {x222F}}\)
\(\newcommand {\oiiint }{\unicode {x2230}}\)
\(\newcommand {\ddag }{\unicode {x2021}}\)
\(\newcommand {\P }{\unicode {x00B6}}\)
\(\newcommand {\copyright }{\unicode {x00A9}}\)
\(\newcommand {\dag }{\unicode {x2020}}\)
\(\newcommand {\pounds }{\unicode {x00A3}}\)
\(\newcommand {\iddots }{\unicode {x22F0}}\)
\(\newcommand {\utimes }{\overline {\times }}\)
\(\newcommand {\dtimes }{\underline {\times }}\)
\(\newcommand {\udtimes }{\overline {\underline {\times }}}\)
\(\newcommand {\leftwave }{\left \{}\)
\(\newcommand {\rightwave }{\right \}}\)
\(\newcommand {\toprule }[1][]{\hline }\)
\(\let \midrule \toprule \)
\(\let \bottomrule \toprule \)
\(\newcommand {\cmidrule }[2][]{}\)
\(\newcommand {\morecmidrules }{}\)
\(\newcommand {\specialrule }[3]{\hline }\)
\(\newcommand {\addlinespace }[1][]{}\)
\(\newcommand {\LWRsubmultirow }[2][]{#2}\)
\(\newcommand {\LWRmultirow }[2][]{\LWRsubmultirow }\)
\(\newcommand {\multirow }[2][]{\LWRmultirow }\)
\(\newcommand {\mrowcell }{}\)
\(\newcommand {\mcolrowcell }{}\)
\(\newcommand {\STneed }[1]{}\)
\( \newcommand {\multicolumn }[3]{#3}\)
\(\newcommand {\tothe }[1]{^{#1}}\)
\(\newcommand {\raiseto }[2]{{#2}^{#1}}\)
\(\newcommand {\ang }[2][]{(\mathrm {#2})\degree }\)
\(\newcommand {\num }[2][]{\mathrm {#2}}\)
\(\newcommand {\si }[2][]{\mathrm {#2}}\)
\(\newcommand {\LWRSI }[2][]{\mathrm {#1\LWRSInumber \,#2}}\)
\(\newcommand {\SI }[2][]{\def \LWRSInumber {#2}\LWRSI }\)
\(\newcommand {\numlist }[2][]{\mathrm {#2}}\)
\(\newcommand {\numrange }[3][]{\mathrm {#2\,\unicode {x2013}\,#3}}\)
\(\newcommand {\SIlist }[3][]{\mathrm {#2\,#3}}\)
\(\newcommand {\SIrange }[4][]{\mathrm {#2\,#4\,\unicode {x2013}\,#3\,#4}}\)
\(\newcommand {\tablenum }[2][]{\mathrm {#2}}\)
\(\newcommand {\ampere }{\mathrm {A}}\)
\(\newcommand {\candela }{\mathrm {cd}}\)
\(\newcommand {\kelvin }{\mathrm {K}}\)
\(\newcommand {\kilogram }{\mathrm {kg}}\)
\(\newcommand {\metre }{\mathrm {m}}\)
\(\newcommand {\mole }{\mathrm {mol}}\)
\(\newcommand {\second }{\mathrm {s}}\)
\(\newcommand {\becquerel }{\mathrm {Bq}}\)
\(\newcommand {\degreeCelsius }{\unicode {x2103}}\)
\(\newcommand {\coulomb }{\mathrm {C}}\)
\(\newcommand {\farad }{\mathrm {F}}\)
\(\newcommand {\gray }{\mathrm {Gy}}\)
\(\newcommand {\hertz }{\mathrm {Hz}}\)
\(\newcommand {\henry }{\mathrm {H}}\)
\(\newcommand {\joule }{\mathrm {J}}\)
\(\newcommand {\katal }{\mathrm {kat}}\)
\(\newcommand {\lumen }{\mathrm {lm}}\)
\(\newcommand {\lux }{\mathrm {lx}}\)
\(\newcommand {\newton }{\mathrm {N}}\)
\(\newcommand {\ohm }{\mathrm {\Omega }}\)
\(\newcommand {\pascal }{\mathrm {Pa}}\)
\(\newcommand {\radian }{\mathrm {rad}}\)
\(\newcommand {\siemens }{\mathrm {S}}\)
\(\newcommand {\sievert }{\mathrm {Sv}}\)
\(\newcommand {\steradian }{\mathrm {sr}}\)
\(\newcommand {\tesla }{\mathrm {T}}\)
\(\newcommand {\volt }{\mathrm {V}}\)
\(\newcommand {\watt }{\mathrm {W}}\)
\(\newcommand {\weber }{\mathrm {Wb}}\)
\(\newcommand {\day }{\mathrm {d}}\)
\(\newcommand {\degree }{\mathrm {^\circ }}\)
\(\newcommand {\hectare }{\mathrm {ha}}\)
\(\newcommand {\hour }{\mathrm {h}}\)
\(\newcommand {\litre }{\mathrm {l}}\)
\(\newcommand {\liter }{\mathrm {L}}\)
\(\newcommand {\arcminute }{^\prime }\)
\(\newcommand {\minute }{\mathrm {min}}\)
\(\newcommand {\arcsecond }{^{\prime \prime }}\)
\(\newcommand {\tonne }{\mathrm {t}}\)
\(\newcommand {\astronomicalunit }{au}\)
\(\newcommand {\atomicmassunit }{u}\)
\(\newcommand {\bohr }{\mathit {a}_0}\)
\(\newcommand {\clight }{\mathit {c}_0}\)
\(\newcommand {\dalton }{\mathrm {D}_\mathrm {a}}\)
\(\newcommand {\electronmass }{\mathit {m}_{\mathrm {e}}}\)
\(\newcommand {\electronvolt }{\mathrm {eV}}\)
\(\newcommand {\elementarycharge }{\mathit {e}}\)
\(\newcommand {\hartree }{\mathit {E}_{\mathrm {h}}}\)
\(\newcommand {\planckbar }{\mathit {\unicode {x210F}}}\)
\(\newcommand {\angstrom }{\mathrm {\unicode {x212B}}}\)
\(\let \LWRorigbar \bar \)
\(\newcommand {\bar }{\mathrm {bar}}\)
\(\newcommand {\barn }{\mathrm {b}}\)
\(\newcommand {\bel }{\mathrm {B}}\)
\(\newcommand {\decibel }{\mathrm {dB}}\)
\(\newcommand {\knot }{\mathrm {kn}}\)
\(\newcommand {\mmHg }{\mathrm {mmHg}}\)
\(\newcommand {\nauticalmile }{\mathrm {M}}\)
\(\newcommand {\neper }{\mathrm {Np}}\)
\(\newcommand {\yocto }{\mathrm {y}}\)
\(\newcommand {\zepto }{\mathrm {z}}\)
\(\newcommand {\atto }{\mathrm {a}}\)
\(\newcommand {\femto }{\mathrm {f}}\)
\(\newcommand {\pico }{\mathrm {p}}\)
\(\newcommand {\nano }{\mathrm {n}}\)
\(\newcommand {\micro }{\mathrm {\unicode {x00B5}}}\)
\(\newcommand {\milli }{\mathrm {m}}\)
\(\newcommand {\centi }{\mathrm {c}}\)
\(\newcommand {\deci }{\mathrm {d}}\)
\(\newcommand {\deca }{\mathrm {da}}\)
\(\newcommand {\hecto }{\mathrm {h}}\)
\(\newcommand {\kilo }{\mathrm {k}}\)
\(\newcommand {\mega }{\mathrm {M}}\)
\(\newcommand {\giga }{\mathrm {G}}\)
\(\newcommand {\tera }{\mathrm {T}}\)
\(\newcommand {\peta }{\mathrm {P}}\)
\(\newcommand {\exa }{\mathrm {E}}\)
\(\newcommand {\zetta }{\mathrm {Z}}\)
\(\newcommand {\yotta }{\mathrm {Y}}\)
\(\newcommand {\percent }{\mathrm {\%}}\)
\(\newcommand {\meter }{\mathrm {m}}\)
\(\newcommand {\metre }{\mathrm {m}}\)
\(\newcommand {\gram }{\mathrm {g}}\)
\(\newcommand {\kg }{\kilo \gram }\)
\(\newcommand {\of }[1]{_{\mathrm {#1}}}\)
\(\newcommand {\squared }{^2}\)
\(\newcommand {\square }[1]{\mathrm {#1}^2}\)
\(\newcommand {\cubed }{^3}\)
\(\newcommand {\cubic }[1]{\mathrm {#1}^3}\)
\(\newcommand {\per }{/}\)
\(\newcommand {\celsius }{\unicode {x2103}}\)
\(\newcommand {\fg }{\femto \gram }\)
\(\newcommand {\pg }{\pico \gram }\)
\(\newcommand {\ng }{\nano \gram }\)
\(\newcommand {\ug }{\micro \gram }\)
\(\newcommand {\mg }{\milli \gram }\)
\(\newcommand {\g }{\gram }\)
\(\newcommand {\kg }{\kilo \gram }\)
\(\newcommand {\amu }{\mathrm {u}}\)
\(\newcommand {\nm }{\nano \metre }\)
\(\newcommand {\um }{\micro \metre }\)
\(\newcommand {\mm }{\milli \metre }\)
\(\newcommand {\cm }{\centi \metre }\)
\(\newcommand {\dm }{\deci \metre }\)
\(\newcommand {\m }{\metre }\)
\(\newcommand {\km }{\kilo \metre }\)
\(\newcommand {\as }{\atto \second }\)
\(\newcommand {\fs }{\femto \second }\)
\(\newcommand {\ps }{\pico \second }\)
\(\newcommand {\ns }{\nano \second }\)
\(\newcommand {\us }{\micro \second }\)
\(\newcommand {\ms }{\milli \second }\)
\(\newcommand {\s }{\second }\)
\(\newcommand {\fmol }{\femto \mol }\)
\(\newcommand {\pmol }{\pico \mol }\)
\(\newcommand {\nmol }{\nano \mol }\)
\(\newcommand {\umol }{\micro \mol }\)
\(\newcommand {\mmol }{\milli \mol }\)
\(\newcommand {\mol }{\mol }\)
\(\newcommand {\kmol }{\kilo \mol }\)
\(\newcommand {\pA }{\pico \ampere }\)
\(\newcommand {\nA }{\nano \ampere }\)
\(\newcommand {\uA }{\micro \ampere }\)
\(\newcommand {\mA }{\milli \ampere }\)
\(\newcommand {\A }{\ampere }\)
\(\newcommand {\kA }{\kilo \ampere }\)
\(\newcommand {\ul }{\micro \litre }\)
\(\newcommand {\ml }{\milli \litre }\)
\(\newcommand {\l }{\litre }\)
\(\newcommand {\hl }{\hecto \litre }\)
\(\newcommand {\uL }{\micro \liter }\)
\(\newcommand {\mL }{\milli \liter }\)
\(\newcommand {\L }{\liter }\)
\(\newcommand {\hL }{\hecto \liter }\)
\(\newcommand {\mHz }{\milli \hertz }\)
\(\newcommand {\Hz }{\hertz }\)
\(\newcommand {\kHz }{\kilo \hertz }\)
\(\newcommand {\MHz }{\mega \hertz }\)
\(\newcommand {\GHz }{\giga \hertz }\)
\(\newcommand {\THz }{\tera \hertz }\)
\(\newcommand {\mN }{\milli \newton }\)
\(\newcommand {\N }{\newton }\)
\(\newcommand {\kN }{\kilo \newton }\)
\(\newcommand {\MN }{\mega \newton }\)
\(\newcommand {\Pa }{\pascal }\)
\(\newcommand {\kPa }{\kilo \pascal }\)
\(\newcommand {\MPa }{\mega \pascal }\)
\(\newcommand {\GPa }{\giga \pascal }\)
\(\newcommand {\mohm }{\milli \ohm }\)
\(\newcommand {\kohm }{\kilo \ohm }\)
\(\newcommand {\Mohm }{\mega \ohm }\)
\(\newcommand {\pV }{\pico \volt }\)
\(\newcommand {\nV }{\nano \volt }\)
\(\newcommand {\uV }{\micro \volt }\)
\(\newcommand {\mV }{\milli \volt }\)
\(\newcommand {\V }{\volt }\)
\(\newcommand {\kV }{\kilo \volt }\)
\(\newcommand {\W }{\watt }\)
\(\newcommand {\uW }{\micro \watt }\)
\(\newcommand {\mW }{\milli \watt }\)
\(\newcommand {\kW }{\kilo \watt }\)
\(\newcommand {\MW }{\mega \watt }\)
\(\newcommand {\GW }{\giga \watt }\)
\(\newcommand {\J }{\joule }\)
\(\newcommand {\uJ }{\micro \joule }\)
\(\newcommand {\mJ }{\milli \joule }\)
\(\newcommand {\kJ }{\kilo \joule }\)
\(\newcommand {\eV }{\electronvolt }\)
\(\newcommand {\meV }{\milli \electronvolt }\)
\(\newcommand {\keV }{\kilo \electronvolt }\)
\(\newcommand {\MeV }{\mega \electronvolt }\)
\(\newcommand {\GeV }{\giga \electronvolt }\)
\(\newcommand {\TeV }{\tera \electronvolt }\)
\(\newcommand {\kWh }{\kilo \watt \hour }\)
\(\newcommand {\F }{\farad }\)
\(\newcommand {\fF }{\femto \farad }\)
\(\newcommand {\pF }{\pico \farad }\)
\(\newcommand {\K }{\mathrm {K}}\)
\(\newcommand {\dB }{\mathrm {dB}}\)
\(\newcommand {\kibi }{\mathrm {Ki}}\)
\(\newcommand {\mebi }{\mathrm {Mi}}\)
\(\newcommand {\gibi }{\mathrm {Gi}}\)
\(\newcommand {\tebi }{\mathrm {Ti}}\)
\(\newcommand {\pebi }{\mathrm {Pi}}\)
\(\newcommand {\exbi }{\mathrm {Ei}}\)
\(\newcommand {\zebi }{\mathrm {Zi}}\)
\(\newcommand {\yobi }{\mathrm {Yi}}\)
\(\require {mhchem}\)
\(\require {cancel}\)
\(\newcommand {\fint }{âĺŊ}\)
\(\newcommand {\hdots }{\cdots }\)
\(\newcommand {\mathnormal }[1]{#1}\)
\(\newcommand {\vecs }[2]{\vec {#1}_{#2}}\)
\(\renewcommand {\O }{\ensuremath {\mathcal {O}}}\)
\(\renewcommand {\P }{\ensuremath {\mathbb {P}}}\)
\(\renewcommand {\i }{\ensuremath {\mathrm {i}}}\)
\(\newcommand {\area }{\ensuremath {\mathrm {area}}}\)
\(\newcommand {\name }[1]{\textsc {#1}}\)
\(\newcommand {\smallpmatrix }[1]{\left (\begin {smallmatrix}#1\end {smallmatrix}\right )}\)
\(\newcommand {\matlab }{{\fontfamily {bch}\scshape \selectfont {}Matlab}}\)
\(\newcommand {\innerproduct }[1]{\left \langle {#1}\right \rangle }\)
\(\newcommand {\norm }[1]{\left \Vert {#1}\right \Vert }\)
\(\renewcommand {\natural }{\mathbb {N}}\)
\(\newcommand {\integer }{\mathbb {Z}}\)
\(\newcommand {\rational }{\mathbb {Q}}\)
\(\newcommand {\real }{\mathbb {R}}\)
\(\newcommand {\complex }{\mathbb {C}}\)
\(\renewcommand {\d }{\mathop {}\!\mathrm {d}}\)
\(\newcommand {\dr }{\d {}r}\)
\(\newcommand {\ds }{\d {}s}\)
\(\newcommand {\dt }{\d {}t}\)
\(\newcommand {\du }{\d {}u}\)
\(\newcommand {\dv }{\d {}v}\)
\(\newcommand {\dw }{\d {}w}\)
\(\newcommand {\dx }{\d {}x}\)
\(\newcommand {\dy }{\d {}y}\)
\(\newcommand {\dz }{\d {}z}\)
\(\newcommand {\dsigma }{\d {}\sigma }\)
\(\newcommand {\dphi }{\d {}\phi }\)
\(\newcommand {\dvarphi }{\d {}\varphi }\)
\(\newcommand {\dtau }{\d {}\tau }\)
\(\newcommand {\dxi }{\d {}\xi }\)
\(\newcommand {\dtheta }{\d {}\theta }\)
\(\newcommand {\tp }{\mathrm {T}}\)
Knotenfolge: Eine Knotenfolge
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\xi \colon \dotsb \le \xi _{-1} \le \xi _0 \le \xi _1 \le \dotsb
\end{align*}
ist eine endliche, unendliche oder bi-unendliche nicht-fallende Folge von reellen Zahlen. Sie induziert eine Partition von \([\inf _k \xi _k, \sup _k \xi _k)\) in Knotenintervalle
\([\xi _\ell , \xi _{\ell +1})\). Die Vielfachheit \(\#\xi _k\) eines Knotens ist die maximale Zahl an Wiederholungen von \(\xi _k\) in der Folge \(\xi \). Man spricht
analog zu Nullstellen von Funktionen von einfachen und doppelten Knoten usw.
Rekursionsformel: Für eine Knotenfolge \(\xi \) sind die B-Splines \(b_{k,\xi }^n\) vom Grad \(n\) definiert durch die Rekursion
\(\seteqnumber{0}{}{0}\)
\begin{align*}
b_{k,\xi }^n := \gamma _{k,\xi }^n b_{k,\xi }^{n-1} + (1 - \gamma _{k+1,\xi }^n) b_{k+1,\xi }^{n-1},\quad \gamma _{k,\xi }^n(x) := \frac {x - \xi _k}{\xi _{k+n} - \xi _k},
\end{align*}
beginnend mit den charakteristischen Funktionen
\(\seteqnumber{0}{}{0}\)
\begin{align*}
b_{k,\xi }^0(x) := \begin{cases}1 & \text {für } \xi _k \le x < \xi _{k+1}\\0 & \text {sonst}\end {cases}
\end{align*}
der Knotenintervalle \([\xi _k, \xi _{k+1})\), wobei Terme mit \(0\) als Nenner weggelassen werden.
Jeder B-Spline \(b_{k,\xi }^n\) ist durch seine Knoten \(\xi _k, \dotsc , \xi _{k+n+1}\) eindeutig bestimmt und verschwindet außerhalb des Intervalls \([\xi _k, \xi _{k+n+1})\). Außerdem ist \(b_{k,\xi }^n\) auf
jedem nicht-leeren Knotenintervall \([\xi _\ell , \xi _{\ell +1})\) mit \(\ell = k, \dotsc , k + n\) ein nicht-negatives Polynom vom Grad \(\le n\).
Falls der Grad und die Knotenfolge bei der Diskussion eines bestimmten Themas fixiert sind, schreibt man \(b_k = b_{k,\xi }^n\), um eine übermäßige Nutzung von tief- und hochgestellten Indizes zu
vermeiden.
Bernstein-Polynome als B-Splines: Die B-Splines enthalten die Bernstein-Polynome als Spezialfall. Der B-Spline \(b_{k,\xi }^n\) mit den Knoten
\(\seteqnumber{0}{}{0}\)
\begin{align*}
0 = \xi _k = \dotsb = \xi _n < \xi _{n+1} = \dotsb = \xi _{k+n+1} = 1
\end{align*}
entspricht einem Bernstein-Polynom:
\(\seteqnumber{0}{}{0}\)
\begin{align*}
b_{k,\xi }^n(x) = b_k^n(x) = \binom {n}{k} (1 - x)^{n - k} x^k,\quad 0 \le x < 1.
\end{align*}
erstes und letztes B-Spline-Segment: Für \(\xi _k < \xi _{k+1}\) ist bloß der erste Summand in der Rekursion für \(b_{k,\xi }^n\) auf dem Intervall \([\xi _k, \xi _{k+1})\) ungleich
Null. Daher ist auf diesem Intervall der B-Spline ein Produkt der Faktoren \(\gamma _{k,\xi }^m\):
\(\seteqnumber{0}{}{0}\)
\begin{align*}
b_{k,\xi }^n(x) = \frac {(x - \xi _k)^n}{(\xi _{k+1} - \xi _k) \dotsm (\xi _{k+n} - \xi _k)},\quad \xi _k \le x < \xi _{k+1}.
\end{align*}
Eine analoge Formel gilt für das am weitesten rechts liegende Intervall \([\xi _{k+n}, \xi _{k+n+1})\) des Trägers von \(b_{k,\xi }^n\). Insbesondere gilt für \(\xi _{k+1} = \dotsb = \xi
_{k+n}\), dass der B-Spline aus zwei Monomen zusammengesetzt ist, die am mittleren Knoten \(1\) ergeben.
stetige Abhängigkeit vom Knotenvektor: Wenn \(x\) im Inneren von einem der Knotenintervalle des B-Splines \(b_{k,\xi }^n\) liegt und
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\eta _\ell \to \xi _\ell ,\quad \ell = k, \dotsc , k + n + 1,
\end{align*}
dann gilt
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\lim _{\eta \to \xi } b_{k,\eta }^n(x) = b_{k,\xi }^n(x).
\end{align*}
Ableitung eines B-Splines
Ableitung eines B-Splines: Die Ableitung eines B-Splines vom Grad \(n\) mit den Knoten \(\xi _k, \dotsc ,\)
\(\xi _{k+n+1}\) ist die gewichtete Differenz zweier B-Splines vom Grad \(n - 1\). Auf jedem Knotenintervall \([\xi _\ell , \xi _{\ell +1})\) gilt
\(\seteqnumber{0}{}{0}\)
\begin{align*}
(b_{k,\xi }^n)’ = \alpha _{k,\xi }^n b_{k,\xi }^{n-1} - \alpha _{k+1,\xi }^n b_{k+1,\xi }^{n-1},\quad \alpha _{k,\xi }^n := \frac {n}{\xi _{k+n} - \xi _k},
\end{align*}
wobei Terme mit \(0\) als Nenner weggelassen werden.
Aus der Rekursion folgt, dass \(b_{k,\xi }\) an einem Knoten \(\xi _\ell \) \((n - m)\)-mal stetig differenzierbar ist, falls \(\xi _\ell \) unter \(\xi _k, \dotsc , \xi _{k+n+1}\) die Vielfachheit \(m \le n\) besitzt.
Insbesondere ist \(b_{k,\xi }^n\) stetig auf \(\real \), falls keiner der Knoten die Vielfachheit \(n + 1\) hat.
Nullstellenordnungen bei B-Splines: Mithilfe der Ableitungsformel kann man auch das genaue Verhalten eines B-Splines an den Endpunkten seines Trägers bestimmen. Wenn \(\xi _k\) die Vielfachheit \(m\)
unter den Knoten von \(b_{k,\xi }^n\) besitzt, dann ist der linke Endpunkt \(\xi _k\) des B-Spline-Trägers eine Nullstelle der Ordnung \(n + 1 - m\).
Dies folgt per Induktion über dem Grad: Für den Induktionsschritt von \(n - 1\) nach \(n\) bemerkt man, dass die zwei B-Splines von Grad \(n - 1\) im Ausdruck von \((b_{k,\xi }^n)’\) jeweils Nullstellen
von Ordnung \(n - m\) und \(n - (m - 1)\) besitzen. Daher hat \((b_{k,\xi }^n)’\) in \(\xi _k\) eine Nullstelle der Ordnung \(n - m\). Durch Integration erhöht sich die Ordnung um \(1\).
Darstellung von Polynomen durch B-Splines
Marsden-Identität: Für eine bi-unendliche Knotenfolge \(\xi \) mit \(\lim _{k \to \pm \infty } \xi _k = \pm \infty \) kann jedes Polynom vom Grad
\(\le n\) durch eine Linearkombination von B-Splines dargestellt werden. Genauer gilt für beliebige \(y \in \real \)
\(\seteqnumber{0}{}{0}\)
\begin{align*}
(x - y)^n = \sum _{k \in \integer } \psi _{k,\xi }^n(y) b_{k,\xi }(x),\quad x \in \real ,
\end{align*}
mit \(\psi _{k,\xi }^n(y) := (\xi _{k+1} - y) \dotsm (\xi _{k+n} - y)\).
Durch Differentiation der Identität nach \(y\) und Auswertung in \(y = 0\) erhält man explizite Darstellungen für die Monome \(x^m\). Es gilt z. B.
\(\seteqnumber{0}{}{0}\)
\begin{align*}
1 = \sum _k b_{k,\xi }^n(x),\quad x = \sum _k \xi _k^n b_{k,\xi }^n(x)
\end{align*}
mit \(\xi _k^n := (\xi _{k+1} + \dotsb + \xi _{k+n})/n\) den Knotenmitteln.
Einschränkung des Parameters: Die Marsden-Identität ist zwar für bi-unendliche Knotenfolgen formuliert, die sich über die ganze reelle Achse erstrecken. Offensichtlich kann man
aber auch endliche Knotenfolgen betrachten. Wenn man \(x\) auf ein Knotenintervall \(D_\ell = [\xi _\ell , \xi _{\ell +1})\) einschränkt, sind nur B-Splines mit Träger, die \(D_\ell \)
überlappen, relevant:
\(\seteqnumber{0}{}{0}\)
\begin{align*}
(x - y)^n = \sum _{k=\ell -n}^\ell \psi _{k,\xi }^n(y) b_{k,\xi }^n(x),\quad \xi _\ell \le x < \xi _{\ell +1},
\end{align*}
falls \(\xi \) die involvierten Knoten \(\xi _{\ell -n}, \dotsc , \xi _{\ell +n+1}\) enthält.
Beispiel (Darstellung der Standard-Parabel durch B-Splines): Die Darstellung des Monoms \(x^2\) erhält man durch Koeffizientenvergleich in der Marsden-Identität bei \((-y)^{n-2}\) und Division
durch \(\binom {n}{2}\) auf beiden Seiten:
\(\seteqnumber{0}{}{0}\)
\begin{align*}
x^2 = \sum _k c_k b_k(x),\quad c_k = \frac {2}{n(n - 1)} \sum _{1 \le i < j \le n} \xi _{k+i}\xi _{k+j},
\end{align*}
da die Summe gleich dem Koeffizienten von \((-y)^{n-2}\) in einer Entwicklung von \(\psi _{k,\xi }^n\) ist. Mit
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\xi _k^n := \frac {1}{n} \sum _{\ell =1}^n \xi _{k+\ell },\quad \sigma _k^2 := \frac {1}{n - 1} \sum _{\ell =1}^n (\xi _{k+\ell } - \xi _k^n)^2
\end{align*}
den Knotenmitteln und der geometrischen Varianz von \(n\) aufeinanderfolgenden Knoten kann man \(c_k\) kompakter schrieben, denn es gilt
\(\seteqnumber{0}{}{0}\)
\begin{align*}
c_k = (\xi _k^n)^2 - \sigma _k^2/n.
\end{align*}
Splines
Spline: Ein Spline \(p\) vom Grad \(\le n\) mit Knotenfolge \(\xi \) auf einem Parameterintervall \(D\) ist eine Linearkombination der B-Splines \(b_k = b_{k,\xi }^n\):
\(\seteqnumber{0}{}{0}\)
\begin{align*}
p(x) = \sum _{k \sim D} c_k b_k(x),\quad x \in D.
\end{align*}
Der Summenindex läuft über alle relevanten B-Splines, d. h. die B-Splines, die an Punkten \(x\) in \(D\) nicht verschwinden. Die Koeffizienten \(c_k\) sind eindeutig bestimmt, d. h. die
B-Splines formen eine Basis des Spline-Raums \(S_\xi ^n(D)\).
Ein Standard-Spline-Raum \(S_\xi ^n\) hat eine endliche Knotenfolge \(\xi _0, \dotsc , \xi _{m+n}\) mit Vielfachheiten \(\le n\), das Parameterintervall \(D = [\xi _n,
\xi _m]\) und relevante B-Splines \(b_0, \dotsc , b_{m-1}\). Der Raum besteht aus allen stetigen Funktionen, die
auf den abgeschlossenen Knotenintervallen \([\xi _\ell , \xi _{\ell +1}]\) in \(D\) Polynome vom Grad \(\le n\) und
an Knoten im Inneren von \(D\) mit Vielfachheit \(\mu \) mindestens \((n - \mu )\)-mal stetig differenzierbar sind.
\(S_\xi ^n\) hat die \(\real \)-Dimension \(m\).
Beispiel (Knotenfolgen bei kubischen Splines): In Anwendungen sind kubische Splines wichtig. Zwei häufig benutzte Knotenfolgen sind:
einfache Knoten: Wenn \(\xi _0 < \dotsb < \xi _{m+3}\) gilt, dann besteht der Standard-Spline-Raum \(S_\xi ^3\) aus allen zweifach stetig differenzierbaren Funktionen, die Polynome vom Grad \(\le 3\)
auf jedem abgeschlossenen Knotenintervall \([\xi _\ell , \xi _{\ell +1}]\) in \(D = [\xi _3, \xi _m]\) sind.
doppelte Knoten: Wenn \(\xi _0 = \xi _1 < \xi _2 = \xi _3 < \dotsb < \xi _m = \xi _{m+1} < \xi _{m+2} = \xi _{m+3}\) gilt, dann können die zweiten Ableitungen der kubischen
Splines Sprünge besitzen. In diesem Fall sind die kubischen Splines auf jedem abgeschlossenen Knotenintervall \([\xi _{2k-1}, \xi _{2k}]\) eindeutig bestimmt durch die Werte und Ableitungen an den Knoten. Diese
Daten stellen bei der Bestimmung eines Splines in \(S_\xi ^3\) eine Alternative zur B-Spline-Basis dar.
Beispiel (äußere Knoten beim Standard-Spline-Raum): Für eine Knotenfolge
\(\xi _0, \dotsc , \xi _{n+m}\) benötigt die B-Spline-Basis des Standard-Spline-Raums \(S_\xi ^n\) \(n\) äußere Knoten auf jeder Seite des Parameterintervalls \(D = [\xi _n, \xi _m]\). Diese Knoten
\(\xi _k\) mit \(k < n\) oder \(k > m\) sind für die Definition von \(S_\xi ^n\) bezüglich der abschnittsweisen polynomialen Struktur irrelevant. Jedoch beeinflussen sie die B-Spline-Basis. Es gibt zwei
Standardfälle:
einfache äußere Knoten: Mit \(\Delta \xi _\ell := \xi _{\ell +1} - \xi _\ell \) definiert man \(\xi _{n-\ell } := \xi _n - \ell \Delta \xi _n\) und \(\xi _{m+\ell } := \xi _m + \ell
\Delta \xi _{m-1}\) für \(\ell = 1, \dotsc , n\). Diese Wahl der Knoten erhält den Abstand zwischen Knoten auf dem ersten und letzten Knotenintervall in \(D\) und maximiert die Glattheit der B-Splines.
mehrfache äußere Knoten: Man definiert \(\xi _1 := \dotsb := \xi _n\) und \(\xi _m := \dotsb := \xi _{m+n-1}\) und wählt nur \(\xi _0\) und \(\xi _{m+n}\) außerhalb des Intervalls
\(D\). Wegen der maximal möglichen Vielfachheit sind nur die B-Splines \(b_0\) und \(b_{m-1}\) nicht Null auf den Intervallendpunkten (diese sind dort gleich Eins). Daher gilt für einen Spline \(p = \sum
_{k=0}^{m-1} c_k b_k\), dass \(p(\xi _n) = c_0\) und \(p(\xi _m) = c_{m-1}\). Der Nachteil der Vielfachheit \(n\) ist, dass die Ableitungen der B-Splines nicht länger stetig sind. Die Konvention der Stetigkeit von
rechts führt daher zu einem asymmetrischen Verhalten auf den Intervallendpunkten von \(D\).
uniforme B-Splines: Der uniforme B-Spline \(b^n\) hat die Knoten \(0, 1, \dotsc , n + 1\). In diesem Spezialfall vereinfachen sich die Rekursionen für
Auswertung und Differentiation:
\(\seteqnumber{0}{}{0}\)
\begin{align*}
n b^n(x) &= xb^{n-1}(x) + (n + 1 - x)b^{n-1} (x - 1),\\ \frac {d}{dx} b^n(x) &= b^{n-1}(x) - b^{n-1}(x - 1).
\end{align*}
Die zweite Gleichung kann als Bildung eines Mittelwerts geschrieben werden:
\(\seteqnumber{0}{}{0}\)
\begin{align*}
b^n(x) = \int _0^1 b^{n-1}(x - y)\dy .
\end{align*}
Die B-Splines für eine beliebige uniforme Knotenfolge
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\xi = h\integer \colon \dotsc , -h, 0, h, \dotsc ,
\end{align*}
sind skalierte Translate von \(b^n\), d. h. \(b_{k,h}^n(x) := b^n(x/h - k)\), \(k \in \integer \).
Beispiel (Rekursion für die Taylor-Koeffizienten von uniformen B-Splines):
Die Rekursion für die Auswertung kann auch als Rekursion für die Taylor-Koeffizienten der polynomialen Abschnitte eines uniformen B-Splines formuliert werden. Für \(x \in [k, k + 1)\) definiert
man
\(\seteqnumber{0}{}{0}\)
\begin{align*}
p_k^n(y) := \sum _{\ell =0}^n a_{k,\ell }^n y^\ell = b^n(x),\quad x - k = y \in [0, 1).
\end{align*}
Damit kann die Rekursion umgeschrieben werden zu
\(\seteqnumber{0}{}{0}\)
\begin{align*}
np_k^n(y) = (k + y)p_k^{n-1}(y) + (n + 1 - k - y) p_{k-1}^{n-1}(y),\quad k = 0, \dotsc , n,
\end{align*}
mit \(p_{-1}^{n-1} = p_n^{n-1} = 0\). Die entsprechende Identität für die Koeffizienten ist
\(\seteqnumber{0}{}{0}\)
\begin{align*}
n a_{k,\ell }^n = k a_{k,\ell }^{n-1} + a_{k,\ell -1}^{n-1} + (n + 1 - k) a_{k-1,\ell }^{n-1} - a_{k-1,\ell -1}^{n-1}
\end{align*}
mit \(a_{k,-1}^{n-1} = a_{k,n}^{n-1} = 0\). Die ersten paar Koeffizientenvektoren lauten
\(\seteqnumber{0}{}{0}\)
\begin{align*}
a_0^1 &= \left (0, 1\right ), & a_1^1 &= \left (1, -1\right ),\\ a_0^2 &= \left (0, 0, \frac {1}{2}\right ), & a_1^2 &= \left (\frac {1}{2}, 1, -1\right ), & a_2^2
&= \left (\frac {1}{2}, -1, \frac {1}{2}\right ),\\ a_0^3 &= \left (0, 0, 0, \frac {1}{6}\right ), & a_1^3 &= \left (\frac {1}{6}, \frac {1}{2}, \frac {1}{2}, -\frac
{1}{2}\right ), & a_2^3 &= \left (\frac {2}{3}, 0, -1, \frac {1}{2}\right ), & a_3^3 &= \left (\frac {1}{6}, -\frac {1}{2}, \frac {1}{2}, -\frac {1}{6}\right ).
\end{align*}
Mithilfe der tabulierten Taylorkoeffizienten kann man uniforme B-Splines schneller als mit der Rekursion auswerten.
Auswertung und Differentiation
Auswertung eines Splines: Ein Spline \(p = \sum _k c_k b_k\) vom Grad \(\le n\) mit Knotenfolge \(\xi \) kann in \(x \in [\xi _\ell , \xi _{\ell +1})\) ausgewertet werden, indem man Konvexkombinationen
der Koeffizienten der B-Splines bildet, die in \(x\) nicht verschwinden. Mit
\(\seteqnumber{0}{}{0}\)
\begin{align*}
p_k^0 := c_k,\quad k = \ell - n, \dotsc , \ell ,
\end{align*}
startend berechnet man sukzessive für \(i = 0, \dotsc , n - 1\)
\(\seteqnumber{0}{}{0}\)
\begin{align*}
p_k^{i+1} := \gamma _{k,\xi }^{n-i} p_k^i + (1 - \gamma _{k,\xi }^{n-i}) p_{k-1}^i,\quad k = \ell - n + i + 1, \dotsc , \ell ,
\end{align*}
mit
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\gamma _{k,\xi }^{n-i} := \frac {x - \xi _k}{\xi _{k+n-i} - \xi _k}
\end{align*}
und erhält \(p(x)\) als letzten Wert \(p_\ell ^n\).
Das entstehende Dreiecksschema vereinfacht sich etwas, wenn \(x = \xi _\ell \) gilt. In diesem Fall gilt \(p(x) = p_{\ell -\mu }^{n-\mu }\), d. h. es sind nur \(n - \mu \) Schritte für \(c_{\ell -n},
\dotsc , c_{\ell -\mu }\) notwendig, wenn \(\xi _\ell \) Vielfachheit \(\mu \) besitzt.
Differentiation eines Splines: Die Ableitung eines Splines ist ein Spline mit derselben Knotenfolge. Genauer gilt für jedes \(x\) in einem offenen Knotenintervall \((\xi _\ell , \xi _{\ell +1})\) mit \(n +
1\) relevanten B-Splines \(b_{k,\xi }^n\)
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\frac {d}{dx} \left (\sum _{k=\ell -n}^\ell c_k b_{k,\xi }^n(x)\right ) = \sum _{k=\ell -n+1}^\ell \alpha _{k,\xi }^n \nabla c_k b_{k,\xi }^{n-1}(x),\quad \alpha _{k,\xi }^n := \frac {n}{\xi
_{k+n} - \xi _k}
\end{align*}
mit \(\nabla \) dem Rückwärts-Differenz-Operator (d. h. \(\nabla c_k := c_k - c_{k-1}\)). Die Identität bleibt auch an den Endpunkten \(\xi _\ell \) und \(\xi _{\ell +1}\) des
Knotenintervalls gültig, falls die Knoten Vielfachheit \(< n\) haben.
Für einen Spline \(p = \sum _{k=0}^{m-1} c_k b_k\) in einem Standard-Spline-Raum \(S_\xi ^n\) mit Knotenfolge
\(\xi _0, \dotsc , \xi _{m+n}\) und Vielfachheiten \(< n\) gilt mit \(d_k := \alpha _{k,\xi } \nabla c_k\)
\(\seteqnumber{0}{}{0}\)
\begin{align*}
p’ = \sum _{k=1}^{m-1} d_k b_{k,\xi ’}^{n-1} \in S_{\xi ’}^{n-1},
\end{align*}
wobei \(\xi ’\) aus \(\xi \) durch Weglassen des ersten und des letzten Knotens entsteht. Dies ist mit der Differenzenbildung \(\nabla \) konsistent, weil die Anzahl der möglichen Indizes um Eins reduziert wird.
Periodische Splines
periodische Splines: Ein Spline \(p = \sum _{k \in \integer } c_k b_k \in S_\xi ^n(\real )\) mit einer bi-unendlichen Knotenfolge \(\xi \) ist \(T\)-periodisch genau dann, wenn die Knoten \(\xi _k\) und die
Koeffizienten \(c_k\) die Periodizitätsbedingungen
\(\seteqnumber{0}{}{0}\)
\begin{align*}
\xi _{k+M} = \xi _k + T,\quad c_{k+M} = c_k,\quad k \in \integer ,
\end{align*}
erfüllen (für ein \(M \in \natural \)).
Die periodischen Splines bilden einen Unterraum \(S_{\eta ,T}^n\) von \(S_\xi ^n(\real )\) der Dimension \(M\), wobei \(\eta \) eine beliebige Teilfolge von \(M\) aufeinanderfolgenden Knoten aus \(\xi \) ist.