📄 ublasmatrix_8hpp-source.html
字号:
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> <<span class="keyword">class</span> E1, <span class="keyword">class</span> E2><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<E1>,trans(matrix_expression<E2>)</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<E2, ublas::scalar_identity<BOOST_UBLAS_TYPENAME E2::value_type> >::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<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>>::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<E1>),matrix_expression<E2>)</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<E1, ublas::scalar_identity<BOOST_UBLAS_TYPENAME E1::value_type> >::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<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>::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><<span class="keyword">class</span> E> <span class="keyword">inline</span>00503 <span class="keyword">typename</span> prod_expression_result<E,E>::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<E>& 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><<span class="keyword">class</span> E1, <span class="keyword">class</span> E2> <span class="keyword">inline</span>00514 <span class="keyword">typename</span> prod_expression_result<E1,E2>::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<E1>& X, <span class="keyword">const</span> SymMatrix& S, ublas::matrix_expression<E2>& 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& X, <span class="keyword">const</span> Vec& 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><<span class="keyword">class</span> E> <span class="keyword">inline</span>00538 <span class="keyword">typename</span> prod_expression_result<E,E>::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<E>& 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><<span class="keyword">class</span> E1, <span class="keyword">class</span> E2> <span class="keyword">inline</span>00548 <span class="keyword">typename</span> prod_expression_result<E2,E1>::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<E1>& X, <span class="keyword">const</span> SymMatrix& S, ublas::matrix_expression<E2>& 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& X, <span class="keyword">const</span> Vec& 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& x, <span class="keyword">const</span> Vec& 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& x, <span class="keyword">const</span> SymMatrix& 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 + -