📄 matrix.h
字号:
//matrix.h
#ifndef MATRIX_H
#define MATRIX_H
class vector;
class matrix;
typedef double(*pfun)(double t);
typedef void (*fun_group)(double t,vector& y);
typedef double(*pfun2)(double t,double x);
typedef double(*pfun_arg)(double t,vector& x);
typedef void (*vector_map)(double t,vector& x,vector& y);
typedef double (*pFUN)(vector& x);
typedef void (*Fun_group)(vector& x,vector& y);
enum POSITION_STS{LT,RT,LB,RB};
_declspec(dllexport) double Gauss(pfun pf,double a,double b,int n=1);
_declspec(dllexport) double Gauss(pfun2 pf,double a,double b,double x,int n=1);
_declspec(dllexport) double Romberg(pfun pf,double a,double b,double error=1E-10);
_declspec(dllexport) double Romberg(pfun2 pf,double a,double b,double x,double error=1E-10);
_declspec(dllexport) double RK(pfun2 pf,double t0,double x0,double T,double error);
_declspec(dllexport) double Deriv1(pfun pf,double x);
_declspec(dllexport) double Deriv2(pfun pf,double x);
_declspec(dllexport) double ZeroPoint(pfun pf,double x0,double error);
_declspec(dllexport) double MinPoint1(pfun pf,double x0,double error=1E-6);
_declspec(dllexport) double MinPoint2(pfun pf,double x0,double error=1E-10);
_declspec(dllexport) void FFT(vector& Real,vector& Imag,vector& real,vector& imag,int what);
_declspec(dllexport) void FFT(vector& Real,vector& real,vector& imag);
_declspec(dllexport) double Mult(vector& x,matrix& A,vector& y);
_declspec(dllexport) void Plot(vector& t,vector& x);
_declspec(dllexport) void Plot(pfun pf,double a,double b,int n=100);
_declspec(dllexport) void Plot(pfun pf1,pfun pf2,double a,double b,int n=100);
_declspec(dllexport) void Plot(pfun pf1,pfun pf2,pfun pf3,double a,double b,int n=100);
_declspec(dllexport) double ED(vector& x,vector& y);
class matrix
{
public:
friend class vector;
friend double Mult(vector& x,matrix& A,vector& y);
friend void Plot(pfun pf,double a,double b,int n);
friend void Plot(pfun pf1,pfun pf2,double a,double b,int n);
friend void Plot(pfun pf1,pfun pf2,pfun pf3,double a,double b,int n);
_declspec(dllexport) matrix();
_declspec(dllexport) matrix(int m0,int n0);
_declspec(dllexport) matrix(const matrix &ob);
_declspec(dllexport) ~matrix();
_declspec(dllexport) void Set(int m0,int n0);
_declspec(dllexport) void Destroy(void);
_declspec(dllexport) int LineSize(void);
_declspec(dllexport) int ColumSize(void);
_declspec(dllexport) void DelLine(int k);
_declspec(dllexport) void DelColum(int k);
_declspec(dllexport) void AddLine(vector& x);
_declspec(dllexport) void AddLine();
_declspec(dllexport) void AddColum(vector& x);
_declspec(dllexport) void AddColum();
_declspec(dllexport) void InsLine(int k,vector& x);
_declspec(dllexport) void InsLine(int k);
_declspec(dllexport) void InsColum(int k,vector& x);
_declspec(dllexport) void InsColum(int k);
_declspec(dllexport) void SetColum(vector& x,int j);
_declspec(dllexport) void SetLine(vector& x,int i);
_declspec(dllexport) void LineSum(vector& x);
_declspec(dllexport) void ColumSum(vector& x);
_declspec(dllexport) void DiagPlus(double a);
_declspec(dllexport) void DiagPlus(vector& d);
_declspec(dllexport) void DiagSub(vector& d);
_declspec(dllexport) void ExchangeLine(int i,int j);
_declspec(dllexport) void ExchangeColum(int i,int j);
_declspec(dllexport) void LineTimes(int k,double landa);
_declspec(dllexport) void ColumTimes(int k,double landa);
_declspec(dllexport) void LineTimesPlus(int i,double landa,int j);
_declspec(dllexport) void ColumTimesPlus(int i,double landa,int j);
_declspec(dllexport) void TimesPlus(matrix& ob,double landa);
_declspec(dllexport) void GetBlock(matrix &A,int p,int q,int *u,int *v);
_declspec(dllexport) void GetBlock(matrix &A,int lnum,int cnum,POSITION_STS where);
_declspec(dllexport) void GetLineBlock(matrix& A,int top,int bottom);
_declspec(dllexport) void GetColumBlock(matrix& A,int left,int right);
_declspec(dllexport) void FillIn(matrix &A,POSITION_STS where);
_declspec(dllexport) void FillIn(matrix &A,int left,int top);
_declspec(dllexport) void RightLink(matrix &A,matrix &B);
_declspec(dllexport) void RightLink(matrix &B);
_declspec(dllexport) void DownLink(matrix &B);
_declspec(dllexport) void DownLink(matrix &A,matrix &B);
_declspec(dllexport) double AbsMax(int &r,int &s);
_declspec(dllexport) double AbsMax();
_declspec(dllexport) double AbsMin(int &r,int &s);
_declspec(dllexport) double AbsMin();
_declspec(dllexport) double Max(int &r,int &s);
_declspec(dllexport) double Max();
_declspec(dllexport) double Min(int &r,int &s);
_declspec(dllexport) double Min();
_declspec(dllexport) double Mean();
_declspec(dllexport) void CoVar(matrix& B);//B=((x1-mu)*(x1-mu)'+...+(xn-um)*(xn-mu)')/n
_declspec(dllexport) double Trace(void);
_declspec(dllexport) void Unit();
_declspec(dllexport) void Zero();
_declspec(dllexport) void Negative();
_declspec(dllexport) void DelError(double error);
_declspec(dllexport) void Unit(int n);
_declspec(dllexport) void Init(double first,...);
_declspec(dllexport) void Random(double a=0,double b=1);
_declspec(dllexport) void RandomGauss(vector& mu,matrix& sigama);
_declspec(dllexport) void RandomInt(int scope);
_declspec(dllexport) matrix& Plus(matrix &A,matrix &B,bool FirstTurn=0,bool SecondTurn=0);
_declspec(dllexport) matrix& Sub(matrix &A,matrix &B,bool FirstTurn=0,bool SecondTurn=0);
_declspec(dllexport) matrix& Mult(matrix &A,matrix &B,bool FirstTurn=0,bool SecondTurn=0);//////need modify
_declspec(dllexport) matrix& Mult(matrix &A,double landa,bool Turn=0);
_declspec(dllexport) matrix& Mult(vector& x,vector& y);
_declspec(dllexport) matrix& Turn(void);
_declspec(dllexport) matrix& Turn(matrix &ob);
_declspec(dllexport) void MatrixPoly(vector& p,matrix& A,bool duicheng=0);
_declspec(dllexport) double Det();
_declspec(dllexport) int Rank(void);
_declspec(dllexport) int Rang(matrix& B);
_declspec(dllexport) int Null(matrix& N);
_declspec(dllexport) bool Invers(matrix &A);
_declspec(dllexport) void PInvers(matrix& A);
_declspec(dllexport) bool Cholesky1(matrix& L,vector& d);
_declspec(dllexport) void Cholesky2(matrix& L,vector& d);
_declspec(dllexport) void QR(matrix &Q,matrix &R);//A=QR
_declspec(dllexport) void Eig(vector& real,vector& imag);
_declspec(dllexport) double Eig(double landa,vector& ksai);
_declspec(dllexport) double Eig(double a,double b,vector& real,vector& imag);
_declspec(dllexport) void Eig(vector& root,matrix& Q);//Q'AQ=diag(root[1]...root[n])
_declspec(dllexport) void Eig(vector& root);
_declspec(dllexport) int SVD(vector& singalvalue);
_declspec(dllexport) int SVD(matrix& U,matrix& S,matrix& V);//U'AV=S
_declspec(dllexport) double Norm1(void);
_declspec(dllexport) double NormInf(void);
_declspec(dllexport) double Norm2(void);
_declspec(dllexport) double Cond(void);
_declspec(dllexport) void RK(matrix& A,double t0,vector& x0,double T,double error);
_declspec(dllexport) void RK(matrix& A,matrix& B,fun_group u,double t0,vector& x0,double T,double error);
_declspec(dllexport) void RK(pfun2 pf,double t0,double x0,double T,double error);
_declspec(dllexport) void RK(vector_map v_map,double t0,vector& x0,double T,double error);
_declspec(dllexport) void Hessain(pFUN pf,vector& x);
_declspec(dllexport) void Jacobi(Fun_group fj,int mm,vector& x);
_declspec(dllexport) void Exp(matrix& A,double t);
_declspec(dllexport) void Save(char *pathname);
_declspec(dllexport) void Read(char *pathname);
_declspec(dllexport) void Print(int byte=6);
_declspec(dllexport) void Plot();
_declspec(dllexport) void SplineBuild(vector& x0,vector& y0);
_declspec(dllexport) double SplineValue(double x);
_declspec(dllexport) void SplineValue(vector& xx,vector& yy);
_declspec(dllexport) double SplineDeriv(double x);
_declspec(dllexport) void SplineDeriv(vector& xx,vector& yy);
_declspec(dllexport) double SplineIntegral(double x);
_declspec(dllexport) double& operator()(int i,int j);
_declspec(dllexport) matrix& operator=(matrix& ob);
_declspec(dllexport) matrix& operator+=(matrix &ob);
_declspec(dllexport) matrix& operator-=(matrix &ob);
_declspec(dllexport) matrix& operator+=(double a);
_declspec(dllexport) matrix& operator*=(matrix &ob);
_declspec(dllexport) matrix& operator*=(double a);
_declspec(dllexport) matrix& operator/=(double a);
_declspec(dllexport) void operator>>(vector& x);
_declspec(dllexport) void operator>>(double *p);
_declspec(dllexport) void operator<<(double *p);
_declspec(dllexport) matrix operator*(matrix& ob);
_declspec(dllexport) matrix operator+(matrix& ob);
_declspec(dllexport) matrix operator-(matrix& ob);
_declspec(dllexport) vector operator*(vector& ob);
private:
int m,n;
double* *start;
private:
void Hessenberg(matrix& Q);
void Hessenberg(void);
void DoubleMove();
void TQR(matrix& Q,int N,int tline);
void TQR();
void SvdStep1(matrix& P,matrix& Q);
void SvdStep1();
void SvdStep2(matrix& P,matrix& Q,int pos,int p,int q);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -