Screenshot instructions:
Windows
Mac
Red Hat Linux
Ubuntu
Click URL instructions:
Right-click on ad, choose "Copy Link", then paste here →
(This may not be possible with some types of ads)
You can subscribe to this list here.
2001 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(4) |
Dec
(6) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2002 |
Jan
(68) |
Feb
(72) |
Mar
(46) |
Apr
(44) |
May
(40) |
Jun
(54) |
Jul
(26) |
Aug
(86) |
Sep
(95) |
Oct
(151) |
Nov
(65) |
Dec
(34) |
2003 |
Jan
(22) |
Feb
(70) |
Mar
(24) |
Apr
(28) |
May
(50) |
Jun
(31) |
Jul
(17) |
Aug
(42) |
Sep
(27) |
Oct
(71) |
Nov
(27) |
Dec
(71) |
2004 |
Jan
(40) |
Feb
(30) |
Mar
(20) |
Apr
(22) |
May
(41) |
Jun
(9) |
Jul
(24) |
Aug
(41) |
Sep
(35) |
Oct
(8) |
Nov
(5) |
Dec
(4) |
2005 |
Jan
(27) |
Feb
(13) |
Mar
(18) |
Apr
(7) |
May
(10) |
Jun
(36) |
Jul
(28) |
Aug
(17) |
Sep
(1) |
Oct
(11) |
Nov
(12) |
Dec
(15) |
2006 |
Jan
(99) |
Feb
(5) |
Mar
(31) |
Apr
(26) |
May
(20) |
Jun
(33) |
Jul
(45) |
Aug
(18) |
Sep
(2) |
Oct
(19) |
Nov
(3) |
Dec
(8) |
2007 |
Jan
(1) |
Feb
(15) |
Mar
(20) |
Apr
|
May
(4) |
Jun
(6) |
Jul
(11) |
Aug
(11) |
Sep
(11) |
Oct
(19) |
Nov
(25) |
Dec
(46) |
2008 |
Jan
(42) |
Feb
(20) |
Mar
(43) |
Apr
(24) |
May
(4) |
Jun
|
Jul
(19) |
Aug
(63) |
Sep
(33) |
Oct
(17) |
Nov
(36) |
Dec
(20) |
2009 |
Jan
(36) |
Feb
(18) |
Mar
(144) |
Apr
(36) |
May
(11) |
Jun
(7) |
Jul
(8) |
Aug
(21) |
Sep
(33) |
Oct
(7) |
Nov
(2) |
Dec
(1) |
2010 |
Jan
(33) |
Feb
(3) |
Mar
(34) |
Apr
(2) |
May
(1) |
Jun
(2) |
Jul
(3) |
Aug
(28) |
Sep
(8) |
Oct
(12) |
Nov
(11) |
Dec
(44) |
2011 |
Jan
(30) |
Feb
(10) |
Mar
(8) |
Apr
(23) |
May
(8) |
Jun
(9) |
Jul
(3) |
Aug
(9) |
Sep
(5) |
Oct
(9) |
Nov
(11) |
Dec
(24) |
2012 |
Jan
(6) |
Feb
(32) |
Mar
(8) |
Apr
(26) |
May
(13) |
Jun
(51) |
Jul
(21) |
Aug
(7) |
Sep
(9) |
Oct
(13) |
Nov
(5) |
Dec
(10) |
2013 |
Jan
(56) |
Feb
(6) |
Mar
(15) |
Apr
(4) |
May
(24) |
Jun
(4) |
Jul
(9) |
Aug
|
Sep
|
Oct
(2) |
Nov
(1) |
Dec
(8) |
2014 |
Jan
(7) |
Feb
|
Mar
|
Apr
|
May
(12) |
Jun
(3) |
Jul
(7) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(19) |
2015 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
(1) |
Aug
|
Sep
|
Oct
|
Nov
(22) |
Dec
(25) |
2016 |
Jan
(9) |
Feb
(9) |
Mar
(13) |
Apr
|
May
|
Jun
(2) |
Jul
(4) |
Aug
|
Sep
|
Oct
(11) |
Nov
|
Dec
|
2017 |
Jan
|
Feb
|
Mar
|
Apr
(1) |
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
S | M | T | W | T | F | S |
---|---|---|---|---|---|---|
|
|
|
|
|
1
(4) |
2
|
3
|
4
(4) |
5
(1) |
6
|
7
(6) |
8
(3) |
9
|
10
|
11
(4) |
12
(3) |
13
|
14
(3) |
15
(10) |
16
|
17
|
18
(11) |
19
(11) |
20
(2) |
21
(1) |
22
|
23
|
24
|
25
(3) |
26
(5) |
27
(1) |
28
|
|
|
From: <noreply@so...> - 2002-02-27 11:03:50
|
Feature Requests item #523333, was opened at 2002-02-27 03:03 You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=381096&aid=523333&group_id=24293 Category: Interface Improvements (example) Group: None Status: Open Priority: 5 Submitted By: lapresté jean-thierry (lapreste) Assigned to: Nobody/Anonymous (nobody) Summary: some pbs wit vnl_svd Initial Comment: I have found no real bugs in svd, but I tried #define C_Matrix vnl_matrix < double > I have a non square X and I do vnl_svd < double > svd(X, 1.0E-8); C_Matrix v_sol = svd.solve(Y); And that doesn't worked fine v_sol being filled with inf I tried C_Matrix inv = svd.pinverse(); C_Matrix v_sol = inv*Y; and that worked fine So I have investigated the two files vnl_svd.h and vnl_svd.txx and propose some modifications that do not change the interface and a new function Now I can write : vnl_svd < double > svd(X); C_Matrix v_sol = svd.solve(Y, 1.0E-8); and it works. Perhaps I missed something, however I join my versions of the files and would like to know how to participate to further devlopments or corrections if I find any. sincerely J.T. Lapresté lapreste@... ------------------------------------------------------------------ ------------------------------------------------------------------ here vnl_svd.h ------------------------------------------------------------------ #ifndef vnl_svd_h_ #define vnl_svd_h_ #ifdef __GNUC__ #pragma interface #endif //: // \file // \brief Holds the singular value decomposition of a vnl_matrix. // \author Andrew W. Fitzgibbon, Oxford IERG // \date 15 Jul 96 // // \verbatim // Modifications // F. Schaffalitzky, Oxford IESRG, 26 Mar 1999 // 1. The singular values are now stored as reals (not complexes) when T is complex. // 2. Fixed bug : for complex T, matrices have to be conjugated as well as transposed. // Feb.2002 - Peter Vanroose - brief doxygen comment placed on single line // J.T. Laprest, Lasmea Clermont-Ferrand, 27-Feb-2002 // 1. The typename singval_t must be used in solve, it allows to add a supplementary // tolerance parameter and mahe svdsolve consistent with pinverse // 2. The modified interfaces are // vnl_matrix<T> vnl_svd<T>::solve(vnl_matrix<T> const& B, singval_t tol) const; // vnl_vector<T> solve (vnl_vector<T> const& y, singval_t tol=singval_t(0)) const; // void solve (T const *rhs, T *lhs, singval_t tol=singval_t(0)) const; // 3. The routine // vnl_matrix<T> vnl_svd<T>::solve_preinverted(vnl_matrix<T> const& B, singval_t tol) const; // has been added // \endverbatim #include <vnl/vnl_numeric_traits.h> #include <vnl/vnl_vector.h> #include <vnl/vnl_matrix.h> #include <vnl/vnl_diag_matrix.h> #include <vcl_iosfwd.h> //: Holds the singular value decomposition of a vnl_matrix. // // The class holds three matrices U, W, V such that the original matrix // $M = U W V^\top$. The DiagMatrix W stores the singular values in decreasing // order. The columns of U which correspond to the nonzero singular values // form a basis for range of M, while the columns of V corresponding to the // zero singular values are the nullspace. // // The SVD is computed at construction time, and enquiries may then be made // of the SVD. In particular, this allows easy access to multiple // right-hand-side solves without the bother of putting all the RHS's into a // Matrix. // // This class is supplied even though there is an existing vnl_matrix method // for several reasons: // // It is more convenient to use as it manages all the storage for // the U,S,V matrices, allowing repeated queries of the same SVD // results. // // It avoids namespace clutter in the Matrix class. While svd() // is a perfectly reasonable method for a Matrix, there are many other // decompositions that might be of interest, and adding them all would // make for a very large Matrix class. // // It demonstrates the holder model of compute class, implementing an // algorithm on an object without adding a member that may not be of // general interest. A similar pattern can be used for other // decompositions which are not defined as members of the library Matrix // class. // // It extends readily to n-ary operations, such as generalized // eigensystems, which cannot be members of just one matrix. export template <class T> class vnl_svd { public: //: The singular values of a matrix of complex<T> are of type T, not complex<T> typedef typename vnl_numeric_traits<T>::abs_t singval_t; //: // Construct an vnl_svd<T> object from $m \times n$ matrix $M$. The // vnl_svd<T> object contains matrices $U$, $W$, $V$ such that // $U W V^\top = M$. // // Uses linpack routine DSVDC to calculate an ``economy-size'' SVD // where the returned $U$ is the same size as $M$, while $W$ // and $V$ are both $n \times n$. This is efficient for // large rectangular solves where $m > n$, typical in least squares. // // The optional argument zero_out_tol is used to mark the zero singular // values: If nonnegative, any s.v. smaller than zero_out_tol in // absolute value is set to zero. If zero_out_tol is negative, the // zeroing is relative to |zero_out_tol| * sigma_max(); vnl_svd(vnl_matrix<T> const &M, double zero_out_tol = 0.0); ~vnl_svd() {} // Data Access--------------------------------------------------------------- //: find weights below threshold tol, zero them out, and update W_ and Winverse_ void zero_out_absolute(double tol = 1e-8); //sqrt(machine epsilon) //: find weights below tol*max(w) and zero them out void zero_out_relative(double tol = 1e-8); //sqrt(machine epsilon) int singularities () const { return W_.n() - rank(); } int rank () const { return rank_; } singval_t well_condition () const { return sigma_min()/sigma_max(); } //: Calculate determinant as product of diagonals in W. singval_t determinant_magnitude () const; singval_t norm() const; //: Return the matrix U. vnl_matrix<T> & U() { return U_; } //: Return the matrix U. vnl_matrix<T> const& U() const { return U_; } //: Return the matrix U's (i,j)th entry (to avoid svd.U()(i,j); ). T U(int i, int j) { return U_(i,j); } //: Get at DiagMatrix (q.v.) of singular values, sorted from largest to smallest vnl_diag_matrix<singval_t> & W() { return W_; } //: Get at DiagMatrix (q.v.) of singular values, sorted from largest to smallest vnl_diag_matrix<singval_t> const & W() const { return W_; } vnl_diag_matrix<singval_t> & Winverse() { return Winverse_; } vnl_diag_matrix<singval_t> const & Winverse() const { return Winverse_; } singval_t & W(int i, int j) { return W_(i,j); } singval_t & W(int i) { return W_(i,i); } singval_t sigma_max() const { return W_(0,0); } // largest singval_t sigma_min() const { return W_(n_-1,n_-1); } // smallest //: Return the matrix V. vnl_matrix<T> & V() { return V_; } //: Return the matrix V. vnl_matrix<T> const& V() const { return V_; } //: Return the matrix V's (i,j)th entry (to avoid svd.V()(i,j); ). T V(int i, int j) { return V_(i,j); } //: vnl_matrix<T> inverse () const; //: pseudo-inverse (for non-square matrix). vnl_matrix<T> pinverse () const; //: Calculate inverse of transpose. vnl_matrix<T> tinverse () const; //: Recompose SVD to U*W*V' vnl_matrix<T> recompose () const; //: Solve the matrix equation M X = B, returning X vnl_matrix<T> solve (vnl_matrix<T> const& B, singval_t tol = singval_t(0)) const; //: Solve the matrix equation M X = B. // Assuming that the singular values W have been preinverted by the caller. vnl_matrix<T> vnl_svd<T>::solve_preinverted(vnl_matrix<T> const& B, singval_t tol) const; //: Solve the matrix-vector system M x = y, returning x. vnl_vector<T> solve (vnl_vector<T> const& y, singval_t tol=singval_t(0)) const; void solve (T const *rhs, T *lhs, singval_t tol=singval_t(0)) const; // min ||A*lhs - rhs|| //: Solve the matrix-vector system M x = y. // Assuming that the singular values W have been preinverted by the caller. void solve_preinverted(vnl_vector<T> const& rhs, vnl_vector<T>* out) const; //: Return N such that M * N = 0 vnl_matrix<T> nullspace() const; //: Return N such that M' * N = 0 vnl_matrix<T> left_nullspace() const; //: Return N such that M * N = 0 vnl_matrix<T> nullspace(int required_nullspace_dimension) const; //: Implementation to be done yet; currently returns left_nullspace(). - PVR. vnl_matrix<T> left_nullspace(int required_nullspace_dimension) const; //: Return the rightmost column of V. // Does not check to see whether or not the matrix actually was rank-deficient - // the caller is assumed to have examined W and decided that to his or her satisfaction. vnl_vector<T> nullvector() const; //: Return the rightmost column of U. // Does not check to see whether or not the matrix actually was rank-deficient. vnl_vector<T> left_nullvector() const; private: int m_, n_; // Size of M, local cache. vnl_matrix<T> U_; // Columns Ui are basis for range of M for Wi != 0 vnl_diag_matrix<singval_t> W_;// Singular values, sorted in decreasing order vnl_diag_matrix<singval_t> Winverse_; vnl_matrix<T> V_; // Columns Vi are basis for nullspace of M for Wi = 0 unsigned rank_; bool have_max_; singval_t max_; bool have_min_; singval_t min_; double last_tol_; // Disallow assignment. vnl_svd(vnl_svd<T> const &) { } vnl_svd<T>& operator=(vnl_svd<T> const &) { return *this; } }; template <class T> inline vnl_matrix<T> vnl_svd_inverse(vnl_matrix<T> const& m) { return vnl_svd<T>(m).inverse(); } // this aint no friend. export template <class T> vcl_ostream& operator<<(vcl_ostream&, vnl_svd<T> const& svd); #endif // vnl_svd_h_ -------------------------------------------------------------------- here vnl_svd.txx -------------------------------------------------------------------- #ifndef vnl_svd_txx_ #define vnl_svd_txx_ //: // \file #include "vnl_svd.h" #include <vcl_cstdlib.h> // vcl_abort() #include <vcl_cassert.h> #include <vcl_complex.h> #include <vcl_fstream.h> #include <vcl_algorithm.h> // min #include <vnl/vnl_math.h> #include <vnl/vnl_fortran_copy.h> #include <vnl/algo/vnl_netlib.h> #ifdef HAS_FSM_PACK template <typename T> int fsm_svdc_cxx(vnl_netlib_svd_proto(T)); # define vnl_linpack_svdc fsm_svdc_cxx #else // use C++ overloading to call the right linpack routine from the template code : #define macro(p, T) \ inline int vnl_linpack_svdc(vnl_netlib_svd_proto(T)) \ { return p##svdc_(vnl_netlib_svd_params); } macro(s, float); macro(d, double); macro(c, vcl_complex<float>); macro(z, vcl_complex<double>); #undef macro #endif //-------------------------------------------------------------------------------- static bool test_heavily = false; template <class T> vnl_svd<T>::vnl_svd(vnl_matrix<T> const& M, double zero_out_tol): m_(M.rows()), n_(M.columns()), U_(m_, n_), W_(n_), Winverse_(n_), V_(n_, n_) { assert(m_ > 0); assert(n_ > 0); { int n = M.rows(); int p = M.columns(); int mm = vcl_min(n+1,p); // Copy source matrix into fortran storage // SVD is slow, don't worry about the cost of this transpose. vnl_fortran_copy<T> X(M); // Make workspace vectors. vnl_vector<T> work(n, T(0)); vnl_vector<T> uspace(n*p, T(0)); vnl_vector<T> vspace(p*p, T(0)); vnl_vector<T> wspace(mm, T(0)); // complex fortran routine actually _wants_ complex W! vnl_vector<T> espace(p, T(0)); // Call Linpack SVD int info = 0; vnl_linpack_svdc((T*)X, n, n, p, wspace.data_block(), espace.data_block(), uspace.data_block(), n, vspace.data_block(), p, work.data_block(), 21, &info); // Error return? if (info != 0) { // If info is non-zero, it contains the number of singular values // for this the SVD algorithm failed to converge. The condition is // not bogus. Even if the returned singular values are sensible, // the singular vectors can be utterly wrong. // It is possible the failure was due to NaNs or infinities in the // matrix. Check for that now. M.assert_finite(); // If we get here it might be because the scalar type has such // extreme precision that too few iterations were performed to // converge to within machine precision (that is the svdc criterion). // The only solution to that is to increase the maximum number of // iterations in the netlib code. Diagnose the problem here by // printing a warning message. vcl_cerr << __FILE__ ": suspicious return value (" << info << ") from SVDC\n" << __FILE__ ": M is " << M.rows() << 'x' << M.cols() << vcl_endl; } // Copy fortran outputs into our storage { const T *d = uspace.data_block(); for(int j = 0; j < p; ++j) for(int i = 0; i < n; ++i) U_(i,j) = *d++; } for(int j = 0; j < mm; ++j) W_(j, j) = vcl_abs(wspace(j)); // we get rid of complexness here. for(int j = mm; j < n_; ++j) W_(j, j) = 0; { const T *d = vspace.data_block(); for(int j = 0; j < p; ++j) for(int i = 0; i < p; ++i) V_(i,j) = *d++; } } if (test_heavily) { // Test that recomposed matrix == M typedef typename vnl_numeric_traits<T>::abs_t abs_t; abs_t recomposition_residual = vcl_abs((recompose() - M).fro_norm()); abs_t n = vcl_abs(M.fro_norm()); abs_t thresh = m_ * vnl_math::eps * n; if (recomposition_residual > thresh) { vcl_cerr << "vnl_svd<T>::vnl_svd<T>() -- Warning, recomposition_residual = " << recomposition_residual << vcl_endl << "fro_norm(M) = " << n << vcl_endl << "eps*fro_norm(M) = " << thresh << vcl_endl << "Press return to continue\n"; char x; vcl_cin.get(&x, 1, '\n'); } } if (zero_out_tol >= 0) // Zero out small sv's and update rank count. zero_out_absolute(double(+zero_out_tol)); else // negative tolerance implies relative to max elt. zero_out_relative(double(-zero_out_tol)); } #if 0 // Assignment template <class T> vnl_svd<T>& vnl_svd<T>::operator=(vnl_svd<T> const& that) { U_ = that.U_; W_ = that.W_; Winverse_ = that.Winverse_; V_ = that.V_; rank_ = that.rank_; return *this; } #endif template <class T> vcl_ostream& operator<<(vcl_ostream& s, const vnl_svd<T>& svd) { s << "vnl_svd<T>:\n" // << "M = [\n" << M << "]\n" << "U = [\n" << svd.U() << "]\n" << "W = " << svd.W() << "\n" << "V = [\n" << svd.V() << "]\n" << "rank = " << svd.rank() << vcl_endl; return s; } //----------------------------------------------------------------------------- // Chunky bits. //: find weights below threshold tol, zero them out, and update W_ and Winverse_ template <class T> void vnl_svd<T>::zero_out_absolute(double tol) { last_tol_ = tol; rank_ = W_.n(); for (unsigned k = 0; k < W_.n(); k++) { singval_t & weight = W_(k, k); if (weight <= tol) { // no need for vcl_abs(weight) Winverse_(k,k) = 0; weight = 0; --rank_; } else { Winverse_(k,k) = singval_t(1.0)/weight; } } } //: find weights below tol*max(w) and zero them out template <class T> void vnl_svd<T>::zero_out_relative(double tol) // sqrt(machine epsilon) { zero_out_absolute(tol * vcl_abs(sigma_max())); } //: Calculate determinant as product of diagonals in W. template <class T> vnl_svd<T>::singval_t vnl_svd<T>::determinant_magnitude() const { { static bool warned = false; if (!warned && m_ != n_) { vcl_cerr << __FILE__ ": called determinant_magnitude() on SVD of non-square matrix" << vcl_endl; warned = true; } } singval_t product = W_(0, 0); for (unsigned long k = 1; k < W_.columns(); k++) product *= W_(k, k); return product; } template <class T> vnl_svd<T>::singval_t vnl_svd<T>::norm() const { return vcl_abs(sigma_max()); } //: Recompose SVD to U*W*V' template <class T> vnl_matrix<T> vnl_svd<T>::recompose() const { vnl_matrix<T> W(W_.rows(),W_.columns()); W.fill(T(0)); for (unsigned i=0;i<rank_;i++) W(i,i)=W_(i,i); return U_*W*V_.conjugate_transpose(); } template <class T> vnl_matrix<T> vnl_svd<T>::inverse() const { return pinverse(); } //: Calculate pseudo-inverse. template <class T> vnl_matrix<T> vnl_svd<T>::pinverse() const { vnl_matrix<T> Winverse(Winverse_.rows(),Winverse_.columns()); Winverse.fill(T(0)); for (unsigned i=0;i<rank_;i++) Winverse(i,i)=Winverse_(i,i); return V_ * Winverse * U_.conjugate_transpose(); } //: Calculate inverse of transpose. template <class T> vnl_matrix<T> vnl_svd<T>::tinverse() const { vnl_matrix<T> Winverse(Winverse_.rows(),Winverse_.columns()); Winverse.fill(T(0)); for (unsigned i=0;i<rank_;i++) Winverse(i,i)=Winverse_(i,i); return U_ * Winverse * V_.conjugate_transpose(); } //: Solve the matrix equation M X = B, returning X template <class T> vnl_matrix<T> vnl_svd<T>::solve(vnl_matrix<T> const& B, singval_t tol) const { vnl_matrix<T> x; // solution matrix if (U_.rows() < U_.columns()) { // augment y with extra rows of vnl_matrix<T> yy(U_.rows(), B.columns(), T(0)); // zeros, so that it matches yy.update(B); // cols of u.transpose. ??? x = U_.conjugate_transpose() * yy; } else x = U_.conjugate_transpose() * B; unsigned long i, j; for (i = 0; i < x.rows(); i++) { // multiply with diagonal 1/W singval_t weight = W_(i, i); if (weight >= tol){; //vnl_numeric_traits<T>::zero) weight = singval_t(1) / weight; } else { weight = singval_t(0); } for (j = 0; j < x.columns(); j++) x(i, j) *= weight; } x = V_ * x; // premultiply with v. return x; } //: Solve the matrix equation M X = B, returning X // Assuming that the singular values W have been preinverted by the caller. template <class T> vnl_matrix<T> vnl_svd<T>::solve_preinverted(vnl_matrix<T> const& B, singval_t tol) const { vnl_matrix<T> x; // solution matrix if (U_.rows() < U_.columns()) { // augment y with extra rows of vnl_matrix<T> yy(U_.rows(), B.columns(), T(0)); // zeros, so that it matches yy.update(B); // cols of u.transpose. ??? x = U_.conjugate_transpose() * yy; } else x = U_.conjugate_transpose() * B; unsigned long i, j; for (i = 0; i < x.rows(); i++) { // multiply with diagonal W assumed inverted singval_t weight = W_(i, i); for (j = 0; j < x.columns(); j++) x(i, j) *= weight; } x = V_ * x; // premultiply with v. return x; } //: Solve the matrix-vector system M x = y, returning x. template <class T> vnl_vector<T> vnl_svd<T>::solve(vnl_vector<T> const& y, singval_t tol) const { // fsm sanity check : if (y.size() != U_.rows()) { vcl_cerr << __FILE__ << ": size of rhs is incompatible with no. of rows in U_\n" << "y =" << y << "\n" << "m_=" << m_ << "\n" << "n_=" << n_ << "\n" << "U_=\n" << U_ << "V_=\n" << V_ << "W_=\n" << W_; } vnl_vector<T> x(V_.rows()); // Solution matrix. if (U_.rows() < U_.columns()) { // Augment y with extra rows of vnl_vector<T> yy(U_.rows(), T(0)); // zeros, so that it matches if (yy.size()<y.size()) { // fsm vcl_cerr << "yy=" << yy << vcl_endl << "y =" << y << vcl_endl; // the update() call on the next line will abort... } yy.update(y); // cols of u.transpose. x = U_.conjugate_transpose() * yy; } else x = U_.conjugate_transpose() * y; for (unsigned i = 0; i < x.size(); i++) { // multiply with diagonal 1/W singval_t weight = W_(i, i), zero_(0); if (weight <= tol) x[i] /= weight; else x[i] = zero_; } return V_ * x; // premultiply with v. } template <class T> // FIXME. this should implement the above, not the other way round. void vnl_svd<T>::solve(T const *y, T *x, singval_t tol) const { solve(vnl_vector<T>(y, m_), tol).copy_out(x); } //: Solve the matrix-vector system M x = y. // Assume that the singular values W have been preinverted by the caller. template <class T> void vnl_svd<T>::solve_preinverted(vnl_vector<T> const& y, vnl_vector<T>* x_out) const { vnl_vector<T> x; // solution matrix if (U_.rows() < U_.columns()) { // augment y with extra rows of vcl_cout << "vnl_svd<T>::solve_preinverted() -- Augmenting y\n"; vnl_vector<T> yy(U_.rows(), T(0)); // zeros, so that it match yy.update(y); // cols of u.transpose. ?? x = U_.conjugate_transpose() * yy; } else x = U_.conjugate_transpose() * y; for (unsigned i = 0; i < x.size(); i++) // multiply with diagonal W, assumed inverted x[i] *= W_(i, i); *x_out = V_ * x; // premultiply with v. } //----------------------------------------------------------------------------- //: Return N s.t. M * N = 0 template <class T> vnl_matrix <T> vnl_svd<T>::nullspace() const { int k = rank(); if (k == n_) vcl_cerr << "vnl_svd<T>::nullspace() -- Matrix is full rank." << last_tol_ << vcl_endl; return nullspace(n_-k); } //----------------------------------------------------------------------------- //: Return N s.t. M * N = 0 template <class T> vnl_matrix <T> vnl_svd<T>::nullspace(int required_nullspace_dimension) const { return V_.extract(V_.rows(), required_nullspace_dimension, 0, n_ - required_nullspace_dimension); } //----------------------------------------------------------------------------- //: Return N s.t. M' * N = 0 template <class T> vnl_matrix <T> vnl_svd<T>::left_nullspace() const { int k = rank(); if (k == n_) vcl_cerr << "vnl_svd<T>::left_nullspace() -- Matrix is full rank." << last_tol_ << vcl_endl; return U_.extract(U_.rows(), n_-k, 0, k); } //: Implementation to be done yet; currently returns left_nullspace(). - PVR. template <class T> vnl_matrix<T> vnl_svd<T>::left_nullspace(int /*required_nullspace_dimension*/) const { return left_nullspace(); } //----------------------------------------------------------------------------- //: Return the rightmost column of V. // Does not check to see whether or not the matrix actually was rank-deficient - // the caller is assumed to have examined W and decided that to his or her satisfaction. template <class T> vnl_vector <T> vnl_svd<T>::nullvector() const { vnl_vector<T> ret(n_); for(int i = 0; i < n_; ++i) ret(i) = V_(i, n_-1); return ret; } //----------------------------------------------------------------------------- //: Return the rightmost column of U. // Does not check to see whether or not the matrix actually was rank-deficient. template <class T> vnl_vector <T> vnl_svd<T>::left_nullvector() const { vnl_vector<T> ret(m_); int col = vcl_min(m_, n_) - 1; for(int i = 0; i < m_; ++i) ret(i) = U_(i, col); return ret; } //-------------------------------------------------------------------------------- #undef VNL_SVD_INSTANTIATE #define VNL_SVD_INSTANTIATE(T) \ template class vnl_svd<T >; \ template vcl_ostream& operator<<(vcl_ostream &, vnl_svd<T > const &) #endif // vnl_svd_txx_ ---------------------------------------------------------------------- You can respond by visiting: http://sourceforge.net/tracker/?func=detail&atid=381096&aid=523333&group_id=24293 |
From: Peter Vanroose <Peter.Vanroose@es...> - 2002-02-26 18:31:42
|
> I need an ellipse whose parameters can be changed after construction > because I'd like to update them. vsol_conic_2d now has two extra methods: set_central_parameters and set_parabola_parameters. The former sets the midpoint, main axes lengths and direction of main axis of an ellipse (if both lenghts are positive) or hyperbola, the latter sets symmetry axis, top and excentricity of a parabola. The arguments they take are identical to those taken by the corresponding constructors, and should be identical to the parameters returned by the ellipse_parameters, hyperbola_parameters and parabola_parameters methods. Peter. P.S. Note that there is (and has been for quite some time) an error in hyperbola_parameters; The added test in test_vsol_conic fails on this. |
From: <Peter.Vanroose@es...> - 2002-02-26 12:56:57
|
> set_ellipse_parameters(cx, cy, phi, width, height) Yes, such a function can be added, I believe. Currently the parent class vgl_conic<double> has the method set(double a, double b, double c, double d, double e, double f) to set conic parameters (i.e., coefficients of its equation). Setting ellipse parameters will eventually just set these 6, just like the "ellipse/hyperbola" constructor of vsol_conic_2d does. Peter. |
From: David Serby <dserby@vi...> - 2002-02-26 12:48:58
|
Hi, why is it not possible to change the ellipse parameters (cx, cy, phi, width, height) after construction. Is there any reason why there is no setting-function like set_ellipse_parameters(cx, cy, phi, width, height)? I need an ellipse whose parameters can be changed after construction because I'd like to update them. David |
From: <Peter.Vanroose@es...> - 2002-02-26 09:15:28
|
> /usr/local/src/vxl-source/gel/vsol/vsol_point_2d.h:56: warning: base > class `class vsol_spatial_object_2d' should be explicitly initialized in > the copy constructor My guess is that this is caused by the constructor in the derived class being inlined, while the parent class constructor isn't. I propose to make all constructors in vsol_spatial_object_2d inline. Peter. |
From: David Serby <dserby@vi...> - 2002-02-26 08:03:06
|
Hello, when I include the file vsol_point_2d.h and compile my program I get the following compiler (g++ 2.95) warning: /usr/local/src/vxl-source/gel/vsol/vsol_point_2d.h: In method `vsol_point_2d::vsol_point_2d(const vsol_point_2d &)': /usr/local/src/vxl-source/gel/vsol/vsol_point_2d.h:56: warning: base class `class vsol_spatial_object_2d' should be explicitly initialized in the copy constructor I don't see why the base class constructor should be explicitely initialized. Shouldn't it be implicitely invoked ? Where is the problem? It's just a compiler warning and not an error, but nevertheless I'd appreciate if it could be suppressed. Regards, David |
From: Ian Scott <ian.m.scott@st...> - 2002-02-25 09:51:21
|
I don't know if this is relevant but the there is a related problem with MSVC++. At least I thought I'd better get my recollections written down for posterity before I forgot completely. MSVC++ doesn't appear to be able to match templated class parents when doing polymorphism on parameters to functions (member or otherwise.) If the current class is templated and the base class is templated, the compiler at best gives misleading error messages, and can give internal compiler errors. We have this problem in our templated, polymorphic, storable class trees, e.g. http://www.isbe.man.ac.uk/public_vxl_doc/mul/mbl/html/class_mbl_data_collect or_base.html Our solution was to have an extra (non-templated) base class. Ian. > -----Original Message----- > From: Amitha Perera [mailto:perera@...] > Sent: Thursday, February 21, 2002 11:10 PM > To: vxl-maintainers@... > Subject: [Vxl-maintainers] Member templates > > > Do we "support" any compilers that don't have member templates? As far > as I know, the compilers we work with > VC++ > Borland C++ > gcc 2.95.{>=2}, 3.0.x > SGI CC (MipsPro) > Sun CC (Workshop) > all support member templates. > > With member templates, some things can have a cleaner design. (My > particular issue now is inheritance and smart pointers--an issue I > raised a while ago.) > > Amitha. > > _______________________________________________ > Vxl-maintainers mailing list > Vxl-maintainers@... > https://lists.sourceforge.net/lists/listinfo/vxl-maintainers > |
From: Peter Vanroose <Peter.Vanroose@es...> - 2002-02-25 07:49:50
|
> I suppose it should rather be: > > 30: { set_window_corners(x - w, y - h, x + w, y + h); } You are right. Thanks. I've corrected it. Peter. |
From: David Serby <dserby@vi...> - 2002-02-25 07:32:38
|
Hello, I think that line 30 in vgl_window_scan_iterator.h contains an error: 28: //: Define rectangular region to be [x-w, x+w] x [y-h, y+h] 29: inline void set_window(float x, float y, float w, float h) 30: { set_window_corners(x - w,* y - w,* x + w, *y + w*); } I suppose it should rather be: 30: { set_window_corners(x - w,* y - h,* x + w, *y + h*); } like it is written in the comment line 28. Regards, David |
From: Amitha Perera <perera@cs...> - 2002-02-21 23:10:24
|
Do we "support" any compilers that don't have member templates? As far as I know, the compilers we work with VC++ Borland C++ gcc 2.95.{>=2}, 3.0.x SGI CC (MipsPro) Sun CC (Workshop) all support member templates. With member templates, some things can have a cleaner design. (My particular issue now is inheritance and smart pointers--an issue I raised a while ago.) Amitha. |
From: William A. Hoffman <billlist@ny...> - 2002-02-20 12:09:42
|
2.96 is the broken one. At 11:20 AM 2/20/2002 +0000, Andrew Fitzgibbon wrote: >Can you check another gcc? Isn't 2.95 the really broken one? > > >_______________________________________________ >Vxl-maintainers mailing list >Vxl-maintainers@... >https://lists.sourceforge.net/lists/listinfo/vxl-maintainers |
From: Andrew Fitzgibbon <awf@ro...> - 2002-02-20 11:21:16
|
Can you check another gcc? Isn't 2.95 the really broken one? |
From: Ian Scott <ian.m.scott@st...> - 2002-02-19 20:16:58
|
That's it adding -ffloat-store fixes it. I do a few big SVD's - the performance implications are going to be a bit unpleasant Thanks for your help Fred. Now I just have to work out how to force CMake to add the appropriate settings. > -----Original Message----- > From: Frederik Schaffalitzky [mailto:fsm@...] > Sent: Tuesday, February 19, 2002 7:59 PM > To: Ian Scott > Subject: RE: [Vxl-maintainers] errors in vnl_svd > > > On Tue, 19 Feb 2002, Ian Scott wrote: > > > Done that > > increased maxit to 300 and it still fails. > > I don;t know how high it is worth going. > > Hmmm. Failure to converge can also happen if strict IEEE > rounding rules > are not observed. What exactly are the compiler flags that were used? > |
From: Wheeler, Fred (CRD) <wheeler@cr...> - 2002-02-19 19:18:03
|
I would say TEST_OUTPUT_PATH instead of CXX_OUTPUT_PATH. Fred Wheeler -----Original Message----- From: William A. Hoffman [mailto:billlist@...] Sent: Tuesday, February 19, 2002 2:16 PM To: Wheeler, Fred (CRD); ian.m.scott@...; Vxl-maintainers (E-mail) Cc: Peter.Vanroose@... Subject: RE: [Vxl-maintainers] Re: How close are we to getting a version 1 .0 release out? You are correct, this change would also need to be made: # where will executable tests be written ? IF (EXECUTABLE_OUTPUT_PATH) SET (CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH}) ELSE (EXECUTABLE_OUTPUT_PATH) SET (CXX_TEST_PATH .) ENDIF (EXECUTABLE_OUTPUT_PATH) # change all ADD_TEST commands to look something like this one: ADD_TEST(ObjectFactory ${CXX_TEST_PATH}/ObjectFactory) Since ADD_TEST does not always have to run something compiled by cmake, the ADD_TEST command can not automatically add the path. -Bill At 02:04 PM 2/19/2002 -0500, Wheeler, Fred (CRD) wrote: >If you make these settings, "make test" will not work. The test executables will not be found. >There were some e-mails on a way to correct this a month or so ago. It would require changing all >CMakeLists.txt files that use "ADD_TEST". > >Fred Wheeler > > > >Here is an e-mail from Ken Martin (Kitware) on the subject: > >This is probably a CMakeLists problem (you could say cmake should >handle it but...) Basically Dart (and ctest which is what make test >does) by default look for executables in the binary tree in the >subdirectories where the tests were added to the cmake lists files. >They also look in subdirectories such as Release, Debug etc. When you >use EXECUTABLE_OUTPUT_PATH the executable get placed somewhere else. >What I have done in the past is in the top level CMake file > ># where will executable tests be written ? >IF (EXECUTABLE_OUTPUT_PATH) > SET (CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH}) >ELSE (EXECUTABLE_OUTPUT_PATH) > SET (CXX_TEST_PATH .) >ENDIF (EXECUTABLE_OUTPUT_PATH) > > >and when I add a test > >ADD_TEST(ObjectFactory ${CXX_TEST_PATH}/ObjectFactory) > >Ken > > > > > >-----Original Message----- >From: William A. Hoffman [mailto:billlist@...] >Sent: Tuesday, February 19, 2002 1:54 PM >To: ian.m.scott@...; Vxl-maintainers (E-mail) >Cc: Peter.Vanroose@... >Subject: RE: [Vxl-maintainers] Re: How close are we to getting a version >1.0 release out? > > > >Add these lines to your top level CMakeLists.txt file: > >SET (LIBRARY_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building all >libraries.") >SET (EXECUTABLE_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building >all executables.") > >That is all you need to get cmake to deposit the libraries and executables in >one directory. > >-Bill > >At 02:39 PM 2/19/2002 +0000, Ian Scott wrote: > >>> - Get CMake to deposit all libraries in one directory. >>Don't know - some work has been done on this. > > >_______________________________________________ >Vxl-maintainers mailing list >Vxl-maintainers@... >https://lists.sourceforge.net/lists/listinfo/vxl-maintainers > >_______________________________________________ >Vxl-maintainers mailing list >Vxl-maintainers@... >https://lists.sourceforge.net/lists/listinfo/vxl-maintainers |
From: William A. Hoffman <billlist@ny...> - 2002-02-19 19:15:59
|
You are correct, this change would also need to be made: # where will executable tests be written ? IF (EXECUTABLE_OUTPUT_PATH) SET (CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH}) ELSE (EXECUTABLE_OUTPUT_PATH) SET (CXX_TEST_PATH .) ENDIF (EXECUTABLE_OUTPUT_PATH) # change all ADD_TEST commands to look something like this one: ADD_TEST(ObjectFactory ${CXX_TEST_PATH}/ObjectFactory) Since ADD_TEST does not always have to run something compiled by cmake, the ADD_TEST command can not automatically add the path. -Bill At 02:04 PM 2/19/2002 -0500, Wheeler, Fred (CRD) wrote: >If you make these settings, "make test" will not work. The test executables will not be found. >There were some e-mails on a way to correct this a month or so ago. It would require changing all >CMakeLists.txt files that use "ADD_TEST". > >Fred Wheeler > > > >Here is an e-mail from Ken Martin (Kitware) on the subject: > >This is probably a CMakeLists problem (you could say cmake should >handle it but...) Basically Dart (and ctest which is what make test >does) by default look for executables in the binary tree in the >subdirectories where the tests were added to the cmake lists files. >They also look in subdirectories such as Release, Debug etc. When you >use EXECUTABLE_OUTPUT_PATH the executable get placed somewhere else. >What I have done in the past is in the top level CMake file > ># where will executable tests be written ? >IF (EXECUTABLE_OUTPUT_PATH) > SET (CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH}) >ELSE (EXECUTABLE_OUTPUT_PATH) > SET (CXX_TEST_PATH .) >ENDIF (EXECUTABLE_OUTPUT_PATH) > > >and when I add a test > >ADD_TEST(ObjectFactory ${CXX_TEST_PATH}/ObjectFactory) > >Ken > > > > > >-----Original Message----- >From: William A. Hoffman [mailto:billlist@...] >Sent: Tuesday, February 19, 2002 1:54 PM >To: ian.m.scott@...; Vxl-maintainers (E-mail) >Cc: Peter.Vanroose@... >Subject: RE: [Vxl-maintainers] Re: How close are we to getting a version >1.0 release out? > > > >Add these lines to your top level CMakeLists.txt file: > >SET (LIBRARY_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building all >libraries.") >SET (EXECUTABLE_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building >all executables.") > >That is all you need to get cmake to deposit the libraries and executables in >one directory. > >-Bill > >At 02:39 PM 2/19/2002 +0000, Ian Scott wrote: > >>> - Get CMake to deposit all libraries in one directory. >>Don't know - some work has been done on this. > > >_______________________________________________ >Vxl-maintainers mailing list >Vxl-maintainers@... >https://lists.sourceforge.net/lists/listinfo/vxl-maintainers > >_______________________________________________ >Vxl-maintainers mailing list >Vxl-maintainers@... >https://lists.sourceforge.net/lists/listinfo/vxl-maintainers |
From: Wheeler, Fred (CRD) <wheeler@cr...> - 2002-02-19 19:05:54
|
If you make these settings, "make test" will not work. The test executables will not be found. There were some e-mails on a way to correct this a month or so ago. It would require changing all CMakeLists.txt files that use "ADD_TEST". Fred Wheeler Here is an e-mail from Ken Martin (Kitware) on the subject: This is probably a CMakeLists problem (you could say cmake should handle it but...) Basically Dart (and ctest which is what make test does) by default look for executables in the binary tree in the subdirectories where the tests were added to the cmake lists files. They also look in subdirectories such as Release, Debug etc. When you use EXECUTABLE_OUTPUT_PATH the executable get placed somewhere else. What I have done in the past is in the top level CMake file # where will executable tests be written ? IF (EXECUTABLE_OUTPUT_PATH) SET (CXX_TEST_PATH ${EXECUTABLE_OUTPUT_PATH}) ELSE (EXECUTABLE_OUTPUT_PATH) SET (CXX_TEST_PATH .) ENDIF (EXECUTABLE_OUTPUT_PATH) and when I add a test ADD_TEST(ObjectFactory ${CXX_TEST_PATH}/ObjectFactory) Ken -----Original Message----- From: William A. Hoffman [mailto:billlist@...] Sent: Tuesday, February 19, 2002 1:54 PM To: ian.m.scott@...; Vxl-maintainers (E-mail) Cc: Peter.Vanroose@... Subject: RE: [Vxl-maintainers] Re: How close are we to getting a version 1.0 release out? Add these lines to your top level CMakeLists.txt file: SET (LIBRARY_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building all libraries.") SET (EXECUTABLE_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building all executables.") That is all you need to get cmake to deposit the libraries and executables in one directory. -Bill At 02:39 PM 2/19/2002 +0000, Ian Scott wrote: >> - Get CMake to deposit all libraries in one directory. >Don't know - some work has been done on this. _______________________________________________ Vxl-maintainers mailing list Vxl-maintainers@... https://lists.sourceforge.net/lists/listinfo/vxl-maintainers |
From: Peter Vanroose <Peter.Vanroose@es...> - 2002-02-19 19:04:31
|
> I'm getting errors when using vnl_svd. vxl/vnl/vnl_test_svd fails when VXL > is built with with -O2 and static linking ( but not with no optimisation > or shared library linking) I don't have any problems with -O2 on Linux or Alpha (gcc 3.0) or SGI (CC). Peter. |
From: Ian Scott <ian.m.scott@st...> - 2002-02-19 19:03:37
|
I should have added this is with gcc 2.95.3 on Suse Linux, and built using CMake > -----Original Message----- > From: Ian Scott > Sent: Tuesday, February 19, 2002 7:00 PM > To: Vxl-maintainers (E-mail) > Subject: [Vxl-maintainers] errors in vnl_svd > > > Hi, > > I'm getting errors when using vnl_svd. vxl/vnl/vnl_test_svd > fails when VXL > is built with with -O2 and static linking ( but not with no > optimisation or > shared library linking) > > For various reasons I need to build VXL with -O2 and static > linking, so any > help in fixing SVD would be appreciated. > > Ian. > > The output of vnl_test_svd is; > > > vnl/tests> ./vnl_test_svd > -------------------------------------------------------------- > -------------- > - > Start Testing test_svd: > vnl/tests> ./vnl_test_svd > -------------------------------------------------------------- > -------------- > - > Start Testing test_svd: > -------------------------------------------------------------- > -------------- > - > H = [ 1 0.5 0.333333 0.25 0.2 > 0.5 0.333333 0.25 0.2 0.166667 > 0.333333 0.25 0.2 0.166667 0.142857 > 0.25 0.2 0.166667 0.142857 0.125 > 0.2 0.166667 0.142857 0.125 0.111111 > ] > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return > value (5) from > SVDC > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 5x5 > rcond(H) = 2.09816e-06 > H*inv(H) = -0.179202 -0.684606 -0.493851 -0.389209 -0.322227 > -0.684606 0.602541 -0.286713 -0.225962 -0.187074 > -0.493851 -0.286713 0.793175 -0.163001 -0.134949 > -0.389209 -0.225962 -0.163001 0.871537 -0.106354 > -0.322227 -0.187074 -0.134949 -0.106354 0.911949 > > Hilbert recomposition residual - **FAILED** > y = [2.9 4.35 6.1 8.15 10.1 12.75 15.7 18.95 22.1 25.95 30.1 > 34.55 38.9 > 43.95 49.3 54.95 60.5 66.75 73.3 80.15 86.9 94.35 102.1 > 110.15 118.1 126.75 > 135.7 144.95 154.1 163.95 174.1 184.55 194.9 205.95 217.3 228.95 240.5 > 252.75 265.3 278.15 290.9 304.35 318.1 332.15 346.1 360.75 > 375.7 390.95 > 406.1 421.95 438.1 454.55 470.9 487.95 505.3 522.95 540.5 558.75 577.3 > 596.15 614.9 634.35 654.1 674.15 694.1 714.75 735.7 756.95 > 778.1 799.95 > 822.1 844.55 866.9 889.95 913.3 936.95 960.5 984.75 1009.3 > 1034.15 1058.9 > 1084.35 1110.1 1136.15 1162.1 1188.75 1215.7 1242.95 1270.1 > 1297.95 1326.1 > 1354.55 1382.9 1411.95 1441.3 1470.95 1500.5 1530.75 1561.3 1592.15] > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return > value (3) from > SVDC > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 100x3 > A = -0.183143 1.43648 -2.93651 > residual = 36.6064 > Least squares residual - **FAILED** > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return > value (3) from > SVDC > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 3x4 > Recomposition residual = 4.19495 > PMatrix recomposition residual - **FAILED** > Inv = -0.415531 0.161718 -0.0968099 > 0.104669 -0.0133571 0.0572396 > 0.0523343 -0.00667853 0.0286198 > 0.0523343 -0.00667853 0.0286198 > > singularities = 2 - PASSED > rank = 2 - PASSED > nullspace dimension - PASSED > null(P) = > 8.42663e-17 7.20389e-33 > 0.57735 1.22777e-17 > -0.57735 -0.707107 > -0.57735 0.707107 > > P * null(P) = > 1.68533e-16 1.44078e-32 > 2.52836e-16 6.77843e-16 > 4.21538e-16 8.13585e-16 > > nullspace residual = 1.17958e-15 > P nullspace residual - PASSED > nullvector residual = 1.05896e-15 > P nullvector residual - PASSED > left_nullvector(P) = -0.408944 -0.701047 0.584206 > left_nullvector residual = 2.93737e-16 > P left nullvector residual - PASSED > vnl_svd<T>: > U = [ > -1 0 0 0 > -0 -1 0 0 > -0 -0 1 0 > ] > W = diag([ 1 1 1 0 ]) > V = [ > -1 -0 0 0 > -0 -1 0 0 > -0 -0 1 0 > -0 -0 0 1 > ] > rank = 3 > ----- testing vnl_svd<float> recomposition ----- > A = [ > -1 -0.998029 -0.916738 -0.646715 -0.270795 > -0.817339 -0.815405 -0.0255656 0.0535006 -0.0911332 > -0.533643 0.662584 0.863463 0.136119 0.112189 > -0.898336 0.534102 -0.96217 -0.49528 -0.403606 > 0.751962 0.0631137 0.840522 0.0308623 0.620859 > ] > B = [ > -1 -0.998029 -0.916738 -0.646715 -0.270796 > -0.817339 -0.815405 -0.0255655 0.0535005 -0.0911331 > -0.533643 0.662584 0.863463 0.136119 0.112189 > -0.898336 0.534103 -0.96217 -0.49528 -0.403606 > 0.751962 0.0631136 0.840522 0.0308624 0.620859 > ] > residual=6.69032e-07 > vnl_svd<float> recomposition residual - PASSED > ----- testing vnl_svd<double> recomposition ----- > A = [ > -0.623159 0.772629 0.141228 -0.846451 0.630548 > 0.969782 -0.763297 0.787812 0.568967 -0.798167 > -0.493379 -0.960317 -0.243245 0.357755 0.361846 > 0.505413 -0.987541 0.248813 -0.747075 0.2351 > 0.541857 -0.626928 -0.0065566 0.0190008 -0.368122 > ] > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return > value (5) from > SVDC > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 5x5 > B = [ > -0.786598 0.928253 -0.698998 0.0838167 0.378459 > 0.833773 -1.41271 -0.0742369 0.406701 -0.492692 > 0.788159 0.604791 0.35991 -0.198429 -0.572789 > 0.210467 0.124016 0.0344764 1.13414 -0.747418 > 0.376735 -0.481305 0.370012 0.477869 -0.289325 > ] > residual=3.86099 > vnl_svd<float> recomposition residual - **FAILED** > ----- testing vnl_svd<vcl_complex<float>> recomposition ----- > A = [ > (0.403405,-0.265507) (0.752625,-0.258011) (0.0505048,-0.144331) > (0.0854864,0.335957) (-0.657716,0.661558) > (0.723811,0.538442) (-0.894841,0.933459) (-0.331432,-0.835807) > (-0.459371,-0.851475) (0.352452,0.620317) > (-0.0715775,0.13837) (0.024406,0.173021) (0.477517,0.743378) > (0.155935,0.929407) (-0.332941,-0.214344) > (-0.646145,-0.776262) (0.705362,0.622344) (0.909775,0.808566) > (-0.722169,0.372375) (-0.746025,-0.99182) > (-0.998994,-0.614096) (0.17356,-0.250082) (-0.946428,-0.0704694) > (0.570686,-0.11553) (-0.424192,0.706706) > ] > B = [ > (0.403405,-0.265507) (0.752625,-0.25801) (0.0505046,-0.144331) > (0.0854866,0.335957) (-0.657716,0.661558) > (0.723811,0.538442) (-0.894841,0.933459) (-0.331432,-0.835807) > (-0.45937,-0.851475) (0.352451,0.620317) > (-0.0715776,0.13837) (0.024406,0.173021) (0.477517,0.743378) > (0.155934,0.929407) (-0.332942,-0.214344) > (-0.646144,-0.776262) (0.705362,0.622344) (0.909775,0.808567) > (-0.72217,0.372375) (-0.746025,-0.99182) > (-0.998994,-0.614096) (0.173561,-0.250082) (-0.946428,-0.0704694) > (0.570686,-0.11553) (-0.424192,0.706706) > ] > residual=1.54095e-06 > vnl_svd<float> recomposition residual - PASSED > ----- testing vnl_svd<vcl_complex<double>> recomposition ----- > A = [ > (0.0519439,0.456833) (-0.467371,0.566968) (-0.0639116,-0.606005) > (-0.105646,0.45688) (0.932186,0.513682) > (-0.0678862,0.737933) (-0.731921,0.692105) (-0.963825,0.88171) > (0.340164,0.599943) (-0.713566,0.220921) > (0.816565,0.548829) (-0.267871,0.888576) (0.769643,-0.109658) > (-0.673943,-0.150365) (-0.0402922,-0.937743) > (0.21686,0.584522) (-0.635006,0.0502426) (0.797518,-0.38242) > (0.885252,-0.223951) (0.861025,0.822768) > (-0.324563,0.0656246) (0.404155,0.942021) (0.53617,0.503883) > (-0.818272,0.707933) (-0.650711,-0.960459) > ] > B = [ > (0.0519439,0.456833) (-0.467371,0.566968) (-0.0639116,-0.606005) > (-0.105646,0.45688) (0.932186,0.513682) > (-0.0678862,0.737933) (-0.731921,0.692105) (-0.963825,0.88171) > (0.340164,0.599943) (-0.713566,0.220921) > (0.816565,0.548829) (-0.267871,0.888576) (0.769643,-0.109658) > (-0.673943,-0.150365) (-0.0402922,-0.937743) > (0.21686,0.584522) (-0.635006,0.0502426) (0.797518,-0.38242) > (0.885252,-0.223951) (0.861025,0.822768) > (-0.324563,0.0656246) (0.404155,0.942021) (0.53617,0.503883) > (-0.818272,0.707933) (-0.650711,-0.960459) > ] > residual=4.71621e-15 > vnl_svd<float> recomposition residual - PASSED > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = float > A = [ ... > -0.16189 -0.40726 -0.24354 -0.16257 -0.72310 -0.23831 > -0.40044 -0.95798 -0.52239 -0.92578 -0.55788 0.05087 > -0.01095 0.76504 0.54766 -0.88200 -0.76040 0.09560 > -0.31617 -0.08638 0.17624 0.17030 -0.86015 0.63786 > -0.19368 0.17097 -0.61768 0.78455 -0.64734 -0.58459 ] > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 1.05755e-07 > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return > value (4) from > SVDC > /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 5x6 > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = double > A = [ ... > -0.7685042321188 -0.6821708624247 0.9852881621973 0.3631415700319 > 0.6235921611299 0.2844302717657 > -0.3413150435097 0.4751065544442 0.6469654494874 0.4425219902898 > 0.3159648192967 -0.2824510290907 > 0.2207295327458 -0.1699927074670 0.6299083675603 > 0.5479308098507 -0.4513784895780 -0.9105159107237 > 0.2020824686384 0.0281822267735 > 0.2604291931065 -0.6382135934928 -0.4429982637596 -0.0950215493821 > 0.2859715296248 0.4856638960885 -0.1726893358823 0.2361044637661 > 0.2365786396151 0.7088728046793 ] > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 1.66141e-16 > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = vcl_complex<float> > A = [ ... > -0.637086 - 0.384144i -0.953344 - 0.981636i 0.902906 + > .981510i -0.590120 + 0.208186i 0.871305 + 0.119135i 0.093732 - > 0.121744i > -0.100496 - 0.386389i -0.598372 - 0.568401i -0.900209 - 0.580878i > 0.149127 + 0.829640i -0.168780 + 0.308318i -0.288599 + 0.173405i > -0.216109 - 0.932300i -0.428967 - 0.816792i -0.111231 + 0.851873i > 0.842568 + 0.211855i 0.722292 - 0.970566i 0.373402 + 0.689137i > -0.740705 - 0.880688i -0.973856 - 0.217683i 0.731352 - 0.969885i > 0.848577 + 0.773438i 0.324137 + 0.309822i -0.847320 - 0.814046i > -0.993496 + 0.053340i 0.579513 + 0.308037i 0.091785 + 0.596777i > 0.453506 - 0.493371i -0.489508 - 0.723291i -0.034102 - 0.064827i ] > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 1.73496e-07 > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = vcl_complex<double> > A = [ ... > -0.798248192904 + 0.008428419137i 0.716790068624 - 0.979904547116i > 0.643140961644 + 0.928635200916i -0.961081192969 + > .859238606280i -0.873839201904 - 0.924075546007i -0.619486180945 - > 0.446668847091i > -0.105371847240 + 0.298763659465i -0.697753034393 - 0.025689319770i > 0.299315418727 + 0.068559596475i -0.286395211577 - 0.211767260313i > 0.443984617086 + 0.449403622433i -0.387717933448 - 0.786838614039i > 0.821559194224 + 0.481827507789i -0.521884654608 + > .302687597496i -0.263177351886 - 0.947637095265i 0.698515762148 - > 0.916367884048i -0.887757868038 - 0.147922771085i -0.040533490326 + > 0.003388961435i > 0.961053330522 + 0.215010503259i 0.825311962758 + 0.500832982430i > 0.427625777930 + 0.942264678353i -0.941576537853 - > .471422590786i -0.963378988982 - 0.838647770553i -0.690728363197 - > 0.771296377789i > 0.513075153705 + 0.876497561125i -0.742392430740 + > .185223347216i -0.754951668682 + 0.198356051944i -0.868254302715 - > 0.487948627235i -0.175098656558 + 0.896774567936i -0.293009277501 - > 0.966007224030i ] > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 > /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 6.17077e-16 > -------------------------------------------------------------- > -------------- > - > test_svd Test Summary: 9 tests succeeded, 4 tests failed > ***** > -------------------------------------------------------------- > -------------- > - > > > _______________________________________________ > Vxl-maintainers mailing list > Vxl-maintainers@... > https://lists.sourceforge.net/lists/listinfo/vxl-maintainers > |
From: Ian Scott <ian.m.scott@st...> - 2002-02-19 19:00:26
|
Hi, I'm getting errors when using vnl_svd. vxl/vnl/vnl_test_svd fails when VXL is built with with -O2 and static linking ( but not with no optimisation or shared library linking) For various reasons I need to build VXL with -O2 and static linking, so any help in fixing SVD would be appreciated. Ian. The output of vnl_test_svd is; vnl/tests> ./vnl_test_svd ---------------------------------------------------------------------------- - Start Testing test_svd: vnl/tests> ./vnl_test_svd ---------------------------------------------------------------------------- - Start Testing test_svd: ---------------------------------------------------------------------------- - H = [ 1 0.5 0.333333 0.25 0.2 0.5 0.333333 0.25 0.2 0.166667 0.333333 0.25 0.2 0.166667 0.142857 0.25 0.2 0.166667 0.142857 0.125 0.2 0.166667 0.142857 0.125 0.111111 ] /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return value (5) from SVDC /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 5x5 rcond(H) = 2.09816e-06 H*inv(H) = -0.179202 -0.684606 -0.493851 -0.389209 -0.322227 -0.684606 0.602541 -0.286713 -0.225962 -0.187074 -0.493851 -0.286713 0.793175 -0.163001 -0.134949 -0.389209 -0.225962 -0.163001 0.871537 -0.106354 -0.322227 -0.187074 -0.134949 -0.106354 0.911949 Hilbert recomposition residual - **FAILED** y = [2.9 4.35 6.1 8.15 10.1 12.75 15.7 18.95 22.1 25.95 30.1 34.55 38.9 43.95 49.3 54.95 60.5 66.75 73.3 80.15 86.9 94.35 102.1 110.15 118.1 126.75 135.7 144.95 154.1 163.95 174.1 184.55 194.9 205.95 217.3 228.95 240.5 252.75 265.3 278.15 290.9 304.35 318.1 332.15 346.1 360.75 375.7 390.95 406.1 421.95 438.1 454.55 470.9 487.95 505.3 522.95 540.5 558.75 577.3 596.15 614.9 634.35 654.1 674.15 694.1 714.75 735.7 756.95 778.1 799.95 822.1 844.55 866.9 889.95 913.3 936.95 960.5 984.75 1009.3 1034.15 1058.9 1084.35 1110.1 1136.15 1162.1 1188.75 1215.7 1242.95 1270.1 1297.95 1326.1 1354.55 1382.9 1411.95 1441.3 1470.95 1500.5 1530.75 1561.3 1592.15] /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return value (3) from SVDC /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 100x3 A = -0.183143 1.43648 -2.93651 residual = 36.6064 Least squares residual - **FAILED** /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return value (3) from SVDC /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 3x4 Recomposition residual = 4.19495 PMatrix recomposition residual - **FAILED** Inv = -0.415531 0.161718 -0.0968099 0.104669 -0.0133571 0.0572396 0.0523343 -0.00667853 0.0286198 0.0523343 -0.00667853 0.0286198 singularities = 2 - PASSED rank = 2 - PASSED nullspace dimension - PASSED null(P) = 8.42663e-17 7.20389e-33 0.57735 1.22777e-17 -0.57735 -0.707107 -0.57735 0.707107 P * null(P) = 1.68533e-16 1.44078e-32 2.52836e-16 6.77843e-16 4.21538e-16 8.13585e-16 nullspace residual = 1.17958e-15 P nullspace residual - PASSED nullvector residual = 1.05896e-15 P nullvector residual - PASSED left_nullvector(P) = -0.408944 -0.701047 0.584206 left_nullvector residual = 2.93737e-16 P left nullvector residual - PASSED vnl_svd<T>: U = [ -1 0 0 0 -0 -1 0 0 -0 -0 1 0 ] W = diag([ 1 1 1 0 ]) V = [ -1 -0 0 0 -0 -1 0 0 -0 -0 1 0 -0 -0 0 1 ] rank = 3 ----- testing vnl_svd<float> recomposition ----- A = [ -1 -0.998029 -0.916738 -0.646715 -0.270795 -0.817339 -0.815405 -0.0255656 0.0535006 -0.0911332 -0.533643 0.662584 0.863463 0.136119 0.112189 -0.898336 0.534102 -0.96217 -0.49528 -0.403606 0.751962 0.0631137 0.840522 0.0308623 0.620859 ] B = [ -1 -0.998029 -0.916738 -0.646715 -0.270796 -0.817339 -0.815405 -0.0255655 0.0535005 -0.0911331 -0.533643 0.662584 0.863463 0.136119 0.112189 -0.898336 0.534103 -0.96217 -0.49528 -0.403606 0.751962 0.0631136 0.840522 0.0308624 0.620859 ] residual=6.69032e-07 vnl_svd<float> recomposition residual - PASSED ----- testing vnl_svd<double> recomposition ----- A = [ -0.623159 0.772629 0.141228 -0.846451 0.630548 0.969782 -0.763297 0.787812 0.568967 -0.798167 -0.493379 -0.960317 -0.243245 0.357755 0.361846 0.505413 -0.987541 0.248813 -0.747075 0.2351 0.541857 -0.626928 -0.0065566 0.0190008 -0.368122 ] /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return value (5) from SVDC /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 5x5 B = [ -0.786598 0.928253 -0.698998 0.0838167 0.378459 0.833773 -1.41271 -0.0742369 0.406701 -0.492692 0.788159 0.604791 0.35991 -0.198429 -0.572789 0.210467 0.124016 0.0344764 1.13414 -0.747418 0.376735 -0.481305 0.370012 0.477869 -0.289325 ] residual=3.86099 vnl_svd<float> recomposition residual - **FAILED** ----- testing vnl_svd<vcl_complex<float>> recomposition ----- A = [ (0.403405,-0.265507) (0.752625,-0.258011) (0.0505048,-0.144331) (0.0854864,0.335957) (-0.657716,0.661558) (0.723811,0.538442) (-0.894841,0.933459) (-0.331432,-0.835807) (-0.459371,-0.851475) (0.352452,0.620317) (-0.0715775,0.13837) (0.024406,0.173021) (0.477517,0.743378) (0.155935,0.929407) (-0.332941,-0.214344) (-0.646145,-0.776262) (0.705362,0.622344) (0.909775,0.808566) (-0.722169,0.372375) (-0.746025,-0.99182) (-0.998994,-0.614096) (0.17356,-0.250082) (-0.946428,-0.0704694) (0.570686,-0.11553) (-0.424192,0.706706) ] B = [ (0.403405,-0.265507) (0.752625,-0.25801) (0.0505046,-0.144331) (0.0854866,0.335957) (-0.657716,0.661558) (0.723811,0.538442) (-0.894841,0.933459) (-0.331432,-0.835807) (-0.45937,-0.851475) (0.352451,0.620317) (-0.0715776,0.13837) (0.024406,0.173021) (0.477517,0.743378) (0.155934,0.929407) (-0.332942,-0.214344) (-0.646144,-0.776262) (0.705362,0.622344) (0.909775,0.808567) (-0.72217,0.372375) (-0.746025,-0.99182) (-0.998994,-0.614096) (0.173561,-0.250082) (-0.946428,-0.0704694) (0.570686,-0.11553) (-0.424192,0.706706) ] residual=1.54095e-06 vnl_svd<float> recomposition residual - PASSED ----- testing vnl_svd<vcl_complex<double>> recomposition ----- A = [ (0.0519439,0.456833) (-0.467371,0.566968) (-0.0639116,-0.606005) (-0.105646,0.45688) (0.932186,0.513682) (-0.0678862,0.737933) (-0.731921,0.692105) (-0.963825,0.88171) (0.340164,0.599943) (-0.713566,0.220921) (0.816565,0.548829) (-0.267871,0.888576) (0.769643,-0.109658) (-0.673943,-0.150365) (-0.0402922,-0.937743) (0.21686,0.584522) (-0.635006,0.0502426) (0.797518,-0.38242) (0.885252,-0.223951) (0.861025,0.822768) (-0.324563,0.0656246) (0.404155,0.942021) (0.53617,0.503883) (-0.818272,0.707933) (-0.650711,-0.960459) ] B = [ (0.0519439,0.456833) (-0.467371,0.566968) (-0.0639116,-0.606005) (-0.105646,0.45688) (0.932186,0.513682) (-0.0678862,0.737933) (-0.731921,0.692105) (-0.963825,0.88171) (0.340164,0.599943) (-0.713566,0.220921) (0.816565,0.548829) (-0.267871,0.888576) (0.769643,-0.109658) (-0.673943,-0.150365) (-0.0402922,-0.937743) (0.21686,0.584522) (-0.635006,0.0502426) (0.797518,-0.38242) (0.885252,-0.223951) (0.861025,0.822768) (-0.324563,0.0656246) (0.404155,0.942021) (0.53617,0.503883) (-0.818272,0.707933) (-0.650711,-0.960459) ] residual=4.71621e-15 vnl_svd<float> recomposition residual - PASSED /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = float A = [ ... -0.16189 -0.40726 -0.24354 -0.16257 -0.72310 -0.23831 -0.40044 -0.95798 -0.52239 -0.92578 -0.55788 0.05087 -0.01095 0.76504 0.54766 -0.88200 -0.76040 0.09560 -0.31617 -0.08638 0.17624 0.17030 -0.86015 0.63786 -0.19368 0.17097 -0.61768 0.78455 -0.64734 -0.58459 ] /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 1.05755e-07 /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: suspicious return value (4) from SVDC /work/vxl/src/vxl/vnl/algo/vnl_svd.txx: M is 5x6 /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = double A = [ ... -0.7685042321188 -0.6821708624247 0.9852881621973 0.3631415700319 0.6235921611299 0.2844302717657 -0.3413150435097 0.4751065544442 0.6469654494874 0.4425219902898 0.3159648192967 -0.2824510290907 0.2207295327458 -0.1699927074670 0.6299083675603 0.5479308098507 -0.4513784895780 -0.9105159107237 0.2020824686384 0.0281822267735 0.2604291931065 -0.6382135934928 -0.4429982637596 -0.0950215493821 0.2859715296248 0.4856638960885 -0.1726893358823 0.2361044637661 0.2365786396151 0.7088728046793 ] /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 1.66141e-16 /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = vcl_complex<float> A = [ ... -0.637086 - 0.384144i -0.953344 - 0.981636i 0.902906 + .981510i -0.590120 + 0.208186i 0.871305 + 0.119135i 0.093732 - 0.121744i -0.100496 - 0.386389i -0.598372 - 0.568401i -0.900209 - 0.580878i 0.149127 + 0.829640i -0.168780 + 0.308318i -0.288599 + 0.173405i -0.216109 - 0.932300i -0.428967 - 0.816792i -0.111231 + 0.851873i 0.842568 + 0.211855i 0.722292 - 0.970566i 0.373402 + 0.689137i -0.740705 - 0.880688i -0.973856 - 0.217683i 0.731352 - 0.969885i 0.848577 + 0.773438i 0.324137 + 0.309822i -0.847320 - 0.814046i -0.993496 + 0.053340i 0.579513 + 0.308037i 0.091785 + 0.596777i 0.453506 - 0.493371i -0.489508 - 0.723291i -0.034102 - 0.064827i ] /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 1.73496e-07 /work/vxl/src/vxl/vnl/tests/test_svd.cxx: type = vcl_complex<double> A = [ ... -0.798248192904 + 0.008428419137i 0.716790068624 - 0.979904547116i 0.643140961644 + 0.928635200916i -0.961081192969 + .859238606280i -0.873839201904 - 0.924075546007i -0.619486180945 - 0.446668847091i -0.105371847240 + 0.298763659465i -0.697753034393 - 0.025689319770i 0.299315418727 + 0.068559596475i -0.286395211577 - 0.211767260313i 0.443984617086 + 0.449403622433i -0.387717933448 - 0.786838614039i 0.821559194224 + 0.481827507789i -0.521884654608 + .302687597496i -0.263177351886 - 0.947637095265i 0.698515762148 - 0.916367884048i -0.887757868038 - 0.147922771085i -0.040533490326 + 0.003388961435i 0.961053330522 + 0.215010503259i 0.825311962758 + 0.500832982430i 0.427625777930 + 0.942264678353i -0.941576537853 - .471422590786i -0.963378988982 - 0.838647770553i -0.690728363197 - 0.771296377789i 0.513075153705 + 0.876497561125i -0.742392430740 + .185223347216i -0.754951668682 + 0.198356051944i -0.868254302715 - 0.487948627235i -0.175098656558 + 0.896774567936i -0.293009277501 - 0.966007224030i ] /work/vxl/src/vxl/vnl/tests/test_svd.cxx: || x|| = 1 /work/vxl/src/vxl/vnl/tests/test_svd.cxx: ||Ax|| = 6.17077e-16 ---------------------------------------------------------------------------- - test_svd Test Summary: 9 tests succeeded, 4 tests failed ***** ---------------------------------------------------------------------------- - |
From: William A. Hoffman <billlist@ny...> - 2002-02-19 18:54:40
|
Add these lines to your top level CMakeLists.txt file: SET (LIBRARY_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building all libraries.") SET (EXECUTABLE_OUTPUT_PATH ${VXL_BINARY_DIR}/bin/ CACHE PATH "Single output directory for building all executables.") That is all you need to get cmake to deposit the libraries and executables in one directory. -Bill At 02:39 PM 2/19/2002 +0000, Ian Scott wrote: >> - Get CMake to deposit all libraries in one directory. >Don't know - some work has been done on this. |
From: Ian Scott <ian.m.scott@st...> - 2002-02-19 14:36:17
|
Peter wrote: > Below is an eMail of Ian Scott from September; how close are we now? > - Add descriptions of the build process, downloading > snapshots, and introduction to non-VXL modules (e.g. tbl, > mul) to the VXL book - MAN will do this. Done. > - Tidy-up and publish list of non-core documents - e.g. MUL > and VGUI books. Sort of Done on new VXL homepage. IF someone wants to port the xcv and vgui documentation to texinfo, we can integrate it into Tim's documentation system. > - Make sure all tests do run correctly - MAN will do Windows platform Almost Done - Windows works - apparently still a few problems with tbl on BSD/gcc 3.0.1 > - Write some overview documentation for vipl and vepl Not Done > - Get CMake to deposit all libraries in one directory. Don't know - some work has been done on this. > - Settle on one email reflector. Done. > > Optional things > - VIL rewrite (to use pointer arithmetic instead of index > based addressing, and use view/data pattern) Not Done. > - Improve fault-tolerance of vsl and io code - MAN will do this. Done. > - move vcgl into vgl_algo. Not Done Additionally, given recent discussion on the email reflector - rewrite vnl_vector and vnl_matrix hierarchies so that the *_fixed versions don't do unnecessary new()s. Not Done. Ian. |
From: <Peter.Vanroose@es...> - 2002-02-19 14:23:16
|
Below is an eMail of Ian Scott from September; how close are we now? Peter. ----- Begin Included Message ----- From: "Ian Scott" <ian.m.scott@...> To: <vxl@...> Subject: How close are we to getting a version 1.0 release out? Date: Mon, 24 Sep 2001 10:00:48 +0100 I believe that we are fairly close to being in a position to release version 1.0 of VXL Summary: This is a list of things I think need done. - Add descriptions of the build process, downloading snapshots, and introduction to non-VXL modules (e.g. tbl, mul) to the VXL book - MAN will do this. - Tidy-up and publish list of non-core documents - e.g. MUL and VGUI books. - Make sure all tests do run correctly - MAN will do Windows platform - Write some overview documentation for vipl and vepl - Get CMake to deposit all libraries in one directory. - Settle on one email reflector. Optional things - VIL rewrite (to use pointer arithmetic instead of index based addressing, and use view/data pattern) - Improve fault-tolerance of vsl and io code - MAN will do this. - move vcgl into vgl_algo. Details: Add descriptions of the build process, downloading snapshots, and introduction to non-VXL modules (e.g. tbl, mul) to the VXL book. An explanation of these important things somewhat exists in various places. Manchester plan to add this to the book as part of VXL Coding session this week. Tidy-up and publish list of non-core documents - e.g. MUL and VGUI books. We need to have a web-page that links to all non-core documents (and the core ones as well.) Make sure all tests do run correctly. The tests all compile at present - but they do not run without errors. Manchester will have a go a fixing these for Windows and Linux/GCC platforms during a VXL coding session this week. Write some overview documentation for vipl and vepl Image processing is kind of important for a computer vision library - we should tell people about it. Get CMake to deposit all libraries in one directory. Talk about doing this has appears in the past on the reflector. Settle on 1 email reflector. Currently we are using the vxl@... reflector. We have set up a set of email lists on the SF reflector. If we are going to move to the new reflector, we should do so soon - and certainly before releasing VXL 1.0. The various bug,feature,support trackers on SF should also be linked up to the email lists. The old reflector could be reprogrammed to reply describing the new reflector to senders. Optional things VIL rewrite To use pointer arithmetic instead of index based addressing, and use view/data pattern. Talk about doing this has appears in the past on the reflector. Improve fault-tolerance of vsl and io code. vsl aborts if the input file is corrupted - not sensible. Manchester plan to fix this as part of VXL Coding session this week. move vcgl into vgl_algo. There is only one thing in vcgl - it doesn't need a library of its own when it would fit well into vgl_algo. Ian and Tim. ----- End Included Message ----- |
From: <Peter.Vanroose@es...> - 2002-02-19 09:54:10
|
> In vnl_levenberg_marquardt.cxx, there are calls to fprintf and not vcl_fprintf. > This does not work on Borland because it adds std::fprintf for <cstdio> All "fopen", "fclose" "fprintf" "sscanf" etc. in vxl have now been prefixed with vcl_ (CVS commits of the last few days.) Peter. |
From: William A. Hoffman <billlist@ny...> - 2002-02-18 18:36:09
|
I did some google searching and I think I found a way to avoid the problem. It would seem that it will be OK to keep the dash's. You have to double quote each file name... (not in the manual, but found it on google groups.) -Bill At 05:40 PM 2/18/2002 +0000, Andrew Fitzgibbon wrote: >> > One nice thing is that this is in the Template directory. >> > No makefiles will have to be changed, just the file names. >> >> The disadvantage is that people will have to remember not to >> give their files a name with a dash in it. >> >> I prefer a borland-specific solution which avoids future problems. > >I know, and I love the dash, and hate the underscore; but I think >we've learned over the last several years that lowest-common-denominator >is the only way to be really sure of portability. I'd say we have >to replace our (many) dash-separated filenames with underscores. >I hate it, so I would like to be sure as possible that borland can't >be hacked to overcome it, but I still think that the only thing to do >is remove the dashes. > >A. > > >_______________________________________________ >Vxl-maintainers mailing list >Vxl-maintainers@... >https://lists.sourceforge.net/lists/listinfo/vxl-maintainers |
From: Amitha Perera <perera@cs...> - 2002-02-18 18:31:32
|
I agree with Bill and Andrew. The files in Templates are really a hack because compilers don't support export templates, etc. In an ideal world, we wouldn't need the Templates directory at all. It contains stuff that could, in principle, be machine generated. Often, a-b+.cxx contains nothing more than template class a<b>; While I am surprised that Borland breaks on a dash in the filename, I don't think the dash is so vital that we should sacrifice the Borland compiler. Yes, you could do all sorts of scripting and other magic to fix it, but that leaves open situations like shared source builds and non-CMake build environments. The current naming scheme is clear and easy to read, but I'll argue that a small loss in clarity in essentially machine generated code is a small price to pay for supporting another (good) compiler. Amitha. |