Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00011 #include "fvar.hpp"
00012
00017 d3_array log(const d3_array& m)
00018 {
00019 d3_array tmp;
00020 tmp.allocate(m);
00021 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00022 {
00023 tmp(i)=log(m(i));
00024 }
00025 return tmp;
00026 }
00027
00032 d3_array exp(const d3_array& m)
00033 {
00034 d3_array tmp;
00035 tmp.allocate(m);
00036 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00037 {
00038 tmp(i)=exp(m(i));
00039 }
00040 return tmp;
00041 }
00042
00047 d3_array sin(const d3_array& m)
00048 {
00049 d3_array tmp;
00050 tmp.allocate(m);
00051 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00052 {
00053 tmp(i)=sin(m(i));
00054 }
00055 return tmp;
00056 }
00057
00062 d3_array cos(const d3_array& m)
00063 {
00064 d3_array tmp;
00065 tmp.allocate(m);
00066 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00067 {
00068 tmp(i)=cos(m(i));
00069 }
00070 return tmp;
00071 }
00072
00077 d3_array tan(const d3_array& m)
00078 {
00079 d3_array tmp;
00080 tmp.allocate(m);
00081 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00082 {
00083 tmp(i)=tan(m(i));
00084 }
00085 return tmp;
00086 }
00087
00092 d3_array elem_prod(const d3_array& m1, const d3_array& m2)
00093 {
00094 d3_array tmp;
00095 tmp.allocate(m1);
00096 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00097 {
00098 tmp(i)=elem_prod(m1(i),m2(i));
00099 }
00100 return tmp;
00101 }
00102
00107 d3_array elem_div(const d3_array& m1, const d3_array& m2)
00108 {
00109 d3_array tmp;
00110 tmp.allocate(m1);
00111 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00112 {
00113 tmp(i)=elem_div(m1(i),m2(i));
00114 }
00115 return tmp;
00116 }
00117
00122 d3_array operator+(const d3_array& m1, const d3_array& m2)
00123 {
00124 d3_array tmp;
00125 tmp.allocate(m1);
00126 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00127 {
00128 tmp(i)=m1(i)+m2(i);
00129 }
00130 return tmp;
00131 }
00132
00137 d3_array operator-(const d3_array& m1, const d3_array& m2)
00138 {
00139 d3_array tmp;
00140 tmp.allocate(m1);
00141 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00142 {
00143 tmp(i)=m1(i)-m2(i);
00144 }
00145 return tmp;
00146 }
00147
00152 double norm(const d3_array& m)
00153 {
00154 double tmp=0.0;
00155 for (int k=m.slicemin();k<=m.slicemax();k++)
00156 {
00157 tmp+=norm2(m(k));
00158 }
00159 tmp=sqrt(tmp);
00160 return tmp;
00161 }
00162
00167 double norm2(const d3_array& m)
00168 {
00169 double tmp=0.0;
00170 for (int k=m.slicemin();k<=m.slicemax();k++)
00171 {
00172 tmp+=norm2(m(k));
00173 }
00174 return tmp;
00175 }
00176 double sumsq(const d3_array& m) { return(norm2(m)); }
00177
00182 d3_array operator+(double d, const d3_array& m2)
00183 {
00184 d3_array tmp;
00185 tmp.allocate(m2);
00186 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00187 {
00188 tmp(i)=d+m2(i);
00189 }
00190 return tmp;
00191 }
00192
00197 d3_array operator-( double d,const d3_array& m2)
00198 {
00199 d3_array tmp;
00200 tmp.allocate(m2);
00201 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00202 {
00203 tmp(i)=d-m2(i);
00204 }
00205 return tmp;
00206 }
00207
00212 d3_array operator+(const d3_array& m1, double d)
00213 {
00214 d3_array tmp;
00215 tmp.allocate(m1);
00216 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00217 {
00218 tmp(i)=m1(i)+d;
00219 }
00220 return tmp;
00221 }
00222
00227 d3_array operator-(const d3_array& m1, double d)
00228 {
00229 d3_array tmp;
00230 tmp.allocate(m1);
00231 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00232 {
00233 tmp(i)=m1(i)-d;
00234 }
00235 return tmp;
00236 }
00237
00242 d3_array operator*(const d3_array& m1, double d)
00243 {
00244 d3_array tmp;
00245 tmp.allocate(m1);
00246 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00247 {
00248 tmp(i)=m1(i)*d;
00249 }
00250 return tmp;
00251 }
00252
00257 d3_array operator*( double d, const d3_array& m2)
00258 {
00259 d3_array tmp;
00260 tmp.allocate(m2);
00261 for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00262 {
00263 tmp(i)=d*m2(i);
00264 }
00265 return tmp;
00266 }