ADMB Documentation  11.5.3197
 All Classes Files Functions Variables Typedefs Friends Defines
fvar_m27.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 // file fvar.cpp
00012 // constructors, destructors and misc functions involving class prevariable
00013 
00014 #include "fvar.hpp"
00015 
00016 #ifdef __TURBOC__
00017   #pragma hdrstop
00018   #include <iostream.h>
00019 #endif
00020 
00021 #ifdef __ZTC__
00022   #include <iostream.hpp>
00023 #endif
00024 
00025 
00026 #include <stdio.h>
00027 #ifndef __SUN__
00028 #endif
00029 #include <math.h>
00030 
00031 // dvar_matrix mathematical functions
00032 dvar_matrix exp(const dvar_matrix& m);
00033 dvar_matrix log(const dvar_matrix& m);
00034 dvar_matrix sin(const dvar_matrix& m);
00035 dvar_matrix cos(const dvar_matrix& m);
00036 dvar_matrix tan(const dvar_matrix& m);
00037 dvar_matrix pow(const dvar_matrix& m, const double e);
00038 dvar_matrix pow(const dvar_matrix& m, const prevariable& e);
00039 dvar_matrix pow(const dmatrix& m, const prevariable& e);
00040 dvar_matrix pow(const dvar_matrix& m, int e);
00041 dvar_matrix elem_prod(const dvar_matrix& m, const dvar_matrix& m2);
00042 dvar_matrix elem_prod(const dvar_matrix& m, const dmatrix& m2);
00043 dvar_matrix elem_prod(const dmatrix& m, const dvar_matrix& m2);
00044 dvar_matrix elem_div(const dvar_matrix& m, const dvar_matrix& m2);
00045 dvar_matrix elem_div(const dvar_matrix& m, const dmatrix& m2);
00046 dvar_matrix elem_div(const dmatrix& m, const dvar_matrix& m2);
00047 // end of dvar_vector mathematical functions
00048 
00049 /*  "template form for editor
00050 dvar_matrix XXX(const dvar_matrix& m)
00051 {
00052   ivector cmin(m.rowmin(),m.rowmax());
00053   ivector cmax(m.rowmin(),m.rowmax());
00054   for (int i=m.rowmin();i<=m.rowmax();i++)
00055   {
00056     cmin(i)=m(i).indexmin();
00057     cmax(i)=m(i).indexmax();
00058   }
00059   dvar_matrix tmp(m.rowmin(),m.rowmax(),cmin,cmax);
00060   for (i=m.rowmin();i<=m.rowmax();i++)
00061   {
00062     tmp(i)=XXX(m(i));
00063   }
00064   return tmp;
00065 }
00066 
00067 */
00068 
00073 dvar_matrix use_shape(const dvar_matrix& m)
00074 {
00075   ivector cmin(m.rowmin(),m.rowmax());
00076   ivector cmax(m.rowmin(),m.rowmax());
00077   for (int i=m.rowmin();i<=m.rowmax();i++)
00078   {
00079     cmin(i)=m(i).indexmin();
00080     cmax(i)=m(i).indexmax();
00081   }
00082   dvar_matrix tmp(m.rowmin(),m.rowmax(),cmin,cmax);
00083   return tmp;
00084 }
00085 
00090 dmatrix use_shape(const dmatrix& m)
00091 {
00092   ivector cmin(m.rowmin(),m.rowmax());
00093   ivector cmax(m.rowmin(),m.rowmax());
00094   for (int i=m.rowmin();i<=m.rowmax();i++)
00095   {
00096     cmin(i)=m(i).indexmin();
00097     cmax(i)=m(i).indexmax();
00098   }
00099   dmatrix tmp(m.rowmin(),m.rowmax(),cmin,cmax);
00100   return tmp;
00101 }
00102 
00107 dvar_matrix pow(const dvar_matrix& m, int e)
00108 {
00109   dvar_matrix tmp=use_shape(m);
00110   for (int i=m.rowmin();i<=m.rowmax();i++)
00111   {
00112     tmp(i)=pow(m(i),e);
00113   }
00114   return tmp;
00115 }
00116 
00121 dvar_matrix pow(const dmatrix& m, const prevariable& e)
00122 {
00123   dvar_matrix tmp=use_shape(m);
00124   for (int i=m.rowmin();i<=m.rowmax();i++)
00125   {
00126     tmp(i)=pow(m(i),e);
00127   }
00128   return tmp;
00129 }
00130 
00135 dvar_matrix pow(const dvar_matrix& m, const prevariable& e)
00136 {
00137   dvar_matrix tmp=use_shape(m);
00138   for (int i=m.rowmin();i<=m.rowmax();i++)
00139   {
00140     tmp(i)=pow(m(i),e);
00141   }
00142   return tmp;
00143 }
00144 
00149 dvar_matrix pow(const dvar_matrix& m, const double e)
00150 {
00151   dvar_matrix tmp=use_shape(m);
00152   for (int i=m.rowmin();i<=m.rowmax();i++)
00153   {
00154     tmp(i)=pow(m(i),e);
00155   }
00156   return tmp;
00157 }
00158 
00163 dvar_matrix tan(const dvar_matrix& m)
00164 {
00165   dvar_matrix tmp=use_shape(m);
00166   for (int i=m.rowmin();i<=m.rowmax();i++)
00167   {
00168     tmp(i)=tan(m(i));
00169   }
00170   return tmp;
00171 }
00172 
00177 dvar_matrix cos(const dvar_matrix& m)
00178 {
00179   dvar_matrix tmp=use_shape(m);
00180   for (int i=m.rowmin();i<=m.rowmax();i++)
00181   {
00182     tmp(i)=cos(m(i));
00183   }
00184   return tmp;
00185 }
00186 
00191 dvar_matrix sin(const dvar_matrix& m)
00192 {
00193   dvar_matrix tmp=use_shape(m);
00194   for (int i=m.rowmin();i<=m.rowmax();i++)
00195   {
00196     tmp(i)=sin(m(i));
00197   }
00198   return tmp;
00199 }
00200 
00205 dvar_matrix log(const dvar_matrix& m)
00206 {
00207   dvar_matrix tmp=use_shape(m);
00208   for (int i=m.rowmin();i<=m.rowmax();i++)
00209   {
00210     tmp(i)=log(m(i));
00211   }
00212   return tmp;
00213 }
00214 
00219 dvar_matrix sqrt(const dvar_matrix& m)
00220 {
00221   dvar_matrix tmp=use_shape(m);
00222   for (int i=m.rowmin();i<=m.rowmax();i++)
00223   {
00224     tmp(i)=sqrt(m(i));
00225   }
00226   return tmp;
00227 }
00228 
00233 dvar_matrix sqr(const dvar_matrix& m)
00234 {
00235   dvar_matrix tmp=use_shape(m);
00236   for (int i=m.rowmin();i<=m.rowmax();i++)
00237   {
00238     tmp(i)=sqr(m(i));
00239   }
00240   return tmp;
00241 }
00242 
00247 dvar_matrix exp(const dvar_matrix& m)
00248 {
00249   dvar_matrix tmp=use_shape(m);
00250   for (int i=m.rowmin();i<=m.rowmax();i++)
00251   {
00252     tmp(i)=exp(m(i));
00253   }
00254   return tmp;
00255 }
00256 
00261 dvar_matrix elem_div(const dvar_matrix& m, const dvar_matrix& m2)
00262 {
00263   dvar_matrix tmp=use_shape(m);
00264   for (int i=m.rowmin();i<=m.rowmax();i++)
00265   {
00266     tmp(i)=elem_div(m(i),m2(i));
00267   }
00268   return tmp;
00269 }
00270 
00275 dvar_matrix elem_div(const dmatrix& m,const dvar_matrix& m2)
00276 {
00277   dvar_matrix tmp=use_shape(m);
00278   for (int i=m.rowmin();i<=m.rowmax();i++)
00279   {
00280     tmp(i)=elem_div(m(i),m2(i));
00281   }
00282   return tmp;
00283 }
00284 
00289 dvar_matrix elem_div(const dvar_matrix& m, const dmatrix& m2)
00290 {
00291   dvar_matrix tmp=use_shape(m);
00292   for (int i=m.rowmin();i<=m.rowmax();i++)
00293   {
00294     tmp(i)=elem_div(m(i),m2(i));
00295   }
00296   return tmp;
00297 }
00298 
00303 dvar_matrix elem_prod(const dvar_matrix& m, const dvar_matrix& m2)
00304 {
00305   //dvar_matrix tmp=use_shape(m);
00306   dvar_matrix tmp(m.indexmin(),m.indexmax());
00307   for (int i=m.rowmin();i<=m.rowmax();i++)
00308   {
00309     tmp(i)=elem_prod(m(i),m2(i));
00310   }
00311   return tmp;
00312 }
00313 
00318 dvar_matrix elem_prod(const dmatrix& m, const dvar_matrix& m2)
00319 {
00320   dvar_matrix tmp=use_shape(m);
00321   for (int i=m.rowmin();i<=m.rowmax();i++)
00322   {
00323     tmp(i)=elem_prod(m(i),m2(i));
00324   }
00325   return tmp;
00326 }
00327 
00332 dvar_matrix elem_prod(const dvar_matrix& m, const dmatrix& m2)
00333 {
00334   dvar_matrix tmp=use_shape(m);
00335   for (int i=m.rowmin();i<=m.rowmax();i++)
00336   {
00337     tmp(i)=elem_prod(m(i),m2(i));
00338   }
00339   return tmp;
00340 }
00341 
00346 dvar_matrix operator+(const double x, const dvar_matrix& m)
00347 {
00348   dvar_matrix tmp=use_shape(m);
00349   for (int i=m.rowmin();i<=m.rowmax();i++)
00350   {
00351     tmp(i)=x+m(i);
00352   }
00353   return tmp;
00354 }
00355 
00360 dvar_matrix operator*(const prevariable& x, const dvar_matrix& m)
00361 {
00362   dvar_matrix tmp=use_shape(m);
00363   for (int i=m.rowmin();i<=m.rowmax();i++)
00364   {
00365     tmp(i)=x*m(i);
00366   }
00367   return tmp;
00368 }
00369 
00374 dvar_matrix operator+(const dvar_matrix& m, const double x)
00375 {
00376   dvar_matrix tmp=use_shape(m);
00377   for (int i=m.rowmin();i<=m.rowmax();i++)
00378   {
00379     tmp(i)=m(i)+x;
00380   }
00381   return tmp;
00382 }
00383 
00388 dvar_matrix operator+(const dvariable& x, const dvar_matrix& m)
00389 {
00390   dvar_matrix tmp=use_shape(m);
00391   for (int i=m.rowmin();i<=m.rowmax();i++)
00392   {
00393     tmp(i)=x+m(i);
00394   }
00395   return tmp;
00396 }
00397 
00402 dvar_matrix operator+(const dvar_matrix& m, const dvariable& x)
00403 {
00404   dvar_matrix tmp=use_shape(m);
00405   for (int i=m.rowmin();i<=m.rowmax();i++)
00406   {
00407     tmp(i)=m(i)+x;
00408   }
00409   return tmp;
00410 }
00411 
00416 dvar_matrix operator*(const dvar_matrix& m, const prevariable& x)
00417 {
00418   dvar_matrix tmp=use_shape(m);
00419   for (int i=m.rowmin();i<=m.rowmax();i++)
00420   {
00421     tmp(i)=m(i)*x;
00422   }
00423   return tmp;
00424 }
00425 
00430 dvar_matrix operator-(const dvar_matrix& m, const double x)
00431 {
00432   dvar_matrix tmp=use_shape(m);
00433   double t=-x;
00434   for (int i=m.rowmin();i<=m.rowmax();i++)
00435   {
00436     tmp(i)=m(i)+t;
00437   }
00438   return tmp;
00439 }
00440 
00445 dvar_matrix operator-(const double x, const dvar_matrix& m)
00446 {
00447   dvar_matrix tmp=use_shape(m);
00448   for (int i=m.rowmin();i<=m.rowmax();i++)
00449   {
00450     tmp(i)=x-m(i);
00451   }
00452   return tmp;
00453 }
00454 
00459 dvar_matrix operator-(const dvar_matrix& m, const dvariable& x)
00460 {
00461   dvar_matrix tmp=use_shape(m);
00462   for (int i=m.rowmin();i<=m.rowmax();i++)
00463   {
00464     tmp(i)=m(i)-x;
00465   }
00466   return tmp;
00467 }
00468 
00473 dvar_matrix operator-(const dvariable& x, const dvar_matrix& m)
00474 {
00475   dvar_matrix tmp=use_shape(m);
00476   for (int i=m.rowmin();i<=m.rowmax();i++)
00477   {
00478     tmp(i)=x-m(i);
00479   }
00480   return tmp;
00481 }