SHOGUN
v3.2.0
首页
模块
类
文件
文件列表
文件成员
src
shogun
lib
slep
q1
ep21R.h
浏览该文件的文档.
1
/* This program is free software: you can redistribute it and/or modify
2
* it under the terms of the GNU General Public License as published by
3
* the Free Software Foundation, either version 3 of the License, or
4
* (at your option) any later version.
5
*
6
* This program is distributed in the hope that it will be useful,
7
* but WITHOUT ANY WARRANTY; without even the implied warranty of
8
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9
* GNU General Public License for more details.
10
*
11
* You should have received a copy of the GNU General Public License
12
* along with this program. If not, see <http://www.gnu.org/licenses/>.
13
*
14
* Copyright (C) 2009 - 2012 Jun Liu and Jieping Ye
15
*/
16
17
#ifndef EP21R_SLEP
18
#define EP21R_SLEP
19
20
#include <stdlib.h>
21
#include <stdio.h>
22
#include <time.h>
23
#include <math.h>
24
25
26
/*
27
Euclidean Projection onto l_{2,1} Ball
28
29
min 1/2 ||x- u||_2^2 + 1/2 ||t- v||_2^2
30
s.t. ||x^j||_{2,1} <= t^j
31
32
33
Usage:
34
[x, t]=ep21R(u, v, n, k);
35
36
*/
37
38
39
void
ep21R
(
double
* x,
double
*t,
double
* u,
double
* v,
int
n,
int
k)
40
{
41
int
i, j, tn=n*k;
42
double
temp;
43
44
/* compute the 2 norm of each group
45
*/
46
47
for
(j=0;j<n;j++){
48
temp=0;
49
for
(i=j; i< tn; i+=n)
50
temp+= u[i]* u[i];
51
temp=sqrt(temp);
52
/*temp contains the 2-norm of of each row of u*/
53
54
if
(temp > fabs(v[j])){
55
t[j]=(temp + v[j])/2;
56
for
(i=j; i<tn; i+=n)
57
x[i]= t[j] / temp * u[i];
58
}
59
else
60
if
(temp <= v[j]){
61
t[j]=v[j];
62
63
for
(i=j; i<tn; i+=n)
64
x[i]= u[i];
65
}
66
else
{
67
t[j]=0;
68
69
for
(i=j; i<tn; i+=n)
70
x[i]=0;
71
}
72
73
}
74
}
75
#endif
/* ----- #ifndef EP21R_SLEP ----- */
76
ep21R
void ep21R(double *x, double *t, double *u, double *v, int n, int k)
Definition:
ep21R.h:39
SHOGUN
Machine Learning Toolbox - Documentation