expls.hh

Go to the documentation of this file.
00001 #ifndef __RVL_OPTTESTS_
00002 #define __RVL_OPTTESTS_
00003 
00004 #include "utility.hh"
00005 
00006 using namespace RVL;
00007 
00008 // Rosenbrock function
00009 template<typename T>
00010 int rosie(int m, int n, T const * x, T * y) {
00011   if ((m!=2) || (n!=2)) return 1;
00012   y[0]=10*(x[1]-x[0]*x[0]);
00013   y[1]=ScalarFieldTraits<T>::One()-x[0];
00014   return 0;
00015 }
00016 
00017 // Rosenbrock jacobian
00018 template<typename T>
00019 int rosiejac(int m, int n, T const * x, T * y) {
00020   if ((m!=2) || (n!=2)) return 1;
00021   // df[0]/dx[0]
00022   y[0]=-20*x[0];
00023   // df[1]/dx[0]
00024   y[1]=-ScalarFieldTraits<T>::One();
00025   // df[0]/dx[1]
00026   y[2]=10*ScalarFieldTraits<T>::One();
00027   // df[1]/dx[1]
00028   y[3]=ScalarFieldTraits<T>::Zero();
00029   return 0;
00030 }
00031 
00032 // diagonal quartic function
00033 template<typename T>
00034 int diagquart(int m, int n, T const * x, T * y) {
00035   if ((m != n) || (n < 1)) return 1; 
00036   for (int i=0;i<n;i++) {
00037     T z = (1.0+(T)i)*x[i];
00038     y[i] = z - 0.1*z*z+0.05*z*z*z*z;
00039   }
00040   return 0;
00041 }
00042 
00043 // diagonal quartic jacobian
00044 template<typename T> 
00045 int diagquartjac(int m, int n, T const * x, T * y) {
00046   if ((m != n) || (n < 1)) return 1; 
00047   for (int i=0;i<n*n;i++) y[i]=ScalarFieldTraits<T>::Zero();
00048   for (int i=0;i<n;i++) {
00049     T z =  (1.0+(T)i)*x[i];
00050     y[i+i*n]=(1.0-0.2*z+0.2*z*z*z);
00051   }
00052   return 0;
00053 }
00054 
00055 #endif

Generated on 5 Jan 2017 for RvlUmin by  doxygen 1.4.7