ADMB Documentation  11.5.3260
 All Classes Files Functions Variables Typedefs Friends Defines
d3arr2a.cpp
Go to the documentation of this file.
00001 
00006 #include "fvar.hpp"
00007 #include <cassert>
00008 
00012 d3_array log(const d3_array& m)
00013 {
00014   d3_array ret;
00015   ret.allocate(m);
00016   for (int i = ret.slicemin(); i <= ret.slicemax(); ++i)
00017   {
00018     ret(i) = log(m(i));
00019   }
00020   return ret;
00021 }
00022 
00027 d3_array exp(const d3_array& m)
00028    {
00029      d3_array tmp;
00030      tmp.allocate(m);
00031      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00032      {
00033        tmp(i)=exp(m(i));
00034      }
00035      return tmp;
00036    }
00037 
00042 d3_array sin(const d3_array& m)
00043    {
00044      d3_array tmp;
00045      tmp.allocate(m);
00046      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00047      {
00048        tmp(i)=sin(m(i));
00049      }
00050      return tmp;
00051    }
00052 
00057 d3_array cos(const d3_array& m)
00058    {
00059      d3_array tmp;
00060      tmp.allocate(m);
00061      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00062      {
00063        tmp(i)=cos(m(i));
00064      }
00065      return tmp;
00066    }
00067 
00072 d3_array tan(const d3_array& m)
00073    {
00074      d3_array tmp;
00075      tmp.allocate(m);
00076      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00077      {
00078        tmp(i)=tan(m(i));
00079      }
00080      return tmp;
00081    }
00082 
00087 d3_array elem_prod(const d3_array& m1, const d3_array& m2)
00088    {
00089      d3_array tmp;
00090      tmp.allocate(m1);
00091      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00092      {
00093        tmp(i)=elem_prod(m1(i),m2(i));
00094      }
00095      return tmp;
00096    }
00097 
00102 d3_array elem_div(const d3_array& m1, const d3_array& m2)
00103    {
00104      d3_array tmp;
00105      tmp.allocate(m1);
00106      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00107      {
00108        tmp(i)=elem_div(m1(i),m2(i));
00109      }
00110      return tmp;
00111    }
00112 
00117 d3_array operator+(const d3_array& m1, const d3_array& m2)
00118    {
00119      d3_array tmp;
00120      tmp.allocate(m1);
00121      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00122      {
00123        tmp(i)=m1(i)+m2(i);
00124      }
00125      return tmp;
00126    }
00127 
00132 d3_array operator-(const d3_array& m1, const d3_array& m2)
00133    {
00134      d3_array tmp;
00135      tmp.allocate(m1);
00136      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00137      {
00138        tmp(i)=m1(i)-m2(i);
00139      }
00140      return tmp;
00141    }
00142 
00147 double norm(const d3_array& m)
00148     {
00149       double tmp=0.0;
00150       for (int k=m.slicemin();k<=m.slicemax();k++)
00151       {
00152         tmp+=norm2(m(k));
00153       }
00154       tmp=sqrt(tmp);
00155       return tmp;
00156     }
00157 
00162 double norm2(const d3_array& m)
00163     {
00164       double tmp=0.0;
00165       for (int k=m.slicemin();k<=m.slicemax();k++)
00166       {
00167          tmp+=norm2(m(k));
00168       }
00169       return tmp;
00170     }
00171 double sumsq(const d3_array& m) { return(norm2(m)); }
00172 
00177 d3_array operator+(double d, const d3_array& m2)
00178    {
00179      d3_array tmp;
00180      tmp.allocate(m2);
00181      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00182      {
00183        tmp(i)=d+m2(i);
00184      }
00185      return tmp;
00186    }
00187 
00192 d3_array operator-( double d,const d3_array& m2)
00193    {
00194      d3_array tmp;
00195      tmp.allocate(m2);
00196      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00197      {
00198        tmp(i)=d-m2(i);
00199      }
00200      return tmp;
00201    }
00202 
00207 d3_array operator+(const d3_array& m1, double d)
00208    {
00209      d3_array tmp;
00210      tmp.allocate(m1);
00211      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00212      {
00213        tmp(i)=m1(i)+d;
00214      }
00215      return tmp;
00216    }
00217 
00222 d3_array operator-(const d3_array& m1, double d)
00223    {
00224      d3_array tmp;
00225      tmp.allocate(m1);
00226      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00227      {
00228        tmp(i)=m1(i)-d;
00229      }
00230      return tmp;
00231    }
00232 
00237 d3_array operator*(const d3_array& m1, double d)
00238    {
00239      d3_array tmp;
00240      tmp.allocate(m1);
00241      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00242      {
00243        tmp(i)=m1(i)*d;
00244      }
00245      return tmp;
00246    }
00247 
00252 d3_array operator*( double d, const d3_array& m2)
00253    {
00254      d3_array tmp;
00255      tmp.allocate(m2);
00256      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00257      {
00258        tmp(i)=d*m2(i);
00259      }
00260      return tmp;
00261    }