iCub-main
Loading...
Searching...
No Matches
Math.h
Go to the documentation of this file.
1/*
2 * Copyright (C) 2011 RobotCub Consortium, European Commission FP6 Project IST-004370
3 * author: Arjan Gijsberts
4 * email: arjan.gijsberts@iit.it
5 * website: www.robotcub.org
6 * Permission is granted to copy, distribute, and/or modify this program
7 * under the terms of the GNU General Public License, version 2 or any
8 * later version published by the Free Software Foundation.
9 *
10 * A copy of the license can be found at
11 * http://www.robotcub.org/icub/license/gpl.txt
12 *
13 * This program is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
16 * Public License for more details
17 */
18
19#ifndef LM_MATH__
20#define LM_MATH__
21
22#include <gsl/gsl_linalg.h>
23
24#include <yarp/sig/Matrix.h>
25#include <yarp/sig/Vector.h>
26#include <yarp/math/RandScalar.h>
27#include <yarp/math/RandnScalar.h>
28
29
30namespace iCub {
31namespace learningmachine {
32namespace math {
33
43#ifndef DOXYGEN_SHOULD_SKIP_THIS
44/*
45 * Rank-1 update of a Cholesky factor
46 *
47 * Input:
48 * r: upper triangular cholesky factor (ldr x p, typically ldr == p)
49 * x: update vector
50 * z: set of nz column vectors to be updated (ldz x nz, typically ldz == p)
51 * y: nz dimensional vector
52 * rho: nz dimensional vector of norms of residuals
53 * Output:
54 * r: updated cholesky factor
55 * z: updated column vectors
56 * rho: updated residual norm
57 * c: cosines of performed givens rotations
58 * s: sines of performed givens rotations
59 *
60 *
61 * Note: Follows LINPACKs' dchud, but with the following differences
62 * - accepts transposed Cholesky factor R (non-transposed is faster)
63 * - uses CBLAS' drot and drotg for Given's rotations (as in Mattias Seeger's
64 * implementation)
65 * - accepts transposed Z (non-transposed is faster)
66 * - optional: enforces positive elements on the diagonal of R (as in Mattias
67 * Seeger's implementation, uncomment to enable)
68 *
69 * Please see the LINPACK User Guide for more detailed information on the
70 * update routine and a less terse description of the parameters.
71 */
72void dchud(double* r, int ldr, int p, double* x, double* z, int ldz, int nz,
73 double* y, double* rho, double* c, double* s,
74 unsigned char rtrans = 0, unsigned char ztrans = 0);
75
76/*
77 * GSL type wrapper function for C implementation of dchud.
78 */
79void gsl_linalg_cholesky_update(gsl_matrix* R, gsl_vector* x, gsl_vector* c, gsl_vector* s,
80 gsl_matrix* Z = NULL, gsl_vector* y = NULL, gsl_vector* rho = NULL,
81 unsigned char rtrans = 0, unsigned char ztrans = 0);
82#endif /* DOXYGEN_SHOULD_SKIP_THIS */
83
100void cholupdate(yarp::sig::Matrix& R, const yarp::sig::Vector& x, yarp::sig::Vector& c, yarp::sig::Vector& s,
101 yarp::sig::Matrix& Z, const yarp::sig::Vector& y, yarp::sig::Vector& rho, bool rtrans = 0, bool ztrans = 0);
102
112void cholupdate(yarp::sig::Matrix& R, const yarp::sig::Vector& x, bool rtrans = 0);
113
122void cholsolve(const yarp::sig::Matrix& R, const yarp::sig::Matrix& B, yarp::sig::Matrix& X);
123
132yarp::sig::Matrix cholsolve(const yarp::sig::Matrix& R, const yarp::sig::Matrix& B);
133
141void cholsolve(const yarp::sig::Matrix& R, const yarp::sig::Vector& b, yarp::sig::Vector& x);
142
150yarp::sig::Vector cholsolve(const yarp::sig::Matrix& R, const yarp::sig::Vector& b);
151
159yarp::sig::Matrix outerprod(const yarp::sig::Vector& v1, const yarp::sig::Vector& v2);
160
168yarp::sig::Vector& addvec(yarp::sig::Vector& v, double val);
169
178void trsolve(const yarp::sig::Matrix& A, const yarp::sig::Vector& b, yarp::sig::Vector& x, bool transa = false);
179
180
189yarp::sig::Vector trsolve(const yarp::sig::Matrix& A, const yarp::sig::Vector& b, bool transa = false);
190
197void fillrandom(yarp::sig::Vector& v, yarp::math::RandScalar& prng);
198
205void fillrandom(yarp::sig::Matrix& M, yarp::math::RandScalar& prng);
206
213void fillrandom(yarp::sig::Vector& v, yarp::math::RandnScalar& prng);
214
221void fillrandom(yarp::sig::Matrix& M, yarp::math::RandnScalar& prng);
222
230yarp::sig::Vector random(int length, yarp::math::RandScalar& prng);
231
240yarp::sig::Matrix random(int rows, int columns, yarp::math::RandScalar& prng);
241
249// why do RandScalar and RandnScalar not share a common base class?
250yarp::sig::Vector random(int length, yarp::math::RandnScalar& prng);
251
260yarp::sig::Matrix random(int rows, int columns, yarp::math::RandnScalar& prng);
261
269yarp::sig::Vector& map(yarp::sig::Vector& v, double (op)(double));
270
278yarp::sig::Matrix& map(yarp::sig::Matrix& M, double (op)(double));
279
287yarp::sig::Vector map(const yarp::sig::Vector& v, double (op)(double));
288
296yarp::sig::Matrix map(const yarp::sig::Matrix& M, double (op)(double));
297
305yarp::sig::Matrix& cosmat(yarp::sig::Matrix& M);
306
314yarp::sig::Matrix& sinmat(yarp::sig::Matrix& M);
315
323yarp::sig::Vector& cosvec(yarp::sig::Vector& v);
324
332yarp::sig::Vector& sinvec(yarp::sig::Vector& v);
333
341yarp::sig::Matrix cosmat(const yarp::sig::Matrix& M);
342
350yarp::sig::Matrix sinmat(const yarp::sig::Matrix& M);
351
359yarp::sig::Vector cosvec(const yarp::sig::Vector& v);
360
368yarp::sig::Vector sinvec(const yarp::sig::Vector& v);
369
370} // math
371} // learningmachine
372} // iCub
373
374#endif
void cholupdate(yarp::sig::Matrix &R, const yarp::sig::Vector &x, yarp::sig::Vector &c, yarp::sig::Vector &s, yarp::sig::Matrix &Z, const yarp::sig::Vector &y, yarp::sig::Vector &rho, bool rtrans=0, bool ztrans=0)
Perform a rank-1 update to a Cholesky factor, while updating additional vectors using the used Given'...
Definition Math.cpp:136
yarp::sig::Vector & cosvec(yarp::sig::Vector &v)
Computes the cosine of a vector element-wise inplace.
Definition Math.cpp:339
yarp::sig::Matrix outerprod(const yarp::sig::Vector &v1, const yarp::sig::Vector &v2)
Computes the outer product of two vectors.
Definition Math.cpp:213
void gsl_linalg_cholesky_update(gsl_matrix *R, gsl_vector *x, gsl_vector *c, gsl_vector *s, gsl_matrix *Z=NULL, gsl_vector *y=NULL, gsl_vector *rho=NULL, unsigned char rtrans=0, unsigned char ztrans=0)
Definition Math.cpp:99
void dchud(double *r, int ldr, int p, double *x, double *z, int ldz, int nz, double *y, double *rho, double *c, double *s, unsigned char rtrans=0, unsigned char ztrans=0)
Mathematical helper functions for use in the learningMachine library.
Definition Math.cpp:33
void fillrandom(yarp::sig::Vector &v, yarp::math::RandScalar &prng)
Fills an entire vector using the provided pseudo random number generator.
Definition Math.cpp:249
yarp::sig::Vector & map(yarp::sig::Vector &v, double(op)(double))
Performs a unary operator inplace on each element of a vector.
Definition Math.cpp:305
yarp::sig::Vector random(int length, yarp::math::RandScalar &prng)
Returns a random vector with given dimensionality.
Definition Math.cpp:281
void cholsolve(const yarp::sig::Matrix &R, const yarp::sig::Matrix &B, yarp::sig::Matrix &X)
Solves a system A*x=b for multiple row vectors in B using a precomputed Cholesky factor R.
Definition Math.cpp:167
yarp::sig::Vector & addvec(yarp::sig::Vector &v, double val)
Adds a scalar to a vector inplace.
Definition Math.cpp:223
yarp::sig::Matrix & cosmat(yarp::sig::Matrix &M)
Computes the cosine of a matrix element-wise inplace.
Definition Math.cpp:347
yarp::sig::Matrix & sinmat(yarp::sig::Matrix &M)
Computes the sine of a matrix element-wise inplace.
Definition Math.cpp:351
yarp::sig::Vector & sinvec(yarp::sig::Vector &v)
Computes the sine of a vector element-wise inplace.
Definition Math.cpp:343
void trsolve(const yarp::sig::Matrix &A, const yarp::sig::Vector &b, yarp::sig::Vector &x, bool transa=false)
Solves a triangular linear system Ax=b where A is triangular.
Definition Math.cpp:230
This file contains the definition of unique IDs for the body parts and the skin parts of the robot.
A
Definition sine.m:16