WIL説明書(C++)  3.0.0
FvMatrix.h
[詳解]
1 // $Revision: 1.3 $
2 /*
3  @file FvMatrix.h
4  @brief CFvMatrix class interface
5  @author FAST Corporation
6 */
7 
8 #ifndef _FVMATRIX_H_INCLUDED_
9 #define _FVMATRIX_H_INCLUDED_
10 
11 #include "FvDataObject.h"
12 #include "FvVector.h"
13 #include "MultiData/FvBuffer.h"
14 
15 #pragma pack(push,_FVCL_PACKING)
16 
17 namespace FVCL
18 {
19 
20 struct tagDMATRIX
21 {
25 };
26 
27 namespace Data
28 {
29 
30 // ////////////////////////////////////////////////////////////
31 // class
33 {
34 private:
35  void _Constructor();
36  INT f_err_to_fvcl( INT fie_error_code ) const;
37 
38 public:
39  CFvMatrix();
40  CFvMatrix( INT width, INT height ); // obsolete
41  CFvMatrix( INT rows, INT cols, DOUBLE** matrix );
42  CFvMatrix( FMATRIX* matrix, bool attach );
43  CFvMatrix( const CFvMatrix& src );
44  virtual ~CFvMatrix();
45 
46  enum { DataID = 200 };
47 
48  virtual INT GetDataID() const;
49  virtual bool GetPointer( INT id, void** val ) const;
50 
51  virtual bool Load( LPCTSTR szFileName );
52  virtual bool Save( LPCTSTR szFileName );
53 
54  static CFvMatrix alloc ( INT rows, INT cols );
55  static CFvMatrix alloc_eye ( INT rows, INT cols );
56  static CFvMatrix alloc_ones ( INT rows, INT cols );
57 
58  virtual bool Resize( INT rows, INT cols );
59  virtual void Free();
60 
61  virtual bool Attach( INT rows, INT cols, DOUBLE** matrix );
62  virtual bool Attach( FMATRIX* matrix );
63 
64  virtual void IsAttach(bool value);
65  virtual bool IsAttach() const;
66 
67  virtual bool SetHandle( FMATRIX* handle );
68  virtual FMATRIX* GetHandle() const; // incompatible
69  virtual FMATRIX* GetFMATRIX() const; // obsolete
70 
71  virtual INT GetRows() const;
72  virtual INT GetColumns() const;
73 
74  virtual DOUBLE** GetAddress() const;
75 
76  virtual bool SetRowVector( INT row, const CFvVector& vector );
77  virtual CFvVector GetRowVector( INT row ) const;
78 
79  virtual bool SetColVector( INT col, const CFvVector& vector );
80  virtual CFvVector GetColVector( INT col ) const;
81 
82  // ----- obsolete
83  bool SetSize( INT width, INT height ); // obsolete
84  bool GetSize( INT* width, INT* height ) const; // obsolete
85 
86  INT GetWidth() const; // obsolete
87  INT GetHeight() const; // obsolete
88 
89  bool SetValue( INT x, INT y, DOUBLE value ); // obsolete
90  DOUBLE GetValue( INT x, INT y ) const; // obsolete
91  // ----- obsolete
92 
93  virtual DOUBLE* operator [] ( INT row );
94  virtual const DOUBLE* operator [] ( INT row ) const;
95 
96  virtual DOUBLE& operator () ( INT row, INT col );
97  virtual const DOUBLE& operator () ( INT row, INT col ) const;
98 
99  virtual CFvMatrix& operator = ( const CFvMatrix& src );
100  virtual bool operator == ( const CFvMatrix& src ) const;
101  virtual bool operator != ( const CFvMatrix& src ) const;
102 
103  virtual CFvMatrix operator + ( const CFvMatrix& src ) const;
104  virtual CFvMatrix operator + ( DOUBLE scalar ) const;
105  virtual CFvMatrix& operator += ( const CFvMatrix& src );
106  virtual CFvMatrix& operator += ( DOUBLE scalar );
107 
108  virtual CFvMatrix operator - ( const CFvMatrix& src ) const;
109  virtual CFvMatrix operator - ( DOUBLE scalar ) const;
110  virtual CFvMatrix& operator -= ( const CFvMatrix& src );
111  virtual CFvMatrix& operator -= ( DOUBLE scalar );
112 
113  virtual CFvMatrix operator * ( const CFvMatrix& src ) const;
114  virtual CFvMatrix operator * ( DOUBLE scalar ) const;
115 
116  virtual CFvMatrix& operator *= ( const CFvMatrix& src );
117  virtual CFvMatrix& operator *= ( DOUBLE scalar );
118 
119  FVCL_API friend CFvVector operator * ( const CFvMatrix& matrix, const CFvVector& vector );
120  FVCL_API friend CFvVector operator * ( const CFvVector& vector, const CFvMatrix& matrix );
121 
122  FVCL_API friend CFvMatrix operator / ( const CFvMatrix& matrix, DOUBLE scalar );
123  FVCL_API friend CFvMatrix operator / ( DOUBLE scalar, const CFvMatrix& matrix );
124 
125  CFvMatrix& Add( const CFvMatrix& src );
126  CFvMatrix& AddScalar( DOUBLE scalar );
127 
128  CFvMatrix& Sub( const CFvMatrix& src );
129  CFvMatrix& SubScalar( DOUBLE scalar );
130 
131  CFvMatrix& Mul( const CFvMatrix& src );
132  CFvMatrix& MulScalar( DOUBLE scalar );
133 
134 public:
135  // basic manipulation
136 
137  void eye ();
138  void ones ();
139  void zeros ();
140  void rand (); // OSS
141 
142  CFvMatrix triu (INT k) const;
143  CFvMatrix tril (INT k) const;
144  CFvMatrix circshift (INT sx, INT sy) const;
145  CFvMatrix cat_horz (const CFvMatrix& right) const;
146  CFvMatrix cat_vert (const CFvMatrix& bottom) const;
147  CFvMatrix flipdim_horz () const;
148  CFvMatrix flipdim_vert () const;
149 
150  // linear
151 
152  CFvMatrix Inverse(UINT option=1) const;
153 
154  CFvVector solve (const CFvVector& vector) const;
155 
156  CFvMatrix transpose () const;
157 
158  DOUBLE trace () const;
159 
160  // element calculation
161 
162  DOUBLE max_elem() const;
163  DOUBLE min_elem() const;
164 
165  CFvMatrix asin () const;
166  CFvMatrix acos () const;
167  CFvMatrix atan () const;
168  CFvMatrix atan2 (const CFvMatrix& ax) const;
169  CFvMatrix cos () const;
170  CFvMatrix sin () const;
171  CFvMatrix tan () const;
172  CFvMatrix exp () const;
173  CFvMatrix log () const;
174  CFvMatrix sqrt () const;
175  CFvMatrix abs () const;
176  CFvMatrix ceil () const;
177  CFvMatrix floor () const;
178 
179  CFvMatrix mul_elem (const CFvMatrix& src) const;
180  CFvMatrix div_elem (const CFvMatrix& src) const;
181 
182  void modf (CFvMatrix* dsti, CFvMatrix* dstf) const;
183 
184  bool has_nan() const;
185  bool is_nan() const;
186  bool is_normal() const;
187 
188  DOUBLE det () const; // OSS
189  DOUBLE norm (INT type) const; // OSS
190  INT rank (DOUBLE tol) const; // OSS
191  DOUBLE cond (INT type) const; // OSS
192  DOUBLE rcond () const; // OSS
193  void chol (CFvMatrix* a, INT mode) const; // OSS
194  void lu (CFvMatrix* a, CFvBuffer<INT>* pivot) const; // OSS
195  void qr (CFvMatrix* q, CFvMatrix* r) const; // OSS
196  void svd (CFvMatrix* u, CFvMatrix* vt, CFvBuffer<DOUBLE>* sigma) const; // OSS
197  void svd2 (CFvMatrix* u, CFvMatrix* vt, CFvBuffer<DOUBLE>* sigma, INT mode, DOUBLE rcond, INT* rank) const; // OSS
198  void eig (CFvBuffer<FCOMPLEX>* lambda, CFvBuffer<FCOMPLEX>* vr, CFvBuffer<FCOMPLEX>* vl) const; // OSS
199  void inverse3 (CFvMatrix* ai, DOUBLE* det) const; // OSS
200  void pseudo_inverse (CFvMatrix* ai, DOUBLE threshold, INT* rank) const; // OSS
201  void linsolve (INT method, DOUBLE rcond, const CFvVector& b, CFvVector* x, DOUBLE* residual, INT* rank) const; // OSS
202  void linsolve2 (INT method, DOUBLE rcond, const CFvMatrix& b, CFvMatrix* x, CFvBuffer<DOUBLE>* residuals, INT* rank) const; // OSS
203 
204 private:
205  INT _Allocator( INT rows, INT cols );
206  bool fnAllocate( INT width, INT height );
207 
208  FMATRIX* m_Handle; // matrix handle
209  bool m_IsAttach;
210  FMATRIX m_AttachedMatrix;
211 };
212 
213 // ===================================================================
214 FVCL_API CFvVector operator * ( const CFvMatrix& matrix, const CFvVector& vector );
215 FVCL_API CFvVector operator * ( const CFvVector& vector, const CFvMatrix& matrix );
216 FVCL_API CFvMatrix operator / ( const CFvMatrix& matrix, DOUBLE scalar );
217 FVCL_API CFvMatrix operator / ( DOUBLE scalar, const CFvMatrix& matrix );
218 
219 } // Data
220 
221 } // FVCL
222 
223 #pragma pack(pop)
224 
225 #endif // _FV_MATRIX_H
#define FVCL_API
DLLエクスポートマクロ
Definition: FvMacros.h:61
FVCL_API CFvMatrix operator/(DOUBLE scalar, const CFvMatrix &matrix)
除算オペレータ(スカラー/行列)
FVCL_API CFvAngle operator+(DOUBLE value, const CFvAngle &src)
加算オペレータ
配列テンプレートクラス(ポインタ型)
LPCSTR LPCTSTR
汎用文字列型(const付き)
Definition: FvDefs.h:57
FVCLのネームスペース
Definition: EVCbasicDeclare.txt:9
FVCL_API FCOMPLEX Mul(FCOMPLEX c1, FCOMPLEX c2)
int INT
整数型(32ビット)
Definition: FvDefs.h:36
データオブジェクトの基本クラス
Definition: FvDataObject.h:20
ベクトルクラスのインターフェース
INT row
行数
Definition: FvMatrix.h:22
DOUBLE ** matrix
行列
Definition: FvMatrix.h:24
行列構造体
Definition: FvMatrix.h:20
double DOUBLE
倍精度浮動小数点型(64ビット)
Definition: FvDefs.h:62
行列クラス
Definition: FvMatrix.h:32
const INT Free
フリー形状
Definition: FvConversionDefs.h:25
FVCL_API CFvAngle operator-(DOUBLE value, const CFvAngle &src)
減算オペレータ
FVCL_API FCOMPLEX Add(FCOMPLEX c1, FCOMPLEX c2)
加算
unsigned int UINT
整数型(32ビット)[符号なし]
Definition: FvDefs.h:37
FVCL_API FCOMPLEX Sub(FCOMPLEX c1, FCOMPLEX c2)
減算
FVCL_API CFvVector operator*(const CFvVector &vector, const CFvMatrix &matrix)
乗算オペレータ(ベクトル*行列)
データオブジェクトの基本クラスのインターフェース
INT col
列数
Definition: FvMatrix.h:23
ベクトルクラス
Definition: FvVector.h:21

Documentation copyright © 2007 FAST Corporation. [B-001864]
Generated on 2023年11月02日(木) 10時12分53秒 for WIL説明書(C++) by doxygen 1.8.11