Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef EP21D_SLEP
00018 #define EP21D_SLEP
00019
00020 #include <stdlib.h>
00021 #include <stdio.h>
00022 #include <time.h>
00023 #include <math.h>
00024 #include <shogun/lib/slep/q1/epph.h>
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 void ep21d(double * x, double *root, int * steps, double * v, int n, int k, double z, double lambda0)
00045 {
00046 int i, j, tn=n*k;
00047 double *vnorm=(double *)malloc(sizeof(double)*n);
00048 double *vproj=(double *)malloc(sizeof(double)*n);
00049 double t;
00050
00051
00052
00053
00054 for(j=0;j<n;j++){
00055 t=0;
00056 for(i=j; i< tn; i+=n)
00057 t+= v[i]* v[i];
00058 vnorm[j]=sqrt(t);
00059 }
00060
00061
00062
00063 eplb(vproj, root, steps, vnorm, n, z, lambda0);
00064
00065
00066
00067
00068 if (*root==0){
00069 for(i=0;i<tn;i++)
00070 x[i]=v[i];
00071 }
00072 else{
00073 for (j=0;j<n;j++){
00074 if ( vnorm[j] <= *root){
00075 for(i=j; i< tn; i+=n)
00076 x[i]=0;
00077 }
00078 else{
00079 t=1- *root/ vnorm[j];
00080 for(i=j; i< tn; i+=n)
00081 x[i]=t* v[i];
00082 }
00083 }
00084 }
00085
00086 free(vnorm);
00087 free(vproj);
00088
00089 }
00090 #endif
00091