ADMB Documentation  11.6rc.3352
 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 }
00025 d3_array exp(const d3_array& m)
00026 {
00027   d3_array ret;
00028   ret.allocate(m);
00029   for (int i = ret.slicemin(); i <= ret.slicemax(); ++i)
00030   {
00031     ret(i) = exp(m(i));
00032   }
00033   return ret;
00034 }
00035 
00040 d3_array sin(const d3_array& m)
00041    {
00042      d3_array tmp;
00043      tmp.allocate(m);
00044      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00045      {
00046        tmp(i)=sin(m(i));
00047      }
00048      return tmp;
00049    }
00050 
00055 d3_array cos(const d3_array& m)
00056    {
00057      d3_array tmp;
00058      tmp.allocate(m);
00059      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00060      {
00061        tmp(i)=cos(m(i));
00062      }
00063      return tmp;
00064    }
00065 
00070 d3_array tan(const d3_array& m)
00071    {
00072      d3_array tmp;
00073      tmp.allocate(m);
00074      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00075      {
00076        tmp(i)=tan(m(i));
00077      }
00078      return tmp;
00079    }
00080 
00085 d3_array elem_prod(const d3_array& m1, const d3_array& m2)
00086    {
00087      d3_array tmp;
00088      tmp.allocate(m1);
00089      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00090      {
00091        tmp(i)=elem_prod(m1(i),m2(i));
00092      }
00093      return tmp;
00094    }
00095 
00100 d3_array elem_div(const d3_array& m1, const d3_array& m2)
00101    {
00102      d3_array tmp;
00103      tmp.allocate(m1);
00104      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00105      {
00106        tmp(i)=elem_div(m1(i),m2(i));
00107      }
00108      return tmp;
00109    }
00110 
00115 d3_array operator+(const d3_array& m1, const d3_array& m2)
00116    {
00117      d3_array tmp;
00118      tmp.allocate(m1);
00119      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00120      {
00121        tmp(i)=m1(i)+m2(i);
00122      }
00123      return tmp;
00124    }
00125 
00130 d3_array operator-(const d3_array& m1, const d3_array& m2)
00131    {
00132      d3_array tmp;
00133      tmp.allocate(m1);
00134      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00135      {
00136        tmp(i)=m1(i)-m2(i);
00137      }
00138      return tmp;
00139    }
00140 
00145 double norm(const d3_array& m)
00146     {
00147       double tmp=0.0;
00148       for (int k=m.slicemin();k<=m.slicemax();k++)
00149       {
00150         tmp+=norm2(m(k));
00151       }
00152       tmp=sqrt(tmp);
00153       return tmp;
00154     }
00155 
00160 double norm2(const d3_array& m)
00161     {
00162       double tmp=0.0;
00163       for (int k=m.slicemin();k<=m.slicemax();k++)
00164       {
00165          tmp+=norm2(m(k));
00166       }
00167       return tmp;
00168     }
00169 double sumsq(const d3_array& m) { return(norm2(m)); }
00170 
00175 d3_array operator+(double d, const d3_array& m2)
00176    {
00177      d3_array tmp;
00178      tmp.allocate(m2);
00179      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00180      {
00181        tmp(i)=d+m2(i);
00182      }
00183      return tmp;
00184    }
00185 
00190 d3_array operator-( double d,const d3_array& m2)
00191    {
00192      d3_array tmp;
00193      tmp.allocate(m2);
00194      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00195      {
00196        tmp(i)=d-m2(i);
00197      }
00198      return tmp;
00199    }
00200 
00205 d3_array operator+(const d3_array& m1, double d)
00206    {
00207      d3_array tmp;
00208      tmp.allocate(m1);
00209      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00210      {
00211        tmp(i)=m1(i)+d;
00212      }
00213      return tmp;
00214    }
00215 
00220 d3_array operator-(const d3_array& m1, double d)
00221    {
00222      d3_array tmp;
00223      tmp.allocate(m1);
00224      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00225      {
00226        tmp(i)=m1(i)-d;
00227      }
00228      return tmp;
00229    }
00230 
00235 d3_array operator*(const d3_array& m1, double d)
00236    {
00237      d3_array tmp;
00238      tmp.allocate(m1);
00239      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00240      {
00241        tmp(i)=m1(i)*d;
00242      }
00243      return tmp;
00244    }
00245 
00250 d3_array operator*( double d, const d3_array& m2)
00251    {
00252      d3_array tmp;
00253      tmp.allocate(m2);
00254      for (int i=tmp.slicemin();i<=tmp.slicemax();i++)
00255      {
00256        tmp(i)=d*m2(i);
00257      }
00258      return tmp;
00259    }