ADMB Documentation  11.1.1015
 All Classes Files Functions Variables Typedefs Friends Defines
fvar_a29.cpp
Go to the documentation of this file.
00001 /*
00002  * $Id: fvar_a29.cpp 542 2012-07-10 21:04:06Z johnoel $
00003  *
00004  * Author: David Fournier
00005  * Copyright (c) 2008-2012 Regents of the University of California 
00006  */
00011 #include "fvar.hpp"
00012 
00013 /*
00014 //  "template" for precompiled derivative code
00015  //   change XXX to function name and YYY to derivative function name
00016 void DF_dvXXX(void);
00017 dvar_vector XXX(const dvar_vector& v1)
00018 {
00019   //dvector cv1=value(v1);
00020   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00021   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00022   {
00023     vtmp.elem_value(i)=XXX(v1.elem_value(i));
00024   }
00025 
00026   save_identifier_string("ddd");
00027   v1.save_dvar_vector_value();
00028   v1.save_dvar_vector_position();
00029   vtmp.save_dvar_vector_position();
00030   save_identifier_string("eee");
00031   gradient_structure::GRAD_STACK1->
00032             set_gradient_stack(DF_dvXXX);
00033   return vtmp;
00034 }
00035 
00036 void DF_dvXXX(void)
00037 {
00038   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00039   verify_identifier_string("eee");
00040   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00041   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00042   dvar_vector_position v1pos=restore_dvar_vector_position();
00043   dvector v1=restore_dvar_vector_value(v1pos);
00044   verify_identifier_string("ddd");
00045   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00046   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00047   {
00048     //vtmp.elem(i)=sin(value(v1.elem(i))));
00049     dfv1(i)=dfvtmp(i)*YYY(v1.elem(i));
00050   }
00051   dfv1.save_dvector_derivatives(v1pos);
00052   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00053 }
00054 
00055 */
00056 
00057 
00058 void DF_dvsin(void);
00059 
00064 dvar_vector sin(const dvar_vector& v1)
00065 {
00066   //dvector cv1=value(v1);
00067   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00068   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00069   {
00070     vtmp.elem_value(i)=sin(v1.elem_value(i));
00071   }
00072 
00073   save_identifier_string("ddd");
00074   v1.save_dvar_vector_value();
00075   v1.save_dvar_vector_position();
00076   vtmp.save_dvar_vector_position();
00077   save_identifier_string("eee");
00078   gradient_structure::GRAD_STACK1->
00079             set_gradient_stack(DF_dvsin);
00080   return vtmp;
00081 }
00082 
00087 void DF_dvsin(void)
00088 {
00089   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00090   verify_identifier_string("eee");
00091   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00092   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00093   dvar_vector_position v1pos=restore_dvar_vector_position();
00094   dvector v1=restore_dvar_vector_value(v1pos);
00095   verify_identifier_string("ddd");
00096   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00097   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00098   {
00099     //vtmp.elem(i)=sin(value(v1.elem(i))));
00100     dfv1(i)=dfvtmp(i)*cos(v1.elem(i));
00101   }
00102   dfv1.save_dvector_derivatives(v1pos);
00103   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00104 }
00105 
00106 void DF_dvexp(void);
00107 
00112 dvar_vector exp(const dvar_vector& v1)
00113 {
00114   //dvector cv1=value(v1);
00115   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00116   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00117   {
00118     vtmp.elem_value(i)=exp(v1.elem_value(i));
00119   }
00120 
00121   save_identifier_string("ddd");
00122   v1.save_dvar_vector_position();
00123   vtmp.save_dvar_vector_value();
00124   vtmp.save_dvar_vector_position();
00125   save_identifier_string("hee");
00126   gradient_structure::GRAD_STACK1->
00127             set_gradient_stack(DF_dvexp);
00128   return vtmp;
00129 }
00130 
00135 void DF_dvexp(void)
00136 {
00137   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00138   verify_identifier_string("hee");
00139   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00140   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00141   dvector vtmp=restore_dvar_vector_value(tmp_pos);
00142   dvar_vector_position v1pos=restore_dvar_vector_position();
00143   verify_identifier_string("ddd");
00144   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00145   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00146   {
00147     //vtmp.elem(i)=sin(value(v1.elem(i))));
00148     dfv1(i)=dfvtmp(i)*vtmp.elem(i);
00149   }
00150   dfv1.save_dvector_derivatives(v1pos);
00151   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00152 }
00153 
00154 
00155 void DF_dvcos(void);
00156 
00161 dvar_vector cos(const dvar_vector& v1)
00162 {
00163   //dvector cv1=value(v1);
00164   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00165   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00166   {
00167     vtmp.elem_value(i)=cos(v1.elem_value(i));
00168   }
00169 
00170   save_identifier_string("ddd");
00171   v1.save_dvar_vector_value();
00172   v1.save_dvar_vector_position();
00173   vtmp.save_dvar_vector_position();
00174   save_identifier_string("cee");
00175   gradient_structure::GRAD_STACK1->
00176             set_gradient_stack(DF_dvcos);
00177   return vtmp;
00178 }
00179 
00184 void DF_dvcos(void)
00185 {
00186   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00187   verify_identifier_string("cee");
00188   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00189   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00190   dvar_vector_position v1pos=restore_dvar_vector_position();
00191   dvector v1=restore_dvar_vector_value(v1pos);
00192   verify_identifier_string("ddd");
00193   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00194   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00195   {
00196     //vtmp.elem(i)=sin(value(v1.elem(i))));
00197     dfv1(i)=-dfvtmp(i)*sin(v1.elem(i));
00198   }
00199   dfv1.save_dvector_derivatives(v1pos);
00200   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00201 }
00202 
00203 void DF_dvlog(void);
00204 
00209 dvar_vector log(const dvar_vector& v1)
00210 {
00211   //dvector cv1=value(v1);
00212   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00213   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00214   {
00215     vtmp.elem_value(i)=log(v1.elem_value(i));
00216   }
00217 
00218   save_identifier_string("cdd");
00219   v1.save_dvar_vector_value();
00220   v1.save_dvar_vector_position();
00221   vtmp.save_dvar_vector_position();
00222   save_identifier_string("eee");
00223   gradient_structure::GRAD_STACK1->
00224             set_gradient_stack(DF_dvlog);
00225   return vtmp;
00226 }
00227 
00228 int ad_debug_arithmetic=1;
00229 
00234 void DF_dvlog(void)
00235 {
00236   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00237   verify_identifier_string("eee");
00238   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00239   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00240   dvar_vector_position v1pos=restore_dvar_vector_position();
00241   dvector v1=restore_dvar_vector_value(v1pos);
00242   verify_identifier_string("cdd");
00243   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00244   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00245   {
00246 #    ifndef OPT_LIB
00247      if (ad_debug_arithmetic==1)
00248       if (v1.elem(i)==0.0 || fabs(v1.elem(i))<1.e-150 ||
00249         dfvtmp(i) > 1.e+150)
00250       {
00251         cerr << "Possible overflow in DF_dvlog" << endl;
00252       }
00253       
00254 #    endif
00255     dfv1(i)=dfvtmp(i)/(v1.elem(i));
00256   }
00257   dfv1.save_dvector_derivatives(v1pos);
00258   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00259 }
00260 
00261 void DF_dvtan(void);
00262 
00267 dvar_vector tan(const dvar_vector& v1)
00268 {
00269   //dvector cv1=value(v1);
00270   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00271   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00272   {
00273     vtmp.elem_value(i)=tan(v1.elem_value(i));
00274   }
00275 
00276   save_identifier_string("ddd");
00277   v1.save_dvar_vector_value();
00278   v1.save_dvar_vector_position();
00279   vtmp.save_dvar_vector_position();
00280   save_identifier_string("xee");
00281   gradient_structure::GRAD_STACK1->
00282             set_gradient_stack(DF_dvtan);
00283   return vtmp;
00284 }
00285 
00290 void DF_dvtan(void)
00291 {
00292   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00293   verify_identifier_string("xee");
00294   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00295   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00296   dvar_vector_position v1pos=restore_dvar_vector_position();
00297   dvector v1=restore_dvar_vector_value(v1pos);
00298   verify_identifier_string("ddd");
00299   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00300   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00301   {
00302     //vtmp.elem(i)=tan(value(v1.elem(i))));
00303     dfv1(i)=dfvtmp(i)/pow(cos(v1.elem(i)),2);
00304   }
00305   dfv1.save_dvector_derivatives(v1pos);
00306   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00307 }
00308 
00309 void DF_dvatan(void);
00310 
00315 dvar_vector atan(const dvar_vector& v1)
00316 {
00317   //dvector cv1=value(v1);
00318   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00319   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00320   {
00321     vtmp.elem_value(i)=atan(v1.elem_value(i));
00322   }
00323 
00324   save_identifier_string("udd");
00325   v1.save_dvar_vector_value();
00326   v1.save_dvar_vector_position();
00327   vtmp.save_dvar_vector_position();
00328   save_identifier_string("eee");
00329   gradient_structure::GRAD_STACK1->
00330             set_gradient_stack(DF_dvatan);
00331   return vtmp;
00332 }
00333 
00338 void DF_dvatan(void)
00339 {
00340   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00341   verify_identifier_string("eee");
00342   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00343   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00344   dvar_vector_position v1pos=restore_dvar_vector_position();
00345   dvector v1=restore_dvar_vector_value(v1pos);
00346   verify_identifier_string("udd");
00347   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00348   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00349   {
00350     //vtmp.elem(i)=sin(value(v1.elem(i))));
00351     dfv1(i)=dfvtmp(i)/(1.+pow(v1.elem(i),2));
00352   }
00353   dfv1.save_dvector_derivatives(v1pos);
00354   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00355 }
00356 
00357 void DF_dvsqrt(void);
00358 
00363 dvar_vector sqrt(const dvar_vector& v1)
00364 {
00365   //dvector cv1=value(v1);
00366   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00367   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00368   {
00369     vtmp.elem_value(i)=sqrt(v1.elem_value(i));
00370   }
00371 
00372   save_identifier_string("ddd");
00373   v1.save_dvar_vector_value();
00374   v1.save_dvar_vector_position();
00375   vtmp.save_dvar_vector_position();
00376   save_identifier_string("eve");
00377   gradient_structure::GRAD_STACK1->
00378             set_gradient_stack(DF_dvsqrt);
00379   return vtmp;
00380 }
00381 
00386 dvar_vector sqr(const dvar_vector& v1)
00387 {
00388   //dvector cv1=value(v1);
00389   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00390   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00391   {
00392     vtmp.elem_value(i)=sqrt(v1.elem_value(i));
00393   }
00394 
00395   save_identifier_string("ddd");
00396   v1.save_dvar_vector_value();
00397   v1.save_dvar_vector_position();
00398   vtmp.save_dvar_vector_position();
00399   save_identifier_string("eve");
00400   gradient_structure::GRAD_STACK1->
00401             set_gradient_stack(DF_dvsqrt);
00402   return vtmp;
00403 }
00404 
00409 void DF_dvsqrt(void)
00410 {
00411   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00412   verify_identifier_string("eve");
00413   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00414   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00415   dvar_vector_position v1pos=restore_dvar_vector_position();
00416   dvector v1=restore_dvar_vector_value(v1pos);
00417   verify_identifier_string("ddd");
00418   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00419   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00420   {
00421     //vtmp.elem(i)=sin(value(v1.elem(i))));
00422     dfv1(i)=dfvtmp(i)/(2*sqrt(v1.elem(i)));
00423   }
00424   dfv1.save_dvector_derivatives(v1pos);
00425   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00426 }
00427 
00428 void DF_dvpow(void);
00429 
00434 dvar_vector pow(const dvar_vector& v1, CGNU_DOUBLE e)
00435 {
00436   //dvector cv1=value(v1);
00437   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00438   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00439   {
00440     vtmp.elem_value(i)=pow(v1.elem_value(i),e);
00441   }
00442 
00443   save_identifier_string("ddf");
00444   v1.save_dvar_vector_value();
00445   save_double_value(e);
00446   v1.save_dvar_vector_position();
00447   vtmp.save_dvar_vector_position();
00448   save_identifier_string("eef");
00449   gradient_structure::GRAD_STACK1->
00450             set_gradient_stack(DF_dvpow);
00451   return vtmp;
00452 }
00453 
00458 void DF_dvpow(void)
00459 {
00460   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00461   verify_identifier_string("eef");
00462   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00463   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00464   dvar_vector_position v1pos=restore_dvar_vector_position();
00465   double e=restore_double_value();
00466   dvector v1=restore_dvar_vector_value(v1pos);
00467   verify_identifier_string("ddf");
00468   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00469   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00470   {
00471     //vtmp.elem(i)=sin(value(v1.elem(i))));
00472     dfv1(i)=dfvtmp(i)*e*pow(v1.elem(i),e-1);
00473   }
00474   dfv1.save_dvector_derivatives(v1pos);
00475   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00476 }
00477 
00478 
00479 //  Don't have the functions for savinf and restoring
00480 //    prevariables as yet
00481 
00482 void DF_dvdvpow(void);
00483 
00488 dvar_vector pow(const dvar_vector& v1, const prevariable& e)
00489 {
00490   //dvector cv1=value(v1);
00491   double ce=value(e);
00492   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00493   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00494   {
00495     vtmp.elem_value(i)=pow(v1.elem_value(i),ce);
00496   }
00497 
00498   save_identifier_string("ddg");
00499   e.save_prevariable_value();
00500   e.save_prevariable_position();
00501   v1.save_dvar_vector_value();
00502   v1.save_dvar_vector_position();
00503   vtmp.save_dvar_vector_position();
00504   save_identifier_string("eeg");
00505   gradient_structure::GRAD_STACK1->
00506             set_gradient_stack(DF_dvdvpow);
00507   return vtmp;
00508 }
00509 
00514 void DF_dvdvpow(void)
00515 {
00516   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00517 
00518   verify_identifier_string("eeg");
00519   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00520   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00521   dvar_vector_position v1pos=restore_dvar_vector_position();
00522   dvector v1=restore_dvar_vector_value(v1pos);
00523   prevariable_position epos=restore_prevariable_position();
00524   double e=restore_prevariable_value();
00525   verify_identifier_string("ddg");
00526   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00527   double dfe=0.;
00528   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00529   {
00530     double tmp=pow(v1.elem(i),e-1);
00531     //vtmp.elem(i)=pow(value(v1.elem(i)),e);
00532     dfv1(i)=dfvtmp(i)*e*tmp;
00533     dfe+=dfvtmp(i)*v1.elem(i)*tmp*log(v1.elem(i));
00534   }
00535   dfv1.save_dvector_derivatives(v1pos);
00536   save_double_derivative(dfe,epos);
00537   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00538 }
00539 
00540 void DF_dvcpow(void);
00541 
00546 dvar_vector pow(const dvar_vector& v1,int e)
00547 {
00548   //dvector cv1=value(v1);
00549   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00550   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00551   {
00552     vtmp.elem_value(i)=pow(v1.elem_value(i),e);
00553   }
00554 
00555   save_identifier_string("ddf");
00556   v1.save_dvar_vector_value();
00557   save_double_value(double(e));
00558   v1.save_dvar_vector_position();
00559   vtmp.save_dvar_vector_position();
00560   save_identifier_string("eef");
00561   gradient_structure::GRAD_STACK1->
00562             set_gradient_stack(DF_dvcpow);
00563   return vtmp;
00564 }
00565 
00570 void DF_dvcpow(void)
00571 {
00572   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00573   verify_identifier_string("eef");
00574   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00575   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00576   dvar_vector_position v1pos=restore_dvar_vector_position();
00577   double e=restore_double_value();
00578   dvector v1=restore_dvar_vector_value(v1pos);
00579   verify_identifier_string("ddf");
00580   dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00581   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00582   {
00583     //vtmp.elem(i)=sin(value(v1.elem(i))));
00584     dfv1(i)=dfvtmp(i)*e*pow(v1.elem(i),e-1);
00585   }
00586   dfv1.save_dvector_derivatives(v1pos);
00587   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00588 }
00589 
00590 void DF_cdvpow(void);
00591 
00596 dvar_vector pow(const dvector& v1,const prevariable& e)
00597 {
00598   //dvector cv1=value(v1);
00599   double ce=value(e);
00600   dvar_vector vtmp(v1.indexmin(),v1.indexmax());
00601   for (int i=v1.indexmin();i<=v1.indexmax();i++)
00602   {
00603     vtmp.elem_value(i)=pow(v1.elem(i),ce);
00604   }
00605 
00606   save_identifier_string("eddg");
00607   e.save_prevariable_value();
00608   e.save_prevariable_position();
00609   v1.save_dvector_value();
00610   v1.save_dvector_position();
00611   vtmp.save_dvar_vector_position();
00612   save_identifier_string("feeg");
00613   gradient_structure::GRAD_STACK1->
00614             set_gradient_stack(DF_cdvpow);
00615   return vtmp;
00616 }
00617 
00622 void DF_cdvpow(void)
00623 {
00624   // int ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00625 
00626   verify_identifier_string("feeg");
00627   dvar_vector_position tmp_pos=restore_dvar_vector_position();
00628   dvector dfvtmp=restore_dvar_vector_derivatives(tmp_pos);
00629   dvector_position v1pos=restore_dvector_position();
00630   dvector v1=restore_dvector_value(v1pos);
00631   prevariable_position epos=restore_prevariable_position();
00632   double e=restore_prevariable_value();
00633   verify_identifier_string("eddg");
00634   //dvector dfv1(dfvtmp.indexmin(),dfvtmp.indexmax());
00635   double dfe=0.;
00636   for (int i=dfvtmp.indexmin();i<=dfvtmp.indexmax();i++)
00637   {
00638     double tmp=pow(v1.elem(i),e);
00639     //vtmp.elem(i)=pow(value(v1.elem(i)),e);
00640     //dfv1(i)=dfvtmp(i)*e*tmp;
00641     dfe+=dfvtmp(i)*tmp*log(v1.elem(i));
00642   }
00643   //dfv1.save_dvector_derivatives(v1pos);
00644   save_double_derivative(dfe,epos);
00645   //ierr=fsetpos(gradient_structure::get_fp(),&filepos);
00646 }
00647 dvar_vector pow(const dvector& x,const dvar_vector& a)
00648 {
00649     RETURN_ARRAYS_INCREMENT();  
00650   dvar_vector y(x.indexmin(), x.indexmax());
00651 
00652   for(int i=x.indexmin(); i<=x.indexmax(); i++)
00653   {
00654     y(i)=pow(x(i),a(i));
00655   } 
00656 
00657   RETURN_ARRAYS_DECREMENT();  
00658     return(y);
00659 }