source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/extras/@ncvar/isconvex.m @ 37

Last change on this file since 37 was 37, checked in by (none), 14 years ago

Added original make3d

File size: 1.0 KB
Line 
1function YESNONA = isconvex(p)
2%ISCONVEX Checks if scalar function is convex
3
4% Author Johan Löfberg
5% $Id: isconvex.m,v 1.1 2006/08/10 18:00:20 joloef Exp $   
6p=p;
7if is(p,'linear')
8    YESNONA = 1;
9    return;
10elseif is(p,'quadratic')
11    [Q,c,f,x,info] = quaddecomp(p);
12    if ~info
13        if all(real(eig(Q+Q')) > -1e-13)
14            YESNONA = 1;
15        end
16    end
17end
18
19vars = depends(p);
20x = recover(depends(p));
21convex = 1;
22iterations = 0;
23while convex & iterations<10
24    y1 = randn(length(vars),1);
25    assign(x,y1);
26    p1 = double(p);
27    y2 = randn(length(vars),1);
28    assign(x,y2);
29    p2 = double(p);
30    yc = ((y1+y2)/2);
31    assign(x,yc);
32    pc = double(p);
33    if pc>(p1+p2)/2
34        convex = 0;
35    end
36    iterations = iterations + 1;
37end
38
39% Maybe we didn't manage to prove non-convexity
40if convex
41    H = hessian(p,x);
42    v = sdpvar(length(H),1);
43    sol = solvesos(set(sos(v'*H*v)),[],sdpsettings('verbose',1));
44    if sol.problem == 0
45        YESNONA = 1;
46    else
47        YESNONA = nan;
48    end       
49else
50    YESNONA = 0;
51end
52
Note: See TracBrowser for help on using the repository browser.