Mercurial > hg > kwantix
view html/classrbf_1_1thin__plate__spline.html @ 4:9d4fda54a41d
Buggy, must check why interpolator assignment destroys precomputed
data.
author | Jordi Guitérrez Hermoso <jordigh@gmail.com> |
---|---|
date | Sun, 29 Jun 2008 04:06:48 -0500 |
parents | 4fa56dc7e271 |
children |
line wrap: on
line source
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <title>rbf::thin_plate_spline Class Reference</title> <link href="doxygen.css" rel="stylesheet" type="text/css"> <link href="tabs.css" rel="stylesheet" type="text/css"> </head><body> <!-- Generated by Doxygen 1.5.6 --> <div class="navigation" id="top"> <div class="tabs"> <ul> <li><a href="index.html"><span>Main Page</span></a></li> <li><a href="namespaces.html"><span>Namespaces</span></a></li> <li class="current"><a href="annotated.html"><span>Classes</span></a></li> <li><a href="files.html"><span>Files</span></a></li> </ul> </div> <div class="tabs"> <ul> <li><a href="annotated.html"><span>Class List</span></a></li> <li><a href="hierarchy.html"><span>Class Hierarchy</span></a></li> <li><a href="functions.html"><span>Class Members</span></a></li> </ul> </div> <div class="navpath"><a class="el" href="namespacerbf.html">rbf</a>::<a class="el" href="classrbf_1_1thin__plate__spline.html">thin_plate_spline</a> </div> </div> <div class="contents"> <h1>rbf::thin_plate_spline Class Reference</h1><!-- doxytag: class="rbf::thin_plate_spline" --><!-- doxytag: inherits="rbf::piecewise_smooth_rbf" -->r^n log(r) with n even <a href="#_details">More...</a> <p> <code>#include <<a class="el" href="rbf_8hpp-source.html">rbf.hpp</a>></code> <p> <div class="dynheader"> Inheritance diagram for rbf::thin_plate_spline:</div> <div class="dynsection"> <p><center><img src="classrbf_1_1thin__plate__spline__inherit__graph.png" border="0" usemap="#rbf_1_1thin__plate__spline__inherit__map" alt="Inheritance graph"></center> <map name="rbf_1_1thin__plate__spline__inherit__map"> <area shape="rect" href="classrbf_1_1piecewise__smooth__rbf.html" title="Piecewise smooth RBFs." alt="" coords="5,161,192,188"><area shape="rect" href="classrbf_1_1radial__basis__function.html" title="Base abstract class." alt="" coords="9,84,188,111"><area shape="rect" href="classbvp_1_1realfunc.html" title="bvp::realfunc" alt="" coords="47,7,151,33"></map> <center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div> <div class="dynheader"> Collaboration diagram for rbf::thin_plate_spline:</div> <div class="dynsection"> <p><center><img src="classrbf_1_1thin__plate__spline__coll__graph.png" border="0" usemap="#rbf_1_1thin__plate__spline__coll__map" alt="Collaboration graph"></center> <map name="rbf_1_1thin__plate__spline__coll__map"> <area shape="rect" href="classrbf_1_1piecewise__smooth__rbf.html" title="Piecewise smooth RBFs." alt="" coords="27,180,213,206"><area shape="rect" href="classrbf_1_1radial__basis__function.html" title="Base abstract class." alt="" coords="31,100,209,126"><area shape="rect" href="classbvp_1_1realfunc.html" title="bvp::realfunc" alt="" coords="5,6,109,33"><area shape="rect" href="classlinalg_1_1vector.html" title="A wrapper class for GSL vectors." alt="" coords="133,6,235,33"></map> <center><font size="2">[<a href="graph_legend.html">legend</a>]</font></center></div> <p> <a href="classrbf_1_1thin__plate__spline-members.html">List of all members.</a><table border="0" cellpadding="0" cellspacing="0"> <tr><td></td></tr> <tr><td colspan="2"><br><h2>Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classrbf_1_1thin__plate__spline.html#18e56f16510b1986809e13e06c57e603">thin_plate_spline</a> ()</td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="classrbf_1_1thin__plate__spline.html#ca6f99af3f94dd490080bce202bea72b">thin_plate_spline</a> (const <a class="el" href="classlinalg_1_1vector.html">point</a> &c)</td></tr> <tr><td colspan="2"><br><h2>Static Public Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="classrbf_1_1thin__plate__spline.html#7db3860c7d6a9f48ae07853e32110ad6">set_n</a> (size_t new_n)</td></tr> <tr><td colspan="2"><br><h2>Private Member Functions</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classrbf_1_1thin__plate__spline.html#bbdcc07f10356ae80eca1f2f789ef8cc">operator()</a> (double r) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">The scalar functions defining each RBF. <a href="#bbdcc07f10356ae80eca1f2f789ef8cc"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classrbf_1_1thin__plate__spline.html#9033e98e17d9689d5815228089b7895c">d</a> (double r) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">The scalar first derivative defining each RBF. <a href="#9033e98e17d9689d5815228089b7895c"></a><br></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="classrbf_1_1thin__plate__spline.html#e58fdc6d240f0146ef418507af2bc29d">d2</a> (double r) const </td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">The scalar second derivative defining each RBF. <a href="#e58fdc6d240f0146ef418507af2bc29d"></a><br></td></tr> <tr><td colspan="2"><br><h2>Static Private Attributes</h2></td></tr> <tr><td class="memItemLeft" nowrap align="right" valign="top">static size_t </td><td class="memItemRight" valign="bottom"><a class="el" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8">n</a> = 0</td></tr> <tr><td class="mdescLeft"> </td><td class="mdescRight">Shape parameter. <a href="#758f6c4bbc04ff390006b47198429ca8"></a><br></td></tr> </table> <hr><a name="_details"></a><h2>Detailed Description</h2> r^n log(r) with n even <hr><h2>Constructor & Destructor Documentation</h2> <a class="anchor" name="18e56f16510b1986809e13e06c57e603"></a><!-- doxytag: member="rbf::thin_plate_spline::thin_plate_spline" ref="18e56f16510b1986809e13e06c57e603" args="()" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">rbf::thin_plate_spline::thin_plate_spline </td> <td>(</td> <td class="paramname"> </td> <td> ) </td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <div class="fragment"><pre class="fragment"><a name="l00145"></a>00145 {}; </pre></div> <p> </div> </div><p> <a class="anchor" name="ca6f99af3f94dd490080bce202bea72b"></a><!-- doxytag: member="rbf::thin_plate_spline::thin_plate_spline" ref="ca6f99af3f94dd490080bce202bea72b" args="(const point &c)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">rbf::thin_plate_spline::thin_plate_spline </td> <td>(</td> <td class="paramtype">const <a class="el" href="classlinalg_1_1vector.html">point</a> & </td> <td class="paramname"> <em>c</em> </td> <td> ) </td> <td><code> [inline]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <div class="fragment"><pre class="fragment"><a name="l00146"></a>00146 : <a class="code" href="classrbf_1_1piecewise__smooth__rbf.html#ec3b67bc216c9846983953fdc1389da3">piecewise_smooth_rbf</a>(c){;}; </pre></div> <p> </div> </div><p> <hr><h2>Member Function Documentation</h2> <a class="anchor" name="7db3860c7d6a9f48ae07853e32110ad6"></a><!-- doxytag: member="rbf::thin_plate_spline::set_n" ref="7db3860c7d6a9f48ae07853e32110ad6" args="(size_t new_n)" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">void rbf::thin_plate_spline::set_n </td> <td>(</td> <td class="paramtype">size_t </td> <td class="paramname"> <em>new_n</em> </td> <td> ) </td> <td><code> [static]</code></td> </tr> </table> </div> <div class="memdoc"> <p> <div class="fragment"><pre class="fragment"><a name="l00179"></a>00179 { <a name="l00180"></a>00180 <span class="keywordflow">if</span>(n_new % 2 != 0){ <a name="l00181"></a>00181 badArgument exc; <a name="l00182"></a>00182 exc.reason = <span class="stringliteral">"Cannot assign an odd n to a thin-plate spline RBF."</span>; <a name="l00183"></a>00183 exc.line = __LINE__; <a name="l00184"></a>00184 exc.file = __FILE__; <a name="l00185"></a>00185 <span class="keywordflow">throw</span> exc; <a name="l00186"></a>00186 } <a name="l00187"></a>00187 <a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">thin_plate_spline::n</a> = n_new; <a name="l00188"></a>00188 } </pre></div> <p> </div> </div><p> <a class="anchor" name="bbdcc07f10356ae80eca1f2f789ef8cc"></a><!-- doxytag: member="rbf::thin_plate_spline::operator()" ref="bbdcc07f10356ae80eca1f2f789ef8cc" args="(double r) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">double rbf::thin_plate_spline::operator() </td> <td>(</td> <td class="paramtype">double </td> <td class="paramname"> <em>r</em> </td> <td> ) </td> <td> const<code> [private, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> The scalar functions defining each RBF. <p> <p>Implements <a class="el" href="classrbf_1_1radial__basis__function.html#ca1d152380fa43082c710a07f28080be">rbf::radial_basis_function</a>.</p> <div class="fragment"><pre class="fragment"><a name="l00284"></a>00284 { <a name="l00285"></a>00285 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 0){ <a name="l00286"></a>00286 badArgument exc; <a name="l00287"></a>00287 exc.reason = <a name="l00288"></a>00288 <span class="stringliteral">"Parameter n not set for thin_plate_spline. \n"</span> <a name="l00289"></a>00289 <span class="stringliteral">"Use thin_plate_spline::set_n before evaluating."</span>; <a name="l00290"></a>00290 exc.line = __LINE__; <a name="l00291"></a>00291 exc.file = __FILE__; <a name="l00292"></a>00292 <span class="keywordflow">throw</span> exc; <a name="l00293"></a>00293 } <a name="l00294"></a>00294 r = fabs(r); <a name="l00295"></a>00295 <span class="keywordflow">if</span>(r == 0) <a name="l00296"></a>00296 <span class="keywordflow">return</span> 0; <a name="l00297"></a>00297 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 2) <a name="l00298"></a>00298 <span class="keywordflow">return</span> gsl_pow_2(r)*log(r); <a name="l00299"></a>00299 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 4) <a name="l00300"></a>00300 <span class="keywordflow">return</span> gsl_pow_4(r)*log(r); <a name="l00301"></a>00301 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 6) <a name="l00302"></a>00302 <span class="keywordflow">return</span> gsl_pow_6(r)*log(r); <a name="l00303"></a>00303 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 8) <a name="l00304"></a>00304 <span class="keywordflow">return</span> gsl_pow_8(r)*log(r); <a name="l00305"></a>00305 <a name="l00306"></a>00306 <span class="keywordflow">return</span> pow(r,<span class="keywordtype">double</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a>))*log(r); <a name="l00307"></a>00307 } </pre></div> <p> </div> </div><p> <a class="anchor" name="9033e98e17d9689d5815228089b7895c"></a><!-- doxytag: member="rbf::thin_plate_spline::d" ref="9033e98e17d9689d5815228089b7895c" args="(double r) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">double rbf::thin_plate_spline::d </td> <td>(</td> <td class="paramtype">double </td> <td class="paramname"> <em>r</em> </td> <td> ) </td> <td> const<code> [private, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> The scalar first derivative defining each RBF. <p> <p>Implements <a class="el" href="classrbf_1_1radial__basis__function.html#0aa55b82614330604e8ea63b8aef419a">rbf::radial_basis_function</a>.</p> <div class="fragment"><pre class="fragment"><a name="l00310"></a>00310 { <a name="l00311"></a>00311 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 0){ <a name="l00312"></a>00312 badArgument exc; <a name="l00313"></a>00313 exc.reason = <a name="l00314"></a>00314 <span class="stringliteral">"Parameter n not set for thin_plate_spline. \n"</span> <a name="l00315"></a>00315 <span class="stringliteral">"Use thin_plate_spline::set_n before evaluating."</span>; <a name="l00316"></a>00316 exc.line = __LINE__; <a name="l00317"></a>00317 exc.file = __FILE__; <a name="l00318"></a>00318 <span class="keywordflow">throw</span> exc; <a name="l00319"></a>00319 } <a name="l00320"></a>00320 r = fabs(r); <a name="l00321"></a>00321 <span class="keywordflow">if</span>(r == 0) <a name="l00322"></a>00322 <span class="keywordflow">return</span> 0; <a name="l00323"></a>00323 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 2) <a name="l00324"></a>00324 <span class="keywordflow">return</span> r*(2*log(r) + 1); <a name="l00325"></a>00325 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 4) <a name="l00326"></a>00326 <span class="keywordflow">return</span> gsl_pow_3(r)*(4*log(r) + 1); <a name="l00327"></a>00327 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 6) <a name="l00328"></a>00328 <span class="keywordflow">return</span> gsl_pow_5(r)*(6*log(r) + 1); <a name="l00329"></a>00329 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 8) <a name="l00330"></a>00330 <span class="keywordflow">return</span> gsl_pow_7(r)*(8*log(r) + 1); <a name="l00331"></a>00331 <a name="l00332"></a>00332 <span class="keywordflow">return</span> pow(r,<span class="keywordtype">double</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a>-1))*(double(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a>)*log(r) + 1); <a name="l00333"></a>00333 } </pre></div> <p> </div> </div><p> <a class="anchor" name="e58fdc6d240f0146ef418507af2bc29d"></a><!-- doxytag: member="rbf::thin_plate_spline::d2" ref="e58fdc6d240f0146ef418507af2bc29d" args="(double r) const " --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">double rbf::thin_plate_spline::d2 </td> <td>(</td> <td class="paramtype">double </td> <td class="paramname"> <em>r</em> </td> <td> ) </td> <td> const<code> [private, virtual]</code></td> </tr> </table> </div> <div class="memdoc"> <p> The scalar second derivative defining each RBF. <p> <p>Implements <a class="el" href="classrbf_1_1radial__basis__function.html#97c9b2a2a93d7133d57cbecf7c3996ac">rbf::radial_basis_function</a>.</p> <div class="fragment"><pre class="fragment"><a name="l00335"></a>00335 { <a name="l00336"></a>00336 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 0){ <a name="l00337"></a>00337 badArgument exc; <a name="l00338"></a>00338 exc.reason = <a name="l00339"></a>00339 <span class="stringliteral">"Parameter n not set for thin_plate_spline. \n"</span> <a name="l00340"></a>00340 <span class="stringliteral">"Use thin_plate_spline::set_n before evaluating."</span>; <a name="l00341"></a>00341 exc.line = __LINE__; <a name="l00342"></a>00342 exc.file = __FILE__; <a name="l00343"></a>00343 <span class="keywordflow">throw</span> exc; <a name="l00344"></a>00344 } <a name="l00345"></a>00345 <span class="keywordflow">if</span> (<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 2 and r == 0){ <a name="l00346"></a>00346 badDomain exc; <a name="l00347"></a>00347 exc.reason = <a name="l00348"></a>00348 <span class="stringliteral">"For n = 2, thin-plate splines do no have a derivative at zero."</span>; <a name="l00349"></a>00349 exc.line = __LINE__; <a name="l00350"></a>00350 exc.file = __FILE__; <a name="l00351"></a>00351 <span class="keywordflow">throw</span> exc; <a name="l00352"></a>00352 } <a name="l00353"></a>00353 <span class="keywordflow">if</span>(r == 0) <a name="l00354"></a>00354 <span class="keywordflow">return</span> 0; <a name="l00355"></a>00355 <a name="l00356"></a>00356 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 2) <a name="l00357"></a>00357 <span class="keywordflow">return</span> 2*log(r) + 3; <a name="l00358"></a>00358 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 4) <a name="l00359"></a>00359 <span class="keywordflow">return</span> gsl_pow_2(r)*(12*log(r) + 7); <a name="l00360"></a>00360 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 6) <a name="l00361"></a>00361 <span class="keywordflow">return</span> gsl_pow_4(r)*(30*log(r) + 11); <a name="l00362"></a>00362 <span class="keywordflow">if</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> == 8) <a name="l00363"></a>00363 <span class="keywordflow">return</span> gsl_pow_6(r)*(56*log(r) + 15); <a name="l00364"></a>00364 <a name="l00365"></a>00365 <span class="keywordflow">return</span> pow(r,<span class="keywordtype">double</span>(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a>-2))*(double(<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a>*<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> - <a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a>)*log(r) + double(2*<a class="code" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8" title="Shape parameter.">n</a> - 1)); <a name="l00366"></a>00366 } </pre></div> <p> </div> </div><p> <hr><h2>Member Data Documentation</h2> <a class="anchor" name="758f6c4bbc04ff390006b47198429ca8"></a><!-- doxytag: member="rbf::thin_plate_spline::n" ref="758f6c4bbc04ff390006b47198429ca8" args="" --> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">size_t <a class="el" href="classrbf_1_1thin__plate__spline.html#758f6c4bbc04ff390006b47198429ca8">rbf::thin_plate_spline::n</a> = 0<code> [static, private]</code> </td> </tr> </table> </div> <div class="memdoc"> <p> Shape parameter. <p> </div> </div><p> <hr>The documentation for this class was generated from the following files:<ul> <li>include/<a class="el" href="rbf_8hpp-source.html">rbf.hpp</a><li><a class="el" href="rbf_8cpp.html">rbf.cpp</a></ul> </div> <hr size="1"><address style="text-align: right;"><small>Generated on Sat Jun 28 00:33:26 2008 by <a href="http://www.doxygen.org/index.html"> <img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.6 </small></address> </body> </html>