00001 #ifndef __AbsCTriDiagonalLS_H__
00002 #define __AbsCTriDiagonalLS_H__
00003
00004
00032 #include <stdio.h>
00033 #include "CTriDiagonalMatrix.hpp"
00034 #include "CVector.hpp"
00035
00036 class AbsCTriDiagonalLS
00037 {
00038 protected:
00039
00040 int N;
00041
00042 CTriDiagonalMatrix* A;
00043 CVector* x;
00044
00045 CVector* b;
00046
00047 public:
00048
00049 AbsCTriDiagonalLS(int asize)
00050 {
00051 N=asize;
00052
00053 x= new CVector(N);
00054 b= new CVector(N);
00055
00056 A= new CTriDiagonalMatrix(N);
00057 }
00058
00059 virtual ~AbsCTriDiagonalLS(){ delete A; delete x; delete b;}
00060
00061 virtual void initFreezing(int val=0){}
00062 virtual void freeze(int item, int val=0){}
00063
00064 virtual void loadA(CTriDiagonalMatrix* m){ A->load(m); }
00065 virtual void loadMatrix(CVector* u1, CVector* d1, CVector* l1){ A->load(u1,d1,l1); }
00066 virtual void loadX(CVector* data){ x->load(data); }
00067 virtual void loadB(CVector* data){ b->load(data); }
00068
00069 virtual int size(){ return (3*N-2); }
00070
00071 virtual int getWidth(){ return N; }
00072 virtual int getHeight(){ return N; }
00073
00074 virtual CVector* getX(){ return x; }
00075 virtual CVector* getB(){ return b; }
00076
00077 virtual CTriDiagonalMatrix* getA(){ return A; }
00078
00079 virtual bool solve()=0;
00080
00081 virtual bool solve(CVector* aX, CVector* aB)
00082 {
00083 loadX(aX);
00084 loadB(aB);
00085
00086 return solve();
00087 }
00088
00089 virtual bool solve(CTriDiagonalMatrix* aA, CVector* aX, CVector* aB)
00090 {
00091 loadA(aA);
00092
00093 loadX(aX);
00094 loadB(aB);
00095
00096 return solve();
00097 }
00098
00099
00100 virtual CVector* evaluate(CVector* aX, CVector* aB)
00101 {
00102 solve(aX, aB);
00103
00104 return getX();
00105 }
00106
00107 virtual CVector* evaluate(CTriDiagonalMatrix* aA, CVector* aX, CVector* aB)
00108 {
00109 solve(aA, aX, aB);
00110
00111 return getX();
00112 }
00113
00114 virtual void output()
00115 {
00116 printf("Complex Linear System\n");
00117 A->output();
00118 printf("x: "); x->output();
00119 printf("b: "); b->output();
00120 }
00121
00122 virtual void output(FILE* file)
00123 {
00124 fprintf(file, "Complex Linear System\n");
00125 A->output(file);
00126 fprintf(file, "x: "); x->output(file);
00127 fprintf(file, "b: "); b->output(file);
00128 }
00129 };
00130
00131 #endif
00132
00133
00134