⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ublasmatrix_8hpp-source.html

📁 Bayes滤波器算法C++类说明文档,源码见Bayes滤波器算法
💻 HTML
📖 第 1 页 / 共 4 页
字号:
00453 <span class="comment"> */</span>00454 {00455     Vec::const_iterator si, send = s.end();00456     <span class="keyword">typename</span> MatrixX::const_iterator2 Xa = X.begin2();00457     <span class="keyword">const</span> <span class="keyword">typename</span> MatrixX::const_iterator2 Xend = X.end2();00458     <span class="keyword">typename</span> MatrixX::const_iterator2 Xb;00459 00460     <span class="comment">// P(a,b) = X.col(a) * X.col(b)</span>00461     <span class="keywordflow">for</span> (; Xa != Xend; ++Xa)                <span class="comment">// Iterate vectors</span>00462     {00463         <span class="keyword">typename</span> MatrixX::const_Column Xav = MatrixX::columni(Xa);00464         Xb = Xa;                            <span class="comment">// Start at the row Xa only one triangle of symertric result required</span>00465         <span class="keywordflow">for</span> (; Xb != Xend; ++Xb)00466         {                                   <span class="comment">// Tripple vector inner product</span>00467             SymMatrix::value_type p = 0;00468             <span class="keyword">typename</span> MatrixX::const_Column Xbv = MatrixX::columni(Xb);00469             <span class="keywordflow">for</span> (si = s.begin(); si != send; ++si) {00470                 Vec::size_type i = si.index();00471                 p += Xav[i] * (*si) * Xbv[i];00472             }00473             P(Xa.index2(),Xb.index2()) += p;00474         }00475     }00476 }00477 00478 }<span class="comment">//namespace detail</span>00479 00480 00481 <span class="comment">/*</span>00482 <span class="comment"> * prod_SPD - uBLAS Expression templates for X*X' and X*X'</span>00483 <span class="comment"> * Functions are only defined for the type for which the operation is efficient</span>00484 <span class="comment"> * ISSUE Although numerically symmetric, uBlas has no expression type to represent this property</span>00485 <span class="comment"> *  The result must be assigned to a symmetric container to exploit the symmetry</span>00486 <span class="comment"> */</span>00487 00488 <span class="keyword">template</span> &lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt;<a name="l00489"></a><a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html">00489</a> <span class="keyword">struct </span><a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html">prod_expression_result</a>00490 {   <span class="comment">// Provide ET result E1E2T_type of prod(matrix_expression&lt;E1&gt;,trans(matrix_expression&lt;E2&gt;)</span><a name="l00491"></a><a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w0">00491</a>     <span class="keyword">typedef</span> BOOST_UBLAS_TYPENAME ublas::matrix_unary2_traits&lt;E2, ublas::scalar_identity&lt;BOOST_UBLAS_TYPENAME E2::value_type&gt; &gt;::result_type  <a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w0">E2T_type</a>;00492     <span class="keyword">typedef</span> BOOST_UBLAS_TYPENAME ublas::matrix_matrix_binary_traits&lt;BOOST_UBLAS_TYPENAME E1::value_type, E1,<a name="l00493"></a><a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w1">00493</a>                                         BOOST_UBLAS_TYPENAME E2T_type::value_type, <a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w0">E2T_type</a>&gt;::result_type  <a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w1">E1E2T_type</a>;00494 00495     <span class="comment">// Provide ET result E1TE2_type of prod(trans(matrix_expression&lt;E1&gt;),matrix_expression&lt;E2&gt;)</span><a name="l00496"></a><a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w2">00496</a>     <span class="keyword">typedef</span> BOOST_UBLAS_TYPENAME ublas::matrix_unary2_traits&lt;E1, ublas::scalar_identity&lt;BOOST_UBLAS_TYPENAME E1::value_type&gt; &gt;::result_type  <a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w2">E1T_type</a>;00497     <span class="keyword">typedef</span> BOOST_UBLAS_TYPENAME ublas::matrix_matrix_binary_traits&lt;BOOST_UBLAS_TYPENAME E1T_type::value_type, <a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w2">E1T_type</a>,<a name="l00498"></a><a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w3">00498</a>                                         BOOST_UBLAS_TYPENAME E2::value_type, E2&gt;::result_type  <a class="code" href="structBayesian__filter__matrix_1_1prod__expression__result.html#w3">E1TE2_type</a>;00499 };00500 00501  00502 <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt; <span class="keyword">inline</span>00503 <span class="keyword">typename</span> prod_expression_result&lt;E,E&gt;::E1E2T_type<a name="l00504"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a58">00504</a>  <a class="code" href="namespaceBayesian__filter__matrix.html#a58">prod_SPD</a> (<span class="keyword">const</span> ublas::matrix_expression&lt;E&gt;&amp; X)00505 <span class="comment">/*</span>00506 <span class="comment"> * Symmetric Positive (Semi) Definate product: X*X'</span>00507 <span class="comment"> */</span>00508 {00509     <span class="keyword">typedef</span> <span class="keyword">typename</span> E::value_type t1;00510     <span class="keywordflow">return</span> prod( X, trans(X) );00511 }00512 00513 <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt; <span class="keyword">inline</span>00514 <span class="keyword">typename</span> prod_expression_result&lt;E1,E2&gt;::E1E2T_type<a name="l00515"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a59">00515</a>  <a class="code" href="namespaceBayesian__filter__matrix.html#a58">prod_SPD</a> (<span class="keyword">const</span> ublas::matrix_expression&lt;E1&gt;&amp; X, <span class="keyword">const</span> SymMatrix&amp; S, ublas::matrix_expression&lt;E2&gt;&amp; XStemp)00516 <span class="comment">/*</span>00517 <span class="comment"> * Symmetric Positive (Semi) Definate product: X*(X*S)', XStemp = X*S</span>00518 <span class="comment"> */</span>00519 {00520     <span class="keywordflow">return</span> prod( X, trans(prod(X,S,XStemp())) );00521 }00522 00523 <span class="keyword">inline</span><a name="l00524"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a60">00524</a> <a class="code" href="namespaceBayesian__filter__matrix.html#a5">SymMatrix</a> <a class="code" href="namespaceBayesian__filter__matrix.html#a58">prod_SPD</a> (<span class="keyword">const</span> RowMatrix&amp; X, <span class="keyword">const</span> Vec&amp; s)00525 <span class="comment">/*</span>00526 <span class="comment"> * Symmetric Positive (Semi) Definate product: X*diag_matrix(s)*X'</span>00527 <span class="comment"> * TODO: Define using ublas ET</span>00528 <span class="comment"> */</span>00529 {00530     <a class="code" href="namespaceBayesian__filter__matrix.html#a5">SymMatrix</a> P(X.size1(),X.size1());00531     P.clear();00532     detail::mult_SPD(X,s, P);00533     <span class="keywordflow">return</span> P;00534 }00535 00536 00537 <span class="keyword">template</span>&lt;<span class="keyword">class</span> E&gt; <span class="keyword">inline</span>00538 <span class="keyword">typename</span> prod_expression_result&lt;E,E&gt;::E1TE2_type<a name="l00539"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a61">00539</a>  <a class="code" href="namespaceBayesian__filter__matrix.html#a61">prod_SPDT</a> (<span class="keyword">const</span> ublas::matrix_expression&lt;E&gt;&amp; X)00540 <span class="comment">/*</span>00541 <span class="comment"> * Symmetric Positive (Semi) Definate product: X'*X</span>00542 <span class="comment"> */</span>00543 {00544     <span class="keywordflow">return</span> prod( trans(X), X );00545 }00546 00547 <span class="keyword">template</span>&lt;<span class="keyword">class</span> E1, <span class="keyword">class</span> E2&gt; <span class="keyword">inline</span>00548 <span class="keyword">typename</span> prod_expression_result&lt;E2,E1&gt;::E1TE2_type<a name="l00549"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a62">00549</a>  <a class="code" href="namespaceBayesian__filter__matrix.html#a61">prod_SPDT</a> (<span class="keyword">const</span> ublas::matrix_expression&lt;E1&gt;&amp; X, <span class="keyword">const</span> SymMatrix&amp; S, ublas::matrix_expression&lt;E2&gt;&amp; SXtemp)00550 <span class="comment">/*</span>00551 <span class="comment"> * Symmetric Positive (Semi) Definate product: (S*X)'*X, SXtemp = S*X</span>00552 <span class="comment"> */</span>00553 {00554     <span class="keywordflow">return</span> prod( trans(prod(S,X,SXtemp())), X);00555 }00556 00557 <span class="keyword">inline</span><a name="l00558"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a63">00558</a> <a class="code" href="namespaceBayesian__filter__matrix.html#a5">SymMatrix</a> <a class="code" href="namespaceBayesian__filter__matrix.html#a61">prod_SPDT</a> (<span class="keyword">const</span> ColMatrix&amp; X, <span class="keyword">const</span> Vec&amp; s)00559 <span class="comment">/*</span>00560 <span class="comment"> * Symmetric Positive (Semi) Definate product: X'*diag_matrix(s)*X</span>00561 <span class="comment"> * TODO: Define using ublas ET</span>00562 <span class="comment"> */</span>00563 {00564     <a class="code" href="namespaceBayesian__filter__matrix.html#a5">SymMatrix</a> P(X.size2(),X.size2());00565     P.clear();00566     detail::mult_SPDT(X,s, P);00567     <span class="keywordflow">return</span> P;00568 }00569 <a name="l00570"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a64">00570</a> <span class="keyword">inline</span> Vec::value_type <a class="code" href="namespaceBayesian__filter__matrix.html#a61">prod_SPDT</a> (<span class="keyword">const</span> Vec&amp; x, <span class="keyword">const</span> Vec&amp; s)00571 <span class="comment">/*</span>00572 <span class="comment"> * Symmetric Positive (Semi) Definate product: x'*diag_matrix(s)*x</span>00573 <span class="comment"> */</span>00574 {00575     <span class="keyword">const</span> Vec::const_iterator xi_end = x.end();00576     Vec::const_iterator si = s.begin();00577     Vec::const_iterator xi=x.begin();00578     Vec::value_type p = Vec::value_type(0);00579     <span class="keywordflow">while</span> (xi != xi_end)00580     {00581         p += (*xi) * (*si) * (*xi);00582         ++xi; ++ si;00583     }00584     00585     <span class="keywordflow">return</span> p;00586 }00587 <a name="l00588"></a><a class="code" href="namespaceBayesian__filter__matrix.html#a65">00588</a> <span class="keyword">inline</span> Vec::value_type <a class="code" href="namespaceBayesian__filter__matrix.html#a61">prod_SPDT</a> (<span class="keyword">const</span> Vec&amp; x, <span class="keyword">const</span> SymMatrix&amp; S)00589 <span class="comment">/*</span>00590 <span class="comment"> * Symmetric Positive (Semi) Definate multiply: p = x'*S*x</span>00591 <span class="comment"> */</span>00592 {00593     <span class="keywordflow">return</span> inner_prod (x, prod(S,x) );00594 }00595 00596 }<span class="comment">//namespace</span></pre></div><hr size="1"><address style="align: right;"><small>Generated on Mon Feb 16 11:20:41 2004 for Bayes++ Bayesian Filtering Classes by<a href="http://www.doxygen.org/index.html"><img src="doxygen.png" alt="doxygen" align="middle" border=0 > </a>1.3.2 </small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -