Commit d258022e7e83b3f262f310d5d274f8d785604b97

Authored by Jürgen Knödlseder
1 parent ef231310

Add scalar addition and subtraction operators to all matrix classes (#1990)

include/GMatrix.hpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrix.hpp - General matrix class * 2 * GMatrix.hpp - General matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2014 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -213,11 +213,10 @@ GMatrix GMatrix::operator+(const GMatrix& matrix) const @@ -213,11 +213,10 @@ GMatrix GMatrix::operator+(const GMatrix& matrix) const
213 /***********************************************************************//** 213 /***********************************************************************//**
214 * @brief Binary matrix scalar addition 214 * @brief Binary matrix scalar addition
215 * 215 *
216 - * @param[in] double Scalar.  
217 - * @return Result of matrix addition. 216 + * @param[in] scalar Scalar.
  217 + * @return Matrix with @p scalar added.
218 * 218 *
219 - * Returns the sum of the matrix with another matrix were all entries have  
220 - * the value of scalar. The method makes use of the unary addition operator. 219 + * Returns a matrix where a @p scalar has been added to each matrix element.
221 ***************************************************************************/ 220 ***************************************************************************/
222 inline 221 inline
223 GMatrix GMatrix::operator+(const double& scalar) const 222 GMatrix GMatrix::operator+(const double& scalar) const
@@ -249,11 +248,11 @@ GMatrix GMatrix::operator-(const GMatrix& matrix) const @@ -249,11 +248,11 @@ GMatrix GMatrix::operator-(const GMatrix& matrix) const
249 /***********************************************************************//** 248 /***********************************************************************//**
250 * @brief Binary matrix scalar subtraction 249 * @brief Binary matrix scalar subtraction
251 * 250 *
252 - * @param[in] double Scalar.  
253 - * @return Result of matrix subtraction. 251 + * @param[in] scalar Scalar.
  252 + * @return Matrix with @p scalar subtracted.
254 * 253 *
255 - * Returns the difference of the matrix with another matrix were all entries have  
256 - * the value of scalar. The method makes use of the unary subtraction operator. 254 + * Returns a matrix where a @p scalar has been subtracted from each matrix
  255 + * element.
257 ***************************************************************************/ 256 ***************************************************************************/
258 inline 257 inline
259 GMatrix GMatrix::operator-(const double& scalar) const 258 GMatrix GMatrix::operator-(const double& scalar) const
include/GMatrixSparse.hpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrixSparse.hpp - Sparse matrix class * 2 * GMatrixSparse.hpp - Sparse matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2014 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -221,11 +221,15 @@ public: @@ -221,11 +221,15 @@ public:
221 virtual GMatrixSparse& operator=(const GMatrixSparse& matrix); 221 virtual GMatrixSparse& operator=(const GMatrixSparse& matrix);
222 virtual GMatrixSparse& operator=(const double& value); 222 virtual GMatrixSparse& operator=(const double& value);
223 virtual GMatrixSparse operator+(const GMatrixSparse& matrix) const; 223 virtual GMatrixSparse operator+(const GMatrixSparse& matrix) const;
  224 + virtual GMatrixSparse operator+(const double& scalar) const;
224 virtual GMatrixSparse operator-(const GMatrixSparse& matrix) const; 225 virtual GMatrixSparse operator-(const GMatrixSparse& matrix) const;
  226 + virtual GMatrixSparse operator-(const double& scalar) const;
225 virtual GMatrixSparse operator*(const GMatrixSparse& matrix) const; 227 virtual GMatrixSparse operator*(const GMatrixSparse& matrix) const;
226 virtual GMatrixSparse operator-(void) const; 228 virtual GMatrixSparse operator-(void) const;
227 virtual GMatrixSparse& operator+=(const GMatrixSparse& matrix); 229 virtual GMatrixSparse& operator+=(const GMatrixSparse& matrix);
  230 + virtual GMatrixSparse& operator+=(const double& scalar);
228 virtual GMatrixSparse& operator-=(const GMatrixSparse& matrix); 231 virtual GMatrixSparse& operator-=(const GMatrixSparse& matrix);
  232 + virtual GMatrixSparse& operator-=(const double& scalar);
229 virtual GMatrixSparse& operator*=(const GMatrixSparse& matrix); 233 virtual GMatrixSparse& operator*=(const GMatrixSparse& matrix);
230 virtual GMatrixSparse& operator*=(const double& scalar); 234 virtual GMatrixSparse& operator*=(const double& scalar);
231 virtual GMatrixSparse& operator/=(const double& scalar); 235 virtual GMatrixSparse& operator/=(const double& scalar);
@@ -359,6 +363,23 @@ GMatrixSparse GMatrixSparse::operator+(const GMatrixSparse& matrix) const @@ -359,6 +363,23 @@ GMatrixSparse GMatrixSparse::operator+(const GMatrixSparse& matrix) const
359 363
360 364
361 /***********************************************************************//** 365 /***********************************************************************//**
  366 + * @brief Binary matrix scalar addition
  367 + *
  368 + * @param[in] scalar Scalar.
  369 + * @return Matrix with @p scalar added.
  370 + *
  371 + * Returns a matrix where a @p scalar has been added to each matrix element.
  372 + ***************************************************************************/
  373 +inline
  374 +GMatrixSparse GMatrixSparse::operator+(const double& scalar) const
  375 +{
  376 + GMatrixSparse result = *this;
  377 + result += scalar;
  378 + return result;
  379 +}
  380 +
  381 +
  382 +/***********************************************************************//**
362 * @brief Binary matrix subtraction 383 * @brief Binary matrix subtraction
363 * 384 *
364 * @param[in] matrix Matrix. 385 * @param[in] matrix Matrix.
@@ -377,6 +398,24 @@ GMatrixSparse GMatrixSparse::operator-(const GMatrixSparse& matrix) const @@ -377,6 +398,24 @@ GMatrixSparse GMatrixSparse::operator-(const GMatrixSparse& matrix) const
377 398
378 399
379 /***********************************************************************//** 400 /***********************************************************************//**
  401 + * @brief Binary matrix scalar subtraction
  402 + *
  403 + * @param[in] scalar Scalar.
  404 + * @return Matrix with @p scalar subtracted.
  405 + *
  406 + * Returns a matrix where a @p scalar has been subtracted from each matrix
  407 + * element.
  408 + ***************************************************************************/
  409 +inline
  410 +GMatrixSparse GMatrixSparse::operator-(const double& scalar) const
  411 +{
  412 + GMatrixSparse result = *this;
  413 + result -= scalar;
  414 + return result;
  415 +}
  416 +
  417 +
  418 +/***********************************************************************//**
380 * @brief Binary matrix multiplication 419 * @brief Binary matrix multiplication
381 * 420 *
382 * @param[in] matrix Matrix. 421 * @param[in] matrix Matrix.
include/GMatrixSymmetric.hpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrixSymmetric.hpp - Symmetric matrix class * 2 * GMatrixSymmetric.hpp - Symmetric matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2014 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -88,11 +88,15 @@ public: @@ -88,11 +88,15 @@ public:
88 virtual GMatrixSymmetric& operator=(const GMatrixSymmetric& matrix); 88 virtual GMatrixSymmetric& operator=(const GMatrixSymmetric& matrix);
89 virtual GMatrixSymmetric& operator=(const double& value); 89 virtual GMatrixSymmetric& operator=(const double& value);
90 virtual GMatrixSymmetric operator+(const GMatrixSymmetric& matrix) const; 90 virtual GMatrixSymmetric operator+(const GMatrixSymmetric& matrix) const;
  91 + virtual GMatrixSymmetric operator+(const double& scalar) const;
91 virtual GMatrixSymmetric operator-(const GMatrixSymmetric& matrix) const; 92 virtual GMatrixSymmetric operator-(const GMatrixSymmetric& matrix) const;
  93 + virtual GMatrixSymmetric operator-(const double& scalar) const;
92 virtual GMatrix operator*(const GMatrixSymmetric& matrix) const; 94 virtual GMatrix operator*(const GMatrixSymmetric& matrix) const;
93 virtual GMatrixSymmetric operator-(void) const; 95 virtual GMatrixSymmetric operator-(void) const;
94 virtual GMatrixSymmetric& operator+=(const GMatrixSymmetric& matrix); 96 virtual GMatrixSymmetric& operator+=(const GMatrixSymmetric& matrix);
  97 + virtual GMatrixSymmetric& operator+=(const double& scalar);
95 virtual GMatrixSymmetric& operator-=(const GMatrixSymmetric& matrix); 98 virtual GMatrixSymmetric& operator-=(const GMatrixSymmetric& matrix);
  99 + virtual GMatrixSymmetric& operator-=(const double& scalar);
96 virtual GMatrixSymmetric& operator*=(const double& scaler); 100 virtual GMatrixSymmetric& operator*=(const double& scaler);
97 virtual GMatrixSymmetric& operator/=(const double& scalar); 101 virtual GMatrixSymmetric& operator/=(const double& scalar);
98 102
@@ -214,6 +218,23 @@ GMatrixSymmetric GMatrixSymmetric::operator+(const GMatrixSymmetric& matrix) con @@ -214,6 +218,23 @@ GMatrixSymmetric GMatrixSymmetric::operator+(const GMatrixSymmetric& matrix) con
214 218
215 219
216 /***********************************************************************//** 220 /***********************************************************************//**
  221 + * @brief Binary matrix scalar addition
  222 + *
  223 + * @param[in] scalar Scalar.
  224 + * @return Matrix with @p scalar added.
  225 + *
  226 + * Returns a matrix where a @p scalar has been added to each matrix element.
  227 + ***************************************************************************/
  228 +inline
  229 +GMatrixSymmetric GMatrixSymmetric::operator+(const double& scalar) const
  230 +{
  231 + GMatrixSymmetric result = *this;
  232 + result += scalar;
  233 + return result;
  234 +}
  235 +
  236 +
  237 +/***********************************************************************//**
217 * @brief Binary matrix subtraction 238 * @brief Binary matrix subtraction
218 * 239 *
219 * @param[in] matrix Matrix. 240 * @param[in] matrix Matrix.
@@ -232,6 +253,24 @@ GMatrixSymmetric GMatrixSymmetric::operator-(const GMatrixSymmetric& matrix) con @@ -232,6 +253,24 @@ GMatrixSymmetric GMatrixSymmetric::operator-(const GMatrixSymmetric& matrix) con
232 253
233 254
234 /***********************************************************************//** 255 /***********************************************************************//**
  256 + * @brief Binary matrix scalar subtraction
  257 + *
  258 + * @param[in] scalar Scalar.
  259 + * @return Matrix with @p scalar subtracted.
  260 + *
  261 + * Returns a matrix where a @p scalar has been subtracted from each matrix
  262 + * element.
  263 + ***************************************************************************/
  264 +inline
  265 +GMatrixSymmetric GMatrixSymmetric::operator-(const double& scalar) const
  266 +{
  267 + GMatrixSymmetric result = *this;
  268 + result -= scalar;
  269 + return result;
  270 +}
  271 +
  272 +
  273 +/***********************************************************************//**
235 * @brief Scale matrix elements 274 * @brief Scale matrix elements
236 * 275 *
237 * @param[in] scalar Scale factor. 276 * @param[in] scalar Scale factor.
pyext/GMatrix.i
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrix.i - General Matrix class * 2 * GMatrix.i - General Matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2008-2016 by Juergen Knoedlseder * 4 + * copyright (C) 2008-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -53,12 +53,12 @@ public: @@ -53,12 +53,12 @@ public:
53 virtual GMatrix operator+(const GMatrix& matrix) const; 53 virtual GMatrix operator+(const GMatrix& matrix) const;
54 virtual GMatrix operator-(const GMatrix& matrix) const; 54 virtual GMatrix operator-(const GMatrix& matrix) const;
55 virtual GMatrix operator-(void) const; 55 virtual GMatrix operator-(void) const;
56 - virtual GMatrix operator+(const double scalar) const;  
57 - virtual GMatrix operator-(const double scalar) const; 56 + virtual GMatrix operator+(const double& scalar) const;
  57 + virtual GMatrix operator-(const double& scalar) const;
58 virtual GMatrix& operator+=(const GMatrix& matrix); 58 virtual GMatrix& operator+=(const GMatrix& matrix);
59 - virtual GMatrix& operator+=(const double scalar); 59 + virtual GMatrix& operator+=(const double& scalar);
60 virtual GMatrix& operator-=(const GMatrix& matrix); 60 virtual GMatrix& operator-=(const GMatrix& matrix);
61 - virtual GMatrix& operator-=(const double scalar); 61 + virtual GMatrix& operator-=(const double& scalar);
62 virtual GMatrix& operator*=(const GMatrix& matrix); 62 virtual GMatrix& operator*=(const GMatrix& matrix);
63 virtual GMatrix& operator*=(const double& scalar); 63 virtual GMatrix& operator*=(const double& scalar);
64 64
pyext/GMatrixSparse.i
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrixSparse.i - Sparse matrix class * 2 * GMatrixSparse.i - Sparse matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2008-2016 by Juergen Knoedlseder * 4 + * copyright (C) 2008-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -55,10 +55,14 @@ public: @@ -55,10 +55,14 @@ public:
55 55
56 // Other operators 56 // Other operators
57 virtual GMatrixSparse operator+(const GMatrixSparse& matrix) const; 57 virtual GMatrixSparse operator+(const GMatrixSparse& matrix) const;
  58 + virtual GMatrixSparse operator+(const double& scalar) const;
58 virtual GMatrixSparse operator-(const GMatrixSparse& matrix) const; 59 virtual GMatrixSparse operator-(const GMatrixSparse& matrix) const;
  60 + virtual GMatrixSparse operator-(const double& scalar) const;
59 virtual GMatrixSparse operator-(void) const; 61 virtual GMatrixSparse operator-(void) const;
60 virtual GMatrixSparse& operator+=(const GMatrixSparse& matrix); 62 virtual GMatrixSparse& operator+=(const GMatrixSparse& matrix);
  63 + virtual GMatrixSparse& operator+=(const double& scalar);
61 virtual GMatrixSparse& operator-=(const GMatrixSparse& matrix); 64 virtual GMatrixSparse& operator-=(const GMatrixSparse& matrix);
  65 + virtual GMatrixSparse& operator-=(const double& scalar);
62 virtual GMatrixSparse& operator*=(const GMatrixSparse& matrix); 66 virtual GMatrixSparse& operator*=(const GMatrixSparse& matrix);
63 virtual GMatrixSparse& operator*=(const double& scalar); 67 virtual GMatrixSparse& operator*=(const double& scalar);
64 68
pyext/GMatrixSymmetric.i
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrixSymmetric.i - Symmetric matrix class * 2 * GMatrixSymmetric.i - Symmetric matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2008-2016 by Juergen Knoedlseder * 4 + * copyright (C) 2008-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -50,10 +50,14 @@ public: @@ -50,10 +50,14 @@ public:
50 50
51 // Other operators 51 // Other operators
52 virtual GMatrixSymmetric operator+(const GMatrixSymmetric& matrix) const; 52 virtual GMatrixSymmetric operator+(const GMatrixSymmetric& matrix) const;
  53 + virtual GMatrixSymmetric operator+(const double& scalar) const;
53 virtual GMatrixSymmetric operator-(const GMatrixSymmetric& matrix) const; 54 virtual GMatrixSymmetric operator-(const GMatrixSymmetric& matrix) const;
  55 + virtual GMatrixSymmetric operator-(const double& scalar) const;
54 virtual GMatrixSymmetric operator-(void) const; 56 virtual GMatrixSymmetric operator-(void) const;
55 virtual GMatrixSymmetric& operator+=(const GMatrixSymmetric& matrix); 57 virtual GMatrixSymmetric& operator+=(const GMatrixSymmetric& matrix);
  58 + virtual GMatrixSymmetric& operator+=(const double& scalar);
56 virtual GMatrixSymmetric& operator-=(const GMatrixSymmetric& matrix); 59 virtual GMatrixSymmetric& operator-=(const GMatrixSymmetric& matrix);
  60 + virtual GMatrixSymmetric& operator-=(const double& scalar);
57 virtual GMatrixSymmetric& operator*=(const double& scaler); 61 virtual GMatrixSymmetric& operator*=(const double& scaler);
58 62
59 // Implemented pure virtual base class methods 63 // Implemented pure virtual base class methods
src/linalg/GMatrix.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrix.cpp - General matrix class * 2 * GMatrix.cpp - General matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2013 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -364,9 +364,9 @@ GMatrix& GMatrix::operator+=(const GMatrix& matrix) @@ -364,9 +364,9 @@ GMatrix& GMatrix::operator+=(const GMatrix& matrix)
364 /***********************************************************************//** 364 /***********************************************************************//**
365 * @brief Unary matrix scalar addition operator 365 * @brief Unary matrix scalar addition operator
366 * 366 *
367 - * @param[in] double Scalar. 367 + * @param[in] scaler Scalar.
368 * 368 *
369 - * This method adds a given scalar to each matrix element. 369 + * Adds a @p scalar to each matrix element.
370 ***************************************************************************/ 370 ***************************************************************************/
371 GMatrix& GMatrix::operator+=(const double& scalar) 371 GMatrix& GMatrix::operator+=(const double& scalar)
372 { 372 {
@@ -416,9 +416,9 @@ GMatrix& GMatrix::operator-=(const GMatrix& matrix) @@ -416,9 +416,9 @@ GMatrix& GMatrix::operator-=(const GMatrix& matrix)
416 /***********************************************************************//** 416 /***********************************************************************//**
417 * @brief Unary matrix scalar subtraction operator 417 * @brief Unary matrix scalar subtraction operator
418 * 418 *
419 - * @param[in] double Scalar. 419 + * @param[in] scalar Scalar.
420 * 420 *
421 - * This method subtracts a given scalar from each matrix element. 421 + * Subtracts a @p scalar from each matrix element.
422 ***************************************************************************/ 422 ***************************************************************************/
423 GMatrix& GMatrix::operator-=(const double& scalar) 423 GMatrix& GMatrix::operator-=(const double& scalar)
424 { 424 {
src/linalg/GMatrixSparse.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrixSparse.cpp - Sparse matrix class * 2 * GMatrixSparse.cpp - Sparse matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2013 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -572,6 +572,27 @@ GMatrixSparse& GMatrixSparse::operator+=(const GMatrixSparse& matrix) @@ -572,6 +572,27 @@ GMatrixSparse& GMatrixSparse::operator+=(const GMatrixSparse& matrix)
572 572
573 573
574 /***********************************************************************//** 574 /***********************************************************************//**
  575 + * @brief Unary matrix scalar addition operator
  576 + *
  577 + * @param[in] scaler Scalar.
  578 + *
  579 + * Adds a @p scalar to each matrix element.
  580 + ***************************************************************************/
  581 +GMatrixSparse& GMatrixSparse::operator+=(const double& scalar)
  582 +{
  583 + // Perform inplace matrix addition using vectors
  584 + for (int col = 0; col < m_cols; ++col) {
  585 + GVector vector = column(col);
  586 + vector += scalar;
  587 + column(col, vector);
  588 + }
  589 +
  590 + // Return result
  591 + return *this;
  592 +}
  593 +
  594 +
  595 +/***********************************************************************//**
575 * @brief Unary matrix subtraction operator 596 * @brief Unary matrix subtraction operator
576 * 597 *
577 * @param[in] matrix Matrix. 598 * @param[in] matrix Matrix.
@@ -607,6 +628,27 @@ GMatrixSparse&amp; GMatrixSparse::operator-=(const GMatrixSparse&amp; matrix) @@ -607,6 +628,27 @@ GMatrixSparse&amp; GMatrixSparse::operator-=(const GMatrixSparse&amp; matrix)
607 628
608 629
609 /***********************************************************************//** 630 /***********************************************************************//**
  631 + * @brief Unary matrix scalar subtraction operator
  632 + *
  633 + * @param[in] scalar Scalar.
  634 + *
  635 + * Subtracts a @p scalar from each matrix element.
  636 + ***************************************************************************/
  637 +GMatrixSparse& GMatrixSparse::operator-=(const double& scalar)
  638 +{
  639 + // Perform inplace matrix subtraction
  640 + for (int col = 0; col < m_cols; ++col) {
  641 + GVector vector = column(col);
  642 + vector -= scalar;
  643 + column(col, vector);
  644 + }
  645 +
  646 + // Return result
  647 + return *this;
  648 +}
  649 +
  650 +
  651 +/***********************************************************************//**
610 * @brief Unary matrix multiplication operator 652 * @brief Unary matrix multiplication operator
611 * 653 *
612 * @param[in] matrix Matrix. 654 * @param[in] matrix Matrix.
src/linalg/GMatrixSymmetric.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * GMatrixSymmetric.cpp - Symmetric matrix class * 2 * GMatrixSymmetric.cpp - Symmetric matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2013 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -412,6 +412,26 @@ GMatrixSymmetric&amp; GMatrixSymmetric::operator+=(const GMatrixSymmetric&amp; matrix) @@ -412,6 +412,26 @@ GMatrixSymmetric&amp; GMatrixSymmetric::operator+=(const GMatrixSymmetric&amp; matrix)
412 412
413 413
414 /***********************************************************************//** 414 /***********************************************************************//**
  415 + * @brief Unary matrix scalar addition operator
  416 + *
  417 + * @param[in] scaler Scalar.
  418 + *
  419 + * Adds a @p scalar to each matrix element.
  420 + ***************************************************************************/
  421 +GMatrixSymmetric& GMatrixSymmetric::operator+=(const double& scalar)
  422 +{
  423 + // Add all matrix elements
  424 + double* dst = m_data;
  425 + for (int i = 0; i < m_elements; ++i) {
  426 + *dst++ += scalar;
  427 + }
  428 +
  429 + // Return result
  430 + return *this;
  431 +}
  432 +
  433 +
  434 +/***********************************************************************//**
415 * @brief Unary matrix subtraction operator 435 * @brief Unary matrix subtraction operator
416 * 436 *
417 * @param[in] matrix Matrix. 437 * @param[in] matrix Matrix.
@@ -443,6 +463,26 @@ GMatrixSymmetric&amp; GMatrixSymmetric::operator-=(const GMatrixSymmetric&amp; matrix) @@ -443,6 +463,26 @@ GMatrixSymmetric&amp; GMatrixSymmetric::operator-=(const GMatrixSymmetric&amp; matrix)
443 } 463 }
444 464
445 465
  466 +/***********************************************************************//**
  467 + * @brief Unary matrix scalar subtraction operator
  468 + *
  469 + * @param[in] scalar Scalar.
  470 + *
  471 + * Subtracts a @p scalar from each matrix element.
  472 + ***************************************************************************/
  473 +GMatrixSymmetric& GMatrixSymmetric::operator-=(const double& scalar)
  474 +{
  475 + // Add all matrix elements
  476 + double* dst = m_data;
  477 + for (int i = 0; i < m_elements; ++i) {
  478 + *dst++ -= scalar;
  479 + }
  480 +
  481 + // Return result
  482 + return *this;
  483 +}
  484 +
  485 +
446 /*========================================================================== 486 /*==========================================================================
447 = = 487 = =
448 = Public methods = 488 = Public methods =
test/Makefile.am
@@ -205,6 +205,7 @@ all-local: @@ -205,6 +205,7 @@ all-local:
205 # Files to be removed in build directory 205 # Files to be removed in build directory
206 clean-local: 206 clean-local:
207 rm -rf $(top_builddir)/test/*.fits 207 rm -rf $(top_builddir)/test/*.fits
  208 + rm -rf $(top_builddir)/test/*.csv
208 rm -rf $(top_builddir)/test/*.log 209 rm -rf $(top_builddir)/test/*.log
209 rm -rf $(top_builddir)/test/*.html 210 rm -rf $(top_builddir)/test/*.html
210 rm -rf $(top_builddir)/test/*.xml 211 rm -rf $(top_builddir)/test/*.xml
test/test_GMatrix.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * test_GMatrix.cpp - Test generic matrix class * 2 * test_GMatrix.cpp - Test generic matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2013 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -540,8 +540,8 @@ void TestGMatrix::matrix_arithmetics(void) @@ -540,8 +540,8 @@ void TestGMatrix::matrix_arithmetics(void)
540 "Unexpected result matrix:\n"+test.print()); 540 "Unexpected result matrix:\n"+test.print());
541 541
542 // GMatrix += 3.0 542 // GMatrix += 3.0
543 - test = m_test;  
544 - test += 3.0; 543 + test = m_test;
  544 + test += 3.0;
545 test_assert(check_matrix(m_test), "Test source matrix"); 545 test_assert(check_matrix(m_test), "Test source matrix");
546 test_assert(check_matrix(test, 1.0, 3.0), "Test GMatrix + 3.0", 546 test_assert(check_matrix(test, 1.0, 3.0), "Test GMatrix + 3.0",
547 "Unexpected result matrix:\n"+test.print()); 547 "Unexpected result matrix:\n"+test.print());
@@ -553,13 +553,12 @@ void TestGMatrix::matrix_arithmetics(void) @@ -553,13 +553,12 @@ void TestGMatrix::matrix_arithmetics(void)
553 "Unexpected result matrix:\n"+test.print()); 553 "Unexpected result matrix:\n"+test.print());
554 554
555 // GMatrix -= 3.0 555 // GMatrix -= 3.0
556 - test = m_test;  
557 - test -= 3.0; 556 + test = m_test;
  557 + test -= 3.0;
558 test_assert(check_matrix(m_test), "Test source matrix"); 558 test_assert(check_matrix(m_test), "Test source matrix");
559 test_assert(check_matrix(test, 1.0, -3.0), "Test GMatrix -= 3.0", 559 test_assert(check_matrix(test, 1.0, -3.0), "Test GMatrix -= 3.0",
560 "Unexpected result matrix:\n"+test.print()); 560 "Unexpected result matrix:\n"+test.print());
561 561
562 -  
563 // Test invalid matrix addition 562 // Test invalid matrix addition
564 test_try("Test invalid matrix addition"); 563 test_try("Test invalid matrix addition");
565 try { 564 try {
test/test_GMatrixSparse.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * test_GMatrixSparse.cpp - Test sparse matrix class * 2 * test_GMatrixSparse.cpp - Test sparse matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2016 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -861,6 +861,32 @@ void TestGMatrixSparse::matrix_arithmetics(void) @@ -861,6 +861,32 @@ void TestGMatrixSparse::matrix_arithmetics(void)
861 test_assert(check_matrix(test, 1.0/3.0, 0.0), "Test GMatrixSparse / 3.0", 861 test_assert(check_matrix(test, 1.0/3.0, 0.0), "Test GMatrixSparse / 3.0",
862 "Unexpected result matrix:\n"+test.print()); 862 "Unexpected result matrix:\n"+test.print());
863 863
  864 + // GMatrixSparse + 3.0
  865 + test = m_test + 3.0;
  866 + test_assert(check_matrix(m_test), "Test source matrix");
  867 + test_assert(check_matrix(test, 1.0, 3.0), "Test GMatrixSparse + 3.0",
  868 + "Unexpected result matrix:\n"+test.print());
  869 +
  870 + // GMatrixSparse += 3.0
  871 + test = m_test;
  872 + test += 3.0;
  873 + test_assert(check_matrix(m_test), "Test source matrix");
  874 + test_assert(check_matrix(test, 1.0, 3.0), "Test GMatrixSparse + 3.0",
  875 + "Unexpected result matrix:\n"+test.print());
  876 +
  877 + // GMatrixSparse - 5.0
  878 + test = m_test - 5.0;
  879 + test_assert(check_matrix(m_test), "Test source matrix");
  880 + test_assert(check_matrix(test, 1.0, -5.0), "Test GMatrixSparse -= 5.0",
  881 + "Unexpected result matrix:\n"+test.print());
  882 +
  883 + // GMatrixSparse -= 3.0
  884 + test = m_test;
  885 + test -= 3.0;
  886 + test_assert(check_matrix(m_test), "Test source matrix");
  887 + test_assert(check_matrix(test, 1.0, -3.0), "Test GMatrixSparse -= 3.0",
  888 + "Unexpected result matrix:\n"+test.print());
  889 +
864 // Test invalid matrix addition 890 // Test invalid matrix addition
865 test_try("Test invalid matrix addition"); 891 test_try("Test invalid matrix addition");
866 try { 892 try {
test/test_GMatrixSymmetric.cpp
1 /*************************************************************************** 1 /***************************************************************************
2 * test_GMatrixSymmetric.cpp - Test symmetric matrix class * 2 * test_GMatrixSymmetric.cpp - Test symmetric matrix class *
3 * ----------------------------------------------------------------------- * 3 * ----------------------------------------------------------------------- *
4 - * copyright (C) 2006-2013 by Juergen Knoedlseder * 4 + * copyright (C) 2006-2017 by Juergen Knoedlseder *
5 * ----------------------------------------------------------------------- * 5 * ----------------------------------------------------------------------- *
6 * * 6 * *
7 * This program is free software: you can redistribute it and/or modify * 7 * This program is free software: you can redistribute it and/or modify *
@@ -537,6 +537,32 @@ void TestGMatrixSymmetric::matrix_arithmetics(void) @@ -537,6 +537,32 @@ void TestGMatrixSymmetric::matrix_arithmetics(void)
537 test_assert(check_matrix(test, 1.0/3.0, 0.0), "Test GMatrixSymmetric / 3.0", 537 test_assert(check_matrix(test, 1.0/3.0, 0.0), "Test GMatrixSymmetric / 3.0",
538 test.print()); 538 test.print());
539 539
  540 + // GMatrixSymmetric + 3.0
  541 + test = m_test + 3.0;
  542 + test_assert(check_matrix(m_test), "Test source matrix");
  543 + test_assert(check_matrix(test, 1.0, 3.0), "Test GMatrixSymmetric + 3.0",
  544 + "Unexpected result matrix:\n"+test.print());
  545 +
  546 + // GMatrixSymmetric += 3.0
  547 + test = m_test;
  548 + test += 3.0;
  549 + test_assert(check_matrix(m_test), "Test source matrix");
  550 + test_assert(check_matrix(test, 1.0, 3.0), "Test GMatrixSymmetric + 3.0",
  551 + "Unexpected result matrix:\n"+test.print());
  552 +
  553 + // GMatrixSymmetric - 5.0
  554 + test = m_test - 5.0;
  555 + test_assert(check_matrix(m_test), "Test source matrix");
  556 + test_assert(check_matrix(test, 1.0, -5.0), "Test GMatrixSymmetric -= 5.0",
  557 + "Unexpected result matrix:\n"+test.print());
  558 +
  559 + // GMatrixSymmetric -= 3.0
  560 + test = m_test;
  561 + test -= 3.0;
  562 + test_assert(check_matrix(m_test), "Test source matrix");
  563 + test_assert(check_matrix(test, 1.0, -3.0), "Test GMatrixSymmetric -= 3.0",
  564 + "Unexpected result matrix:\n"+test.print());
  565 +
540 // Test invalid matrix addition 566 // Test invalid matrix addition
541 test_try("Test invalid matrix addition"); 567 test_try("Test invalid matrix addition");
542 try { 568 try {