source: proiecte/pmake3d/make3d_original/Make3dSingleImageStanford_version0.1/third_party/opt/yalmip/@sdpvar/diff.m @ 37

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

Added original make3d

File size: 1.9 KB
Line 
1function Y=diff(varargin)
2%DIFF (overloaded)
3
4% Author Johan Löfberg
5% $Id: diff.m,v 1.6 2006/07/26 20:17:57 joloef Exp $
6
7X = varargin{1};
8n = X.dim(1);
9m = X.dim(2);
10
11Y = X;
12x_lmi_variables = X.lmi_variables;
13lmi_variables = [];
14
15% Fast diff of large matrices. Convert to optmized case
16switch nargin
17    case 1
18        if (min([n m]) > 1)
19            Y = diff(X',1,2)';
20            return
21        end
22
23    case 2
24        if varargin{2} == 1 & (min([n m]) > 1)
25            Y = diff(X',1,2)';
26            return
27        end
28    case 3
29        if varargin{2}==1 & varargin{3} == 2 & (min([n m]) > 1)
30            shift = [-speye(m-1) spalloc(m-1,1,0)] + [spalloc(m-1,1,0) speye(m-1)];
31            %            shift = shift(1:m-1,1:m);
32            shift = kron(shift,speye(n));
33            Y.basis = shift*X.basis;
34            Y.dim(1) = n;
35            Y.dim(2) = m - 1;
36            % Reset info about conic terms
37            Y.conicinfo = [0 0];
38            Y = clean(Y);
39            return
40        elseif varargin{2}==1 & varargin{3} == 1  & (min([n m]) > 1)
41            Y = diff(X',1,2)';
42            return
43        end
44
45    otherwise
46        error('To many input arguments.')
47end
48
49% Slow but safe case. Used for higher order diff
50try
51    j = 1;
52    diffX = diff(reshape(X.basis(:,1),n,m),varargin{2:end});
53    Y.basis=diffX(:);
54    for i = 1:length(x_lmi_variables)
55        diffX = diff(reshape(X.basis(:,i+1),n,m),varargin{2:end});
56        if (norm(diffX,inf)>0)
57            Y.basis(:,j+1) = diffX(:);
58            lmi_variables = [lmi_variables x_lmi_variables(i)];
59            j = j+1;
60        end
61    end
62    if j~=1
63        Y.lmi_variables = lmi_variables;
64    else
65        Y = full(reshape(Y.basis(:,1),size(diffX,1),size(diffX,2)));
66        return
67    end
68catch
69    error(lasterr)
70end
71Y.dim(1) = size(diffX,1);
72Y.dim(2) = size(diffX,2);
73% Reset info about conic terms
74Y.conicinfo = [0 0];
Note: See TracBrowser for help on using the repository browser.