00001
00002
00004
00005 #ifndef matrica_h
00006 #define matrica_h
00007
00008 #include <stdlib.h>
00009 #include <stdio.h>
00010 #include <assert.h>
00011 #include <math.h>
00012 #include <memory.h>
00013
00014 class Matrica
00015 {
00016 protected:
00017 int row,col;
00018
00019 void Take(void);
00020 void Free(void);
00021 public:
00022 double **data;
00023 Matrica Transpose(int);
00024 Matrica();
00025 Matrica(int,int);
00026 Matrica(Matrica&);
00027 ~Matrica();
00028 double Get(int,int) const;
00029 double Get(int) const;
00030 double Set(int,int,double);
00031 double Set(int,double);
00032 double Norm(void);
00033 int GetRow(void) const;
00034 int GetCol(void) const;
00035 int CopyColumn(int,Matrica&);
00036 int SetColumn(int,Matrica&);
00037 Matrica& operator= (Matrica&);
00038 Matrica operator+ (Matrica&);
00039 Matrica operator+ (double);
00040 void operator+= (Matrica&);
00041 Matrica operator- (const Matrica&);
00042 void operator-= (Matrica&);
00043 Matrica operator* (const Matrica&);
00044 Matrica operator* (const double&);
00045 Matrica operator/ (const double&);
00046 Matrica operator~ ();
00047 double* operator[](const int redak);
00048 void Reset(int,int=1);
00049 void Init(int,int=1);
00050 int Load(const char*);
00051 void Save(const char*);
00052 void SaveLong(const char* fname);
00053 void Show(void);
00054 };
00055
00056 inline int Matrica::GetRow(void) const
00057 { return row; }
00058
00059 inline int Matrica::GetCol(void) const
00060 { return col; }
00061
00062 inline double* Matrica::operator[](const int redak)
00063 { assert(redak >= 0 && redak < row);
00064 return data[redak]; }
00065
00066 class SLAJ
00067 {
00068 protected:
00069 Matrica A;
00070 Matrica b;
00071 public:
00072 void Load_A(char*);
00073 void Load_b(char*);
00074 void Save_A(char*);
00075 void Save_b(char*);
00076 void Set_A(Matrica&);
00077 void Set_b(Matrica&);
00078 void GetSolution(Matrica&);
00079 };
00080
00081
00082 class LUdek : public SLAJ
00083 {
00084 protected:
00085 int *P;
00086 int n;
00087 public:
00088 LUdek(void);
00089 int Solve(Matrica&,Matrica&,Matrica&);
00090 int Decompose(void);
00091 int ForwardSubst(void);
00092 int BackwardSubst(void);
00093 Matrica Invert(Matrica&);
00094 int pivot;
00095
00096 };
00097
00098 #endif // matrica_h