diff options
Diffstat (limited to 'doc/html/methods_8h_source.html')
-rw-r--r-- | doc/html/methods_8h_source.html | 272 |
1 files changed, 0 insertions, 272 deletions
diff --git a/doc/html/methods_8h_source.html b/doc/html/methods_8h_source.html deleted file mode 100644 index 91a0d23..0000000 --- a/doc/html/methods_8h_source.html +++ /dev/null @@ -1,272 +0,0 @@ -<!-- HTML header for doxygen 1.8.3.1--> -<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> -<html xmlns="http://www.w3.org/1999/xhtml"> -<head> -<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> -<meta http-equiv="X-UA-Compatible" content="IE=9"/> -<meta name="generator" content="Doxygen 1.8.6"/> -<title>Templates -- Meow: meowpp/math/methods.h Source File</title> -<link href="tabs.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="jquery.js"></script> -<script type="text/javascript" src="dynsections.js"></script> -<link href="navtree.css" rel="stylesheet" type="text/css"/> -<script type="text/javascript" src="resize.js"></script> -<script type="text/javascript" src="navtree.js"></script> -<script type="text/javascript"> - $(document).ready(initResizable); - $(window).load(resizeHeight); -</script> -<link href="stylesheet.css" rel="stylesheet" type="text/css" /> -<link href="custom.css" rel="stylesheet" type="text/css"/> -</head> -<body> -<div id="top"><!-- do not remove this div, it is closed by doxygen! --> -<div id="titlearea"> -<table cellspacing="0" cellpadding="0"> - <tbody> - <tr style="height: 56px;"> - <td id="projectlogo"><img alt="Logo" src="logo.png"/></td> - <td style="padding-left: 0.5em;"> - <div id="projectname">Templates -- Meow -  <span id="projectnumber">1.2.11</span> - </div> - <div id="projectbrief">A C++ template contains kinds of interesting classes and functions</div> - </td> - </tr> - </tbody> -</table> -</div> -<!-- end header part --> -<!-- Generated by Doxygen 1.8.6 --> -</div><!-- top --> -<div id="side-nav" class="ui-resizable side-nav-resizable"> - <div id="nav-tree"> - <div id="nav-tree-contents"> - <div id="nav-sync" class="sync"></div> - </div> - </div> - <div id="splitbar" style="-moz-user-select:none;" - class="ui-resizable-handle"> - </div> -</div> -<script type="text/javascript"> -$(document).ready(function(){initNavTree('methods_8h_source.html','');}); -</script> -<div id="doc-content"> -<div class="header"> - <div class="headertitle"> -<div class="title">methods.h</div> </div> -</div><!--header--> -<div class="contents"> -<a href="methods_8h.html">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno"> 1</span> <span class="preprocessor">#ifndef math_methods_H__</span></div> -<div class="line"><a name="l00002"></a><span class="lineno"> 2</span> <span class="preprocessor"></span><span class="preprocessor">#define math_methods_H__</span></div> -<div class="line"><a name="l00003"></a><span class="lineno"> 3</span> <span class="preprocessor"></span></div> -<div class="line"><a name="l00004"></a><span class="lineno"> 4</span> <span class="preprocessor">#include "<a class="code" href="Matrix_8h.html">Matrix.h</a>"</span></div> -<div class="line"><a name="l00005"></a><span class="lineno"> 5</span> <span class="preprocessor">#include "<a class="code" href="Vector_8h.html">Vector.h</a>"</span></div> -<div class="line"><a name="l00006"></a><span class="lineno"> 6</span> <span class="preprocessor">#include "<a class="code" href="math_2utility_8h.html">utility.h</a>"</span></div> -<div class="line"><a name="l00007"></a><span class="lineno"> 7</span> </div> -<div class="line"><a name="l00008"></a><span class="lineno"> 8</span> <span class="preprocessor">#include <cstdlib></span></div> -<div class="line"><a name="l00009"></a><span class="lineno"> 9</span> <span class="preprocessor">#include <vector></span></div> -<div class="line"><a name="l00010"></a><span class="lineno"> 10</span> </div> -<div class="line"><a name="l00011"></a><span class="lineno"> 11</span> <span class="keyword">namespace </span>meow {</div> -<div class="line"><a name="l00012"></a><span class="lineno"> 12</span> </div> -<div class="line"><a name="l00057"></a><span class="lineno"> 57</span> <span class="keyword">template</span><<span class="keyword">class</span> Data, <span class="keyword">class</span> WeightingClass></div> -<div class="line"><a name="l00058"></a><span class="lineno"><a class="line" href="namespacemeow.html#a43a73b75f2e23c8172d2098d57eaf75a"> 58</a></span> <span class="keyword">inline</span> std::vector<Data> <a class="code" href="namespacemeow.html#a43a73b75f2e23c8172d2098d57eaf75a">ransac</a>(std::vector<Data> <span class="keyword">const</span>& data,</div> -<div class="line"><a name="l00059"></a><span class="lineno"> 59</span>  WeightingClass <span class="keyword">const</span>& w,</div> -<div class="line"><a name="l00060"></a><span class="lineno"> 60</span>  <span class="keywordtype">size_t</span> N,</div> -<div class="line"><a name="l00061"></a><span class="lineno"> 61</span>  <span class="keywordtype">double</span> p0, <span class="keywordtype">double</span> P) {</div> -<div class="line"><a name="l00062"></a><span class="lineno"> 62</span>  <span class="keywordflow">if</span> (data.size() < N) {</div> -<div class="line"><a name="l00063"></a><span class="lineno"> 63</span>  <span class="keywordflow">return</span> std::vector<Data>();</div> -<div class="line"><a name="l00064"></a><span class="lineno"> 64</span>  }</div> -<div class="line"><a name="l00065"></a><span class="lineno"> 65</span>  <span class="keywordtype">double</span> ww = -1.0;</div> -<div class="line"><a name="l00066"></a><span class="lineno"> 66</span>  std::vector<Data> ret;</div> -<div class="line"><a name="l00067"></a><span class="lineno"> 67</span>  <span class="keywordflow">for</span> (<span class="keywordtype">double</span> count = ceil(log(1.0 - P) / log(1.0 - pow(p0, N)));</div> -<div class="line"><a name="l00068"></a><span class="lineno"> 68</span>  count > 0.0; count -= 1.0) {</div> -<div class="line"><a name="l00069"></a><span class="lineno"> 69</span>  std::vector<Data> sample;</div> -<div class="line"><a name="l00070"></a><span class="lineno"> 70</span>  std::vector<int> index(N);</div> -<div class="line"><a name="l00071"></a><span class="lineno"> 71</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> i = 0; i < N; i++) {</div> -<div class="line"><a name="l00072"></a><span class="lineno"> 72</span>  <span class="keywordflow">for</span> (<span class="keywordtype">bool</span> ok = <span class="keyword">false</span>; !ok; ) {</div> -<div class="line"><a name="l00073"></a><span class="lineno"> 73</span>  index[i] = rand() % data.size();</div> -<div class="line"><a name="l00074"></a><span class="lineno"> 74</span>  ok = <span class="keyword">true</span>;</div> -<div class="line"><a name="l00075"></a><span class="lineno"> 75</span>  <span class="keywordflow">for</span> (<span class="keywordtype">size_t</span> j = 0; ok && j < i; j++)</div> -<div class="line"><a name="l00076"></a><span class="lineno"> 76</span>  <span class="keywordflow">if</span> (index[i] == index[j])</div> -<div class="line"><a name="l00077"></a><span class="lineno"> 77</span>  ok = <span class="keyword">false</span>;</div> -<div class="line"><a name="l00078"></a><span class="lineno"> 78</span>  }</div> -<div class="line"><a name="l00079"></a><span class="lineno"> 79</span>  sample.push_back(data[index[i]]);</div> -<div class="line"><a name="l00080"></a><span class="lineno"> 80</span>  }</div> -<div class="line"><a name="l00081"></a><span class="lineno"> 81</span>  <span class="keywordtype">double</span> w_now = w(sample, data);</div> -<div class="line"><a name="l00082"></a><span class="lineno"> 82</span>  <span class="keywordflow">if</span> (w_now < 0) {</div> -<div class="line"><a name="l00083"></a><span class="lineno"> 83</span>  count += 0.5;</div> -<div class="line"><a name="l00084"></a><span class="lineno"> 84</span>  <span class="keywordflow">continue</span>;</div> -<div class="line"><a name="l00085"></a><span class="lineno"> 85</span>  }</div> -<div class="line"><a name="l00086"></a><span class="lineno"> 86</span>  <span class="keywordflow">if</span> (ww < w_now) {</div> -<div class="line"><a name="l00087"></a><span class="lineno"> 87</span>  ret = sample;</div> -<div class="line"><a name="l00088"></a><span class="lineno"> 88</span>  ww = w_now;</div> -<div class="line"><a name="l00089"></a><span class="lineno"> 89</span>  }</div> -<div class="line"><a name="l00090"></a><span class="lineno"> 90</span>  }</div> -<div class="line"><a name="l00091"></a><span class="lineno"> 91</span>  <span class="keywordflow">return</span> ret;</div> -<div class="line"><a name="l00092"></a><span class="lineno"> 92</span> }</div> -<div class="line"><a name="l00093"></a><span class="lineno"> 93</span> </div> -<div class="line"><a name="l00094"></a><span class="lineno"> 94</span> </div> -<div class="line"><a name="l00095"></a><span class="lineno"> 95</span> <span class="comment">/*</span></div> -<div class="line"><a name="l00096"></a><span class="lineno"> 96</span> <span class="comment"> * @brief Run the \b Levenberg-Marquardt method to solve a non-linear</span></div> -<div class="line"><a name="l00097"></a><span class="lineno"> 97</span> <span class="comment"> * least squares problem.</span></div> -<div class="line"><a name="l00098"></a><span class="lineno"> 98</span> <span class="comment"> *</span></div> -<div class="line"><a name="l00099"></a><span class="lineno"> 99</span> <span class="comment"> * Assume:</span></div> -<div class="line"><a name="l00100"></a><span class="lineno"> 100</span> <span class="comment"> * - The function we want to optimize is</span></div> -<div class="line"><a name="l00101"></a><span class="lineno"> 101</span> <span class="comment"> * \f$ F: \mathbb{R} ^N \mapsto \mathbb{R}^M \f$</span></div> -<div class="line"><a name="l00102"></a><span class="lineno"> 102</span> <span class="comment"> * - We want to find the best solution \f$ v \f$ such that</span></div> -<div class="line"><a name="l00103"></a><span class="lineno"> 103</span> <span class="comment"> * \f$ F(v)^T F(v) = 0\f$. But there is a gived threshold</span></div> -<div class="line"><a name="l00104"></a><span class="lineno"> 104</span> <span class="comment"> * \f$ \epsilon \f$, we can just find a \f$ v \f$ such that</span></div> -<div class="line"><a name="l00105"></a><span class="lineno"> 105</span> <span class="comment"> * \f$ F(v)^T F(v) < \epsilon \f$, which is mush easier.</span></div> -<div class="line"><a name="l00106"></a><span class="lineno"> 106</span> <span class="comment"> * - User gived a initiial vector \f$ v_0 \f$</span></div> -<div class="line"><a name="l00107"></a><span class="lineno"> 107</span> <span class="comment"> * .</span></div> -<div class="line"><a name="l00108"></a><span class="lineno"> 108</span> <span class="comment"> * Then we just iteratilly find \f$ v_1, v_2, v_3, v_4... \f$ until a</span></div> -<div class="line"><a name="l00109"></a><span class="lineno"> 109</span> <span class="comment"> * vector \f$ v_k \f$ satisified that \f$ F(v_k)^TF(v_k)<\epsilon \f$ .</span></div> -<div class="line"><a name="l00110"></a><span class="lineno"> 110</span> <span class="comment"> * And each iterator we have:</span></div> -<div class="line"><a name="l00111"></a><span class="lineno"> 111</span> <span class="comment"> * \f[</span></div> -<div class="line"><a name="l00112"></a><span class="lineno"> 112</span> <span class="comment"> * v_{i+1} = v_i + (J(v_i)^TJ(v_i)+\lambda I_{N\times N})^{-1} J(v_i)^T F(v_i)</span></div> -<div class="line"><a name="l00113"></a><span class="lineno"> 113</span> <span class="comment"> * \f]</span></div> -<div class="line"><a name="l00114"></a><span class="lineno"> 114</span> <span class="comment"> * Where \f$ J(v) \f$ is a jacobian matrix defined below:</span></div> -<div class="line"><a name="l00115"></a><span class="lineno"> 115</span> <span class="comment"> * \f[</span></div> -<div class="line"><a name="l00116"></a><span class="lineno"> 116</span> <span class="comment"> * J(v) = \frac{d}{dv}F(v) =</span></div> -<div class="line"><a name="l00117"></a><span class="lineno"> 117</span> <span class="comment"> * \left[ \begin{array}{ccccc}</span></div> -<div class="line"><a name="l00118"></a><span class="lineno"> 118</span> <span class="comment"> * \frac{\partial F_1(v)}{\partial v_1} &</span></div> -<div class="line"><a name="l00119"></a><span class="lineno"> 119</span> <span class="comment"> * \frac{\partial F_1(v)}{\partial v_2} &</span></div> -<div class="line"><a name="l00120"></a><span class="lineno"> 120</span> <span class="comment"> * \frac{\partial F_1(v)}{\partial v_3} &</span></div> -<div class="line"><a name="l00121"></a><span class="lineno"> 121</span> <span class="comment"> * ... &</span></div> -<div class="line"><a name="l00122"></a><span class="lineno"> 122</span> <span class="comment"> * \frac{\partial F_1(v)}{\partial v_N} \\</span></div> -<div class="line"><a name="l00123"></a><span class="lineno"> 123</span> <span class="comment"> * \frac{\partial F_2(v)}{\partial v_1} &</span></div> -<div class="line"><a name="l00124"></a><span class="lineno"> 124</span> <span class="comment"> * \frac{\partial F_2(v)}{\partial v_2} &</span></div> -<div class="line"><a name="l00125"></a><span class="lineno"> 125</span> <span class="comment"> * \frac{\partial F_2(v)}{\partial v_3} &</span></div> -<div class="line"><a name="l00126"></a><span class="lineno"> 126</span> <span class="comment"> * ... &</span></div> -<div class="line"><a name="l00127"></a><span class="lineno"> 127</span> <span class="comment"> * \frac{\partial F_2(v)}{\partial v_N} \\</span></div> -<div class="line"><a name="l00128"></a><span class="lineno"> 128</span> <span class="comment"> * \frac{\partial F_3(v)}{\partial v_1} &</span></div> -<div class="line"><a name="l00129"></a><span class="lineno"> 129</span> <span class="comment"> * \frac{\partial F_3(v)}{\partial v_2} &</span></div> -<div class="line"><a name="l00130"></a><span class="lineno"> 130</span> <span class="comment"> * \frac{\partial F_3(v)}{\partial v_3} &</span></div> -<div class="line"><a name="l00131"></a><span class="lineno"> 131</span> <span class="comment"> * ... &</span></div> -<div class="line"><a name="l00132"></a><span class="lineno"> 132</span> <span class="comment"> * \frac{\partial F_3(v)}{\partial v_N} \\</span></div> -<div class="line"><a name="l00133"></a><span class="lineno"> 133</span> <span class="comment"> * . & . & . & & . \\</span></div> -<div class="line"><a name="l00134"></a><span class="lineno"> 134</span> <span class="comment"> * . & . & . & & . \\</span></div> -<div class="line"><a name="l00135"></a><span class="lineno"> 135</span> <span class="comment"> * . & . & . & & . \\</span></div> -<div class="line"><a name="l00136"></a><span class="lineno"> 136</span> <span class="comment"> * \frac{\partial F_M(v)}{\partial v_1} &</span></div> -<div class="line"><a name="l00137"></a><span class="lineno"> 137</span> <span class="comment"> * \frac{\partial F_M(v)}{\partial v_2} &</span></div> -<div class="line"><a name="l00138"></a><span class="lineno"> 138</span> <span class="comment"> * \frac{\partial F_M(v)}{\partial v_3} &</span></div> -<div class="line"><a name="l00139"></a><span class="lineno"> 139</span> <span class="comment"> * ... &</span></div> -<div class="line"><a name="l00140"></a><span class="lineno"> 140</span> <span class="comment"> * \frac{\partial F_M(v)}{\partial v_N} \\</span></div> -<div class="line"><a name="l00141"></a><span class="lineno"> 141</span> <span class="comment"> * \end{array} \right]</span></div> -<div class="line"><a name="l00142"></a><span class="lineno"> 142</span> <span class="comment"> * \f]</span></div> -<div class="line"><a name="l00143"></a><span class="lineno"> 143</span> <span class="comment"> * And \f$ \lambda \f$ is a magic number....</span></div> -<div class="line"><a name="l00144"></a><span class="lineno"> 144</span> <span class="comment"> * @param [in] func \f$ F \f$, a function(class with \c operator() )</span></div> -<div class="line"><a name="l00145"></a><span class="lineno"> 145</span> <span class="comment"> * which input a vector and the output the squares errors.</span></div> -<div class="line"><a name="l00146"></a><span class="lineno"> 146</span> <span class="comment"> * @param [in] jaco \f$ J \f$, a function which input a vector</span></div> -<div class="line"><a name="l00147"></a><span class="lineno"> 147</span> <span class="comment"> * and then output \b func derivate by the vector</span></div> -<div class="line"><a name="l00148"></a><span class="lineno"> 148</span> <span class="comment"> * @param [in] iden \f$ \lambda I_{N \times N} \f$, defined above</span></div> -<div class="line"><a name="l00149"></a><span class="lineno"> 149</span> <span class="comment"> * @param [in] init \f$ v_0 \f$Initial vector</span></div> -<div class="line"><a name="l00150"></a><span class="lineno"> 150</span> <span class="comment"> * @param [in] stop A function return a boolean which means the error is</span></div> -<div class="line"><a name="l00151"></a><span class="lineno"> 151</span> <span class="comment"> * acceptable or not, so \f[</span></div> -<div class="line"><a name="l00152"></a><span class="lineno"> 152</span> <span class="comment"> * S_{top}(v) = \begin{cases}</span></div> -<div class="line"><a name="l00153"></a><span class="lineno"> 153</span> <span class="comment"> * true & if~F(v)<\epsilon \\</span></div> -<div class="line"><a name="l00154"></a><span class="lineno"> 154</span> <span class="comment"> * false & else</span></div> -<div class="line"><a name="l00155"></a><span class="lineno"> 155</span> <span class="comment"> * \end{cases}</span></div> -<div class="line"><a name="l00156"></a><span class="lineno"> 156</span> <span class="comment"> * \f]</span></div> -<div class="line"><a name="l00157"></a><span class="lineno"> 157</span> <span class="comment"> * @param [in] counter To prevent infinit loop.</span></div> -<div class="line"><a name="l00158"></a><span class="lineno"> 158</span> <span class="comment"> * @return a vector which means the best solution this function found.</span></div> -<div class="line"><a name="l00159"></a><span class="lineno"> 159</span> <span class="comment"> *</span></div> -<div class="line"><a name="l00160"></a><span class="lineno"> 160</span> <span class="comment"> * @author cat_leopard</span></div> -<div class="line"><a name="l00161"></a><span class="lineno"> 161</span> <span class="comment"> */</span></div> -<div class="line"><a name="l00162"></a><span class="lineno"> 162</span> <span class="keyword">template</span><<span class="keyword">class</span> Scalar, <span class="keyword">class</span> Function></div> -<div class="line"><a name="l00163"></a><span class="lineno"><a class="line" href="namespacemeow.html#a37b8a0148b872c4533f37dde9bbb9ae4"> 163</a></span> <span class="keyword">inline</span> <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> <a class="code" href="namespacemeow.html#a37b8a0148b872c4533f37dde9bbb9ae4">levenbergMarquardt</a>(Function <span class="keyword">const</span>& f,</div> -<div class="line"><a name="l00164"></a><span class="lineno"> 164</span>  <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> <span class="keyword">const</span>& init,</div> -<div class="line"><a name="l00165"></a><span class="lineno"> 165</span>  <span class="keywordtype">int</span> counter = -1) {</div> -<div class="line"><a name="l00166"></a><span class="lineno"> 166</span>  <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> ans(init), residure_v;</div> -<div class="line"><a name="l00167"></a><span class="lineno"> 167</span>  <span class="keywordflow">for</span> ( ; counter != 0 && !f.accept(residure_v = f.residure(ans)); --counter) {</div> -<div class="line"><a name="l00168"></a><span class="lineno"> 168</span>  <a class="code" href="classmeow_1_1Matrix.html">Matrix<Scalar></a> m_j (f.jacobian(ans));</div> -<div class="line"><a name="l00169"></a><span class="lineno"> 169</span>  <a class="code" href="classmeow_1_1Matrix.html">Matrix<Scalar></a> m_jt(m_j.transpose());</div> -<div class="line"><a name="l00170"></a><span class="lineno"> 170</span>  <a class="code" href="classmeow_1_1Matrix.html">Matrix<Scalar></a> m(m_j * m_jt), M;</div> -<div class="line"><a name="l00171"></a><span class="lineno"> 171</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 1; M.<a class="code" href="classmeow_1_1Matrix.html#a030758e4938c4d56a0b665e6a51d1405">valid</a>() == <span class="keyword">false</span>; i++) {</div> -<div class="line"><a name="l00172"></a><span class="lineno"> 172</span>  M = (m + f.diagonal(ans, i)).inverse();</div> -<div class="line"><a name="l00173"></a><span class="lineno"> 173</span>  }</div> -<div class="line"><a name="l00174"></a><span class="lineno"> 174</span>  ans = ans - M * m_jt * residure_v;</div> -<div class="line"><a name="l00175"></a><span class="lineno"> 175</span>  }</div> -<div class="line"><a name="l00176"></a><span class="lineno"> 176</span>  <span class="keywordflow">return</span> ans;</div> -<div class="line"><a name="l00177"></a><span class="lineno"> 177</span> }</div> -<div class="line"><a name="l00178"></a><span class="lineno"> 178</span> </div> -<div class="line"><a name="l00179"></a><span class="lineno"> 179</span> <span class="comment">// residure</span></div> -<div class="line"><a name="l00180"></a><span class="lineno"> 180</span> <span class="comment">// jacobian</span></div> -<div class="line"><a name="l00181"></a><span class="lineno"> 181</span> <span class="comment">// identity</span></div> -<div class="line"><a name="l00182"></a><span class="lineno"> 182</span> <span class="keyword">template</span><<span class="keyword">class</span> Scalar, <span class="keyword">class</span> Function></div> -<div class="line"><a name="l00183"></a><span class="lineno"><a class="line" href="namespacemeow.html#adbd82702daf1e569c4a72176aa799c6d"> 183</a></span> <span class="keyword">inline</span> <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> <a class="code" href="namespacemeow.html#adbd82702daf1e569c4a72176aa799c6d">levenbergMarquardtTraining</a>(Function & f,</div> -<div class="line"><a name="l00184"></a><span class="lineno"> 184</span>  <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> <span class="keyword">const</span>& init,</div> -<div class="line"><a name="l00185"></a><span class="lineno"> 185</span>  Scalar <span class="keyword">const</span>& init_mu,</div> -<div class="line"><a name="l00186"></a><span class="lineno"> 186</span>  Scalar <span class="keyword">const</span>& mu_pow,</div> -<div class="line"><a name="l00187"></a><span class="lineno"> 187</span>  Scalar <span class="keyword">const</span>& er_max,</div> -<div class="line"><a name="l00188"></a><span class="lineno"> 188</span>  <span class="keywordtype">int</span> retry_number,</div> -<div class="line"><a name="l00189"></a><span class="lineno"> 189</span>  <span class="keywordtype">int</span> counter) {</div> -<div class="line"><a name="l00190"></a><span class="lineno"> 190</span>  <span class="keywordflow">if</span> (retry_number == 0) retry_number = 1;</div> -<div class="line"><a name="l00191"></a><span class="lineno"> 191</span>  <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> ans_now(init), rv_now(f.residure(ans_now));</div> -<div class="line"><a name="l00192"></a><span class="lineno"> 192</span>  <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> ans_nxt , rv_nxt;</div> -<div class="line"><a name="l00193"></a><span class="lineno"> 193</span>  Scalar er_now(rv_now.length2());</div> -<div class="line"><a name="l00194"></a><span class="lineno"> 194</span>  Scalar er_nxt;</div> -<div class="line"><a name="l00195"></a><span class="lineno"> 195</span>  <a class="code" href="classmeow_1_1Vector.html">Vector<Scalar></a> ans_best(ans_now);</div> -<div class="line"><a name="l00196"></a><span class="lineno"> 196</span>  Scalar er_best ( er_now);</div> -<div class="line"><a name="l00197"></a><span class="lineno"> 197</span>  <a class="code" href="classmeow_1_1Matrix.html">Matrix<Scalar></a> m_ja, m_jt, m, iden(f.identity());</div> -<div class="line"><a name="l00198"></a><span class="lineno"> 198</span>  Scalar mu(init_mu);</div> -<div class="line"><a name="l00199"></a><span class="lineno"> 199</span>  <span class="keywordflow">for</span> ( ; counter != 0 && er_now > er_max; --counter) {</div> -<div class="line"><a name="l00200"></a><span class="lineno"> 200</span>  m_ja = f.jacobian();</div> -<div class="line"><a name="l00201"></a><span class="lineno"> 201</span>  m_jt = m_ja.<a class="code" href="classmeow_1_1Matrix.html#a869be60b593d7ce7101ee7ac788b0dd0">transpose</a>();</div> -<div class="line"><a name="l00202"></a><span class="lineno"> 202</span>  m = m_jt * m_ja;</div> -<div class="line"><a name="l00203"></a><span class="lineno"> 203</span>  <span class="keywordtype">bool</span> good = <span class="keyword">false</span>;</div> -<div class="line"><a name="l00204"></a><span class="lineno"> 204</span>  <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i != retry_number; ++i, mu = mu * mu_pow) {</div> -<div class="line"><a name="l00205"></a><span class="lineno"> 205</span>  ans_nxt = ans_now + (m + iden * mu).inverse() * m_jt * rv_now.matrix();</div> -<div class="line"><a name="l00206"></a><span class="lineno"> 206</span>  rv_nxt = f.residure(ans_nxt);</div> -<div class="line"><a name="l00207"></a><span class="lineno"> 207</span>  er_nxt = rv_nxt.<a class="code" href="classmeow_1_1Vector.html#a71b56938e01de730490e722824f4b53e">length2</a>();</div> -<div class="line"><a name="l00208"></a><span class="lineno"> 208</span>  <span class="keywordflow">if</span> (er_nxt <= er_now) {</div> -<div class="line"><a name="l00209"></a><span class="lineno"> 209</span>  good = <span class="keyword">true</span>;</div> -<div class="line"><a name="l00210"></a><span class="lineno"> 210</span>  <span class="keywordflow">break</span>;</div> -<div class="line"><a name="l00211"></a><span class="lineno"> 211</span>  }</div> -<div class="line"><a name="l00212"></a><span class="lineno"> 212</span>  }</div> -<div class="line"><a name="l00213"></a><span class="lineno"> 213</span>  <span class="keywordflow">if</span> (good) {</div> -<div class="line"><a name="l00214"></a><span class="lineno"> 214</span>  mu = mu / mu_pow;</div> -<div class="line"><a name="l00215"></a><span class="lineno"> 215</span>  }</div> -<div class="line"><a name="l00216"></a><span class="lineno"> 216</span>  mu = <a class="code" href="namespacemeow.html#a98d838d338a3e6f3c57e94562fab3fa7">inRange</a>(0.0000001, 100.0, mu);</div> -<div class="line"><a name="l00217"></a><span class="lineno"> 217</span>  ans_now = ans_nxt;</div> -<div class="line"><a name="l00218"></a><span class="lineno"> 218</span>  rv_now = rv_nxt;</div> -<div class="line"><a name="l00219"></a><span class="lineno"> 219</span>  er_now = er_nxt;</div> -<div class="line"><a name="l00220"></a><span class="lineno"> 220</span>  <span class="keywordflow">if</span> (er_now < er_best) {</div> -<div class="line"><a name="l00221"></a><span class="lineno"> 221</span>  ans_best = ans_now;</div> -<div class="line"><a name="l00222"></a><span class="lineno"> 222</span>  er_best = er_now;</div> -<div class="line"><a name="l00223"></a><span class="lineno"> 223</span>  }</div> -<div class="line"><a name="l00224"></a><span class="lineno"> 224</span>  }</div> -<div class="line"><a name="l00225"></a><span class="lineno"> 225</span>  <span class="keywordflow">return</span> ans_best;</div> -<div class="line"><a name="l00226"></a><span class="lineno"> 226</span> }</div> -<div class="line"><a name="l00227"></a><span class="lineno"> 227</span> </div> -<div class="line"><a name="l00228"></a><span class="lineno"> 228</span> } <span class="comment">// meow</span></div> -<div class="line"><a name="l00229"></a><span class="lineno"> 229</span> </div> -<div class="line"><a name="l00230"></a><span class="lineno"> 230</span> <span class="preprocessor">#endif // math_methods_H__</span></div> -<div class="ttc" id="namespacemeow_html_adbd82702daf1e569c4a72176aa799c6d"><div class="ttname"><a href="namespacemeow.html#adbd82702daf1e569c4a72176aa799c6d">meow::levenbergMarquardtTraining</a></div><div class="ttdeci">Vector< Scalar > levenbergMarquardtTraining(Function &f, Vector< Scalar > const &init, Scalar const &init_mu, Scalar const &mu_pow, Scalar const &er_max, int retry_number, int counter)</div><div class="ttdef"><b>Definition:</b> <a href="methods_8h_source.html#l00183">methods.h:183</a></div></div> -<div class="ttc" id="classmeow_1_1Vector_html_a71b56938e01de730490e722824f4b53e"><div class="ttname"><a href="classmeow_1_1Vector.html#a71b56938e01de730490e722824f4b53e">meow::Vector::length2</a></div><div class="ttdeci">Scalar length2() const </div><div class="ttdoc">same as (*this).dot(*this) </div><div class="ttdef"><b>Definition:</b> <a href="Vector_8h_source.html#l00204">Vector.h:204</a></div></div> -<div class="ttc" id="namespacemeow_html_a37b8a0148b872c4533f37dde9bbb9ae4"><div class="ttname"><a href="namespacemeow.html#a37b8a0148b872c4533f37dde9bbb9ae4">meow::levenbergMarquardt</a></div><div class="ttdeci">Vector< Scalar > levenbergMarquardt(Function const &f, Vector< Scalar > const &init, int counter=-1)</div><div class="ttdef"><b>Definition:</b> <a href="methods_8h_source.html#l00163">methods.h:163</a></div></div> -<div class="ttc" id="classmeow_1_1Matrix_html_a030758e4938c4d56a0b665e6a51d1405"><div class="ttname"><a href="classmeow_1_1Matrix.html#a030758e4938c4d56a0b665e6a51d1405">meow::Matrix::valid</a></div><div class="ttdeci">bool valid() const </div><div class="ttdoc">Return whether it is a valid matrix. </div><div class="ttdef"><b>Definition:</b> <a href="Matrix_8h_source.html#l00124">Matrix.h:124</a></div></div> -<div class="ttc" id="math_2utility_8h_html"><div class="ttname"><a href="math_2utility_8h.html">utility.h</a></div></div> -<div class="ttc" id="classmeow_1_1Vector_html"><div class="ttname"><a href="classmeow_1_1Vector.html">meow::Vector</a></div><div class="ttdoc">vector </div><div class="ttdef"><b>Definition:</b> <a href="Vector_8h_source.html#l00019">Vector.h:19</a></div></div> -<div class="ttc" id="namespacemeow_html_a98d838d338a3e6f3c57e94562fab3fa7"><div class="ttname"><a href="namespacemeow.html#a98d838d338a3e6f3c57e94562fab3fa7">meow::inRange</a></div><div class="ttdeci">T inRange(T const &mn, T const &mx, T const &v)</div><div class="ttdoc">std::min(mx,std::max(mn,v)) </div><div class="ttdef"><b>Definition:</b> <a href="math_2utility_8h_source.html#l00061">utility.h:61</a></div></div> -<div class="ttc" id="namespacemeow_html_a43a73b75f2e23c8172d2098d57eaf75a"><div class="ttname"><a href="namespacemeow.html#a43a73b75f2e23c8172d2098d57eaf75a">meow::ransac</a></div><div class="ttdeci">std::vector< Data > ransac(std::vector< Data > const &data, WeightingClass const &w, size_t N, double p0, double P)</div><div class="ttdoc">Run the RANSAC method to approach the best solution. </div><div class="ttdef"><b>Definition:</b> <a href="methods_8h_source.html#l00058">methods.h:58</a></div></div> -<div class="ttc" id="classmeow_1_1Matrix_html_a869be60b593d7ce7101ee7ac788b0dd0"><div class="ttname"><a href="classmeow_1_1Matrix.html#a869be60b593d7ce7101ee7ac788b0dd0">meow::Matrix::transpose</a></div><div class="ttdeci">Matrix transpose() const </div><div class="ttdoc">return itself's transpose matrix </div><div class="ttdef"><b>Definition:</b> <a href="Matrix_8h_source.html#l00435">Matrix.h:435</a></div></div> -<div class="ttc" id="Matrix_8h_html"><div class="ttname"><a href="Matrix_8h.html">Matrix.h</a></div></div> -<div class="ttc" id="Vector_8h_html"><div class="ttname"><a href="Vector_8h.html">Vector.h</a></div></div> -<div class="ttc" id="classmeow_1_1Matrix_html"><div class="ttname"><a href="classmeow_1_1Matrix.html">meow::Matrix< Scalar ></a></div></div> -</div><!-- fragment --></div><!-- contents --> -</div><!-- doc-content --> -<!-- HTML footer for doxygen 1.8.3.1--> -<!-- start footer part --> -<div id="nav-path" class="navpath"><!-- id is needed for treeview function! --> - <ul> - <li class="navelem"><a class="el" href="dir_92fecd8d02dd5e7a67429447fdf0f60f.html">meowpp</a></li><li class="navelem"><a class="el" href="dir_77e0ab67466b1e7d76f50725a5ab9910.html">math</a></li><li class="navelem"><a class="el" href="methods_8h.html">methods.h</a></li> - <li class="footer">Generated on Mon Sep 8 2014 21:25:40 for Templates -- Meow by - <a href="http://www.doxygen.org/index.html"> - <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.6 </li> - </ul> -</div> -</body> -</html> |