Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00011 #include "fvar.hpp"
00012
00017 dvector operator*(const dvector& x, const dmatrix& m)
00018 {
00019 #ifdef DIAG
00020 if( heapcheck() == _HEAPCORRUPT )
00021 {
00022 if (ad_printf)
00023 (*ad_printf)( "Entering dvector * dvec dmat is corrupted.\n" );
00024 }
00025 else
00026 {
00027 if (ad_printf)
00028 (*ad_printf)( "Entering dvector * dvec dmat Heap is OK.\n" );
00029 }
00030 #endif
00031
00032 if (x.indexmin() != m.rowmin() || x.indexmax() != m.rowmax())
00033 {
00034 cerr << " Incompatible array bounds in "
00035 "dvector operator * (const dvector& x,const dmatrix& m)\n";
00036 ad_exit(21);
00037 }
00038 dvector tmp(m.colmin(),m.colmax());
00039
00040 for (int j=m.colmin(); j<=m.colmax(); j++)
00041 {
00042 tmp[j]=0;
00043 for (int i=x.indexmin(); i<=x.indexmax(); i++)
00044 {
00045 tmp[j]+=x[i]*m[i][j];
00046 }
00047 }
00048 #ifdef DIAG
00049 if( heapcheck() == _HEAPCORRUPT )
00050 {
00051 if (ad_printf)
00052 (*ad_printf)( "Leaving dvector * dvec dmat is corrupted.\n" );
00053 }
00054 else
00055 {
00056 if (ad_printf)
00057 (*ad_printf)( "Leaving dvector * dvec dmat Heap is OK.\n" );
00058 }
00059 #endif
00060 return(tmp);
00061 }
00062
00067 dvector operator*(const dmatrix& m, const dvector& x)
00068 {
00069 #ifdef DIAG
00070 if( heapcheck() == _HEAPCORRUPT )
00071 {
00072 if (ad_printf)
00073 (*ad_printf)( "Entering dvector * dmat dvec is corrupted.\n" );
00074 }
00075 else
00076 {
00077 if (ad_printf)
00078 (*ad_printf)( "Entering dvector * dmat dvec Heap is OK.\n" );
00079 }
00080 #endif
00081 if (x.indexmin() != m.colmin() || x.indexmax() != m.colmax())
00082 {
00083 cerr << " Incompatible array bounds in "
00084 "dvector operator * (const dvector& x, const dmatrix& m)\n";
00085 ad_exit(21);
00086 }
00087
00088 dvector tmp(m.rowmin(),m.rowmax());
00089
00090 for (int i=m.rowmin(); i<=m.rowmax(); i++)
00091 {
00092 tmp[i]=0;
00093 for (int j=x.indexmin(); j<=x.indexmax(); j++)
00094 {
00095 tmp[i]+=m[i][j]*x[j];
00096 }
00097 }
00098 #ifdef DIAG
00099 if( heapcheck() == _HEAPCORRUPT )
00100 {
00101 if (ad_printf)
00102 (*ad_printf)( "Leaving dvector * dmat dvec is corrupted.\n" );
00103 }
00104 else
00105 {
00106 if (ad_printf)
00107 (*ad_printf)( "Leaving dvector * dmat dvec Heap is OK.\n" );
00108 }
00109 #endif
00110 return(tmp);
00111 }
00112
00117 dmatrix operator * (const dmatrix& m1,const dmatrix& m2 )
00118 {
00119 if (m1.colmin() != m2.rowmin() || m1.colmax() != m2.rowmax())
00120 {
00121 cerr << " Incompatible array bounds in "
00122 "dmatrix operator * (const dmatrix& x, const dmatrix& m)\n";
00123 ad_exit(21);
00124 }
00125 dmatrix tmp(m1.rowmin(),m1.rowmax(), m2.colmin(), m2.colmax());
00126 double sum;
00127 for (int j=m2.colmin(); j<=m2.colmax(); j++)
00128 {
00129 dvector m2col=column(m2,j);
00130 for (int i=m1.rowmin(); i<=m1.rowmax(); i++)
00131 {
00132
00133 sum=m1.elem(i) * m2col;
00134 tmp.elem(i,j)=sum;
00135 }
00136 }
00137 return(tmp);
00138 }
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162
00163
00164
00165
00166
00167
00168
00169
00170
00171
00172
00173
00174
00175
00176
00177
00178
00179
00180
00181