ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
d3arr2a.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id$
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California
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    }