mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-22 00:47:13 +01:00
Locate and position the current Audacity source code, and clear a variety of old junk out of the way into junk-branches
This commit is contained in:
124
src/Matrix.h
Normal file
124
src/Matrix.h
Normal file
@@ -0,0 +1,124 @@
|
||||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
Matrix.h
|
||||
|
||||
Dominic Mazzoni
|
||||
|
||||
*******************************************************************//*!
|
||||
|
||||
\file Matrix.h
|
||||
\brief Holds both the Matrix and Vector classes, supporting
|
||||
linear algebra operations, including matrix inversion.
|
||||
Used by InterpolateAudio.
|
||||
|
||||
\class Matrix
|
||||
\brief Holds a matrix of doubles and supports arithmetic, subsetting,
|
||||
and matrix inversion. Used by InterpolateAudio.
|
||||
|
||||
\class Vector
|
||||
\brief Holds a matrix of doubles and supports arithmetic operations,
|
||||
including Vector-Matrix operations. Used by InterpolateAudio.
|
||||
|
||||
*//*******************************************************************/
|
||||
|
||||
#ifndef __AUDACITY_MATRIX__
|
||||
#define __AUDACITY_MATRIX__
|
||||
|
||||
class Matrix;
|
||||
|
||||
class Vector
|
||||
{
|
||||
public:
|
||||
Vector();
|
||||
Vector(const Vector& copyFrom);
|
||||
Vector(int len, double *data=NULL, bool copy=true);
|
||||
Vector(int len, float *data);
|
||||
Vector& operator=(const Vector &other);
|
||||
virtual ~Vector();
|
||||
|
||||
inline double& operator[](int i) { return mData[i]; }
|
||||
inline double operator[](int i) const { return mData[i]; }
|
||||
inline int Len() const { return mN; }
|
||||
|
||||
double Sum() const;
|
||||
|
||||
private:
|
||||
void CopyFrom(const Vector &other);
|
||||
|
||||
int mN;
|
||||
double *mData;
|
||||
bool mCopy;
|
||||
};
|
||||
|
||||
class Matrix
|
||||
{
|
||||
public:
|
||||
Matrix(const Matrix& copyFrom);
|
||||
Matrix(int rows, int cols, double **data=NULL);
|
||||
virtual ~Matrix();
|
||||
|
||||
Matrix& operator=(const Matrix& other);
|
||||
|
||||
inline Vector& operator[](int i) { return *mRowVec[i]; }
|
||||
inline Vector& operator[](int i) const { return *mRowVec[i]; }
|
||||
inline int Rows() const { return mRows; }
|
||||
inline int Cols() const { return mCols; }
|
||||
|
||||
void SwapRows(int i, int j);
|
||||
|
||||
double Sum() const;
|
||||
|
||||
private:
|
||||
void CopyFrom(const Matrix& other);
|
||||
|
||||
int mRows;
|
||||
int mCols;
|
||||
Vector **mRowVec;
|
||||
};
|
||||
|
||||
bool InvertMatrix(const Matrix& input, Matrix& Minv);
|
||||
|
||||
Matrix TransposeMatrix(const Matrix& M);
|
||||
|
||||
Matrix IdentityMatrix(int N);
|
||||
|
||||
Vector operator+(const Vector &left, const Vector &right);
|
||||
Vector operator-(const Vector &left, const Vector &right);
|
||||
Vector operator*(const Vector &left, const Vector &right);
|
||||
Vector operator*(const Vector &left, double right);
|
||||
|
||||
Vector VectorSubset(const Vector &other, int start, int len);
|
||||
Vector VectorConcatenate(const Vector& left, const Vector& right);
|
||||
|
||||
Vector operator*(const Vector &left, const Matrix &right);
|
||||
Vector operator*(const Matrix &left, const Vector &right);
|
||||
|
||||
Matrix operator+(const Matrix &left, const Matrix &right);
|
||||
Matrix operator*(const Matrix &left, const double right);
|
||||
|
||||
// No operator* on matrices due to ambiguity
|
||||
Matrix ScalarMultiply(const Matrix &left, const Matrix &right);
|
||||
Matrix MatrixMultiply(const Matrix &left, const Matrix &right);
|
||||
|
||||
Matrix MatrixSubset(const Matrix &M,
|
||||
int startRow, int numRows, int startCol, int numCols);
|
||||
|
||||
Matrix MatrixConcatenateCols(const Matrix& left, const Matrix& right);
|
||||
|
||||
bool InvertMatrix(const Matrix& M, Matrix& Minv);
|
||||
|
||||
#endif // __AUDACITY_MATRIX__
|
||||
|
||||
// Indentation settings for Vim and Emacs.
|
||||
// Please do not modify past this point.
|
||||
//
|
||||
// Local Variables:
|
||||
// c-basic-offset: 3
|
||||
// indent-tabs-mode: nil
|
||||
// End:
|
||||
//
|
||||
// vim: et sts=3 sw=3
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user