00001 #ifndef __RVL_OPTTESTS_
00002 #define __RVL_OPTTESTS_
00003
00004 #include "utility.hh"
00005
00006 using namespace RVL;
00007
00008
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
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
00022 y[0]=-20*x[0];
00023
00024 y[1]=-ScalarFieldTraits<T>::One();
00025
00026 y[2]=10*ScalarFieldTraits<T>::One();
00027
00028 y[3]=ScalarFieldTraits<T>::Zero();
00029 return 0;
00030 }
00031
00032
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
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