📄 cddmex.m
字号:
%==========================================================================% Help file for CDDMEX%% CDDMEX is a Matlab MEX file interface (authors: Mato Baotic, Fabio Torrisi),% obtained by linking CDD library CDDLIB-093 (author: Komei Fukuda), which% allows calls to some of CDD functions from within MATLAB.%% CDD is a software package written by K. Fukuda which boasts a wide array% of efficient algorithms for many polytope manipulations as well as a fast% LP solver. The full CDD library is free and availible from:% http://www.cs.mcgill.ca/~fukuda/soft/cdd_home/cdd.html%% Version: cddmex v1.0% cddlib v0.93%% See the bottom of this file for more details.%==========================================================================%% Syntax: outstruct=cddmex(action,instruct)%% action: 'hull' Convex hull of a V polyhedron% 'extreme' Vertex/ray enumeration of an H polyhedron% 'reduce_h' Minimal H representation (of an H polyhedron)% 'reduce_v' Minimal V representation (of a V polyhedron)% 'solve_lp' Solve a Linear Program% 'version' Version of the mex function%% Further info: see CDDMEX.C%% Not documented functions:% 'copy_v' Simple copy of an H polyhedron% 'copy_h' Simple copy of a V polyhedron% 'v_hull_extreme' ???% 'adj_extreme' Extreme points and adjecancy list of an H polyhedron% 'find_interior' Interior point of an H polyhedron%% Not compiled functions:% 'adjecancy' Adjacency list of a V polyhedron% Note that V has to be in a minimal representation!%%% Example: Find the extreme points/rays of P={x: A1*x=B1, A2*x<=B1}%% A1=[1 1 1];B1=[1];% A2=[eye(3);-eye(3)];B2=[1;1;1;2;2;2];% H=struct('A',[A1;A2],'B',[B1;B2],'lin',(1:size(B1,1))');% % H.lin=indices of equality constraints% V=cddmex('extreme',H);% % The rows of V.V are the extreme points of P%% Example: Find the convex hull of v1,v2,v3%% V=struct('V',[v1';v2';v3']);% H=cddmex('hull',V);%% Example: Find minimal H representation%% A1=[-1 0; 0 -1; 1 0; 0 1; 1 1];B1=[0;0;1;1;1];% H1=struct('A',A1,'B',B1);% [Hred]=cddmex('reduce_h',H1);% % Hred.A * x <= Hred.B is a minimal H representation% [Hred,ind_redrows]=cddmex('reduce_h',H1);% % ind_redrows are the indices of redundant rows% % Note: if H1 is empty polyhedron, then Hred% % containes irreducibly incosistent set (IIS)%% Example: Find minimal V representation%% V1=[0 0; 0 1; 1 0; 1 1; 0.2 0.8; 0.7 0.3];% V1=struct('V',V1);% % each row of V1.V is a vertex% [Vred]=cddmex('reduce_v',V1);% % Vred.V is a minimal V representation% [Vred,ind_redvert]=cddmex('reduce_v',V1);% % ind_redvert are the indices of redundant vertices%%% Example: Solve a Linear Program% Syntax% OUT=cddmex('solve_lp',IN)% % solves problem% min IN.obj*x% x% s.t. IN.A*x <= IN.B% IN.A(IN.lin,:) x == IN.B(IN.lin)% % where% IN - input structure% IN.A - constraints matrix% IN.B - constraints matrix% IN.obj - objective function% IN.lin - indices of equality constraints% % OUT - structure with solution (similiar to lpsolve)% OUT.xopt - primal solution% OUT.lambda - dual solution% OUT.how - Fukuda's code for LP solution status% 0 = dd_LPSundecided,% 1 = dd_Optimal % 2 = dd_Incosistent% 3 = dd_DualIncosistent% 4 = dd_StrucIncosistent% 5 = dd_StrucDualIncosistent% 6 = dd_Unbounded% 7 = dd_DualUnbounded% OUT.objlp - optimal value%% Note: CrissCross algorithm is used when solving LP.% % Example% objective=[-1 1];% A1=[1 1; -1 0; 0 -1];% B1=[1; 0; 0];% IN=struct('obj',objective,'A',A1,'B',B1);% % OUT = cddmex('solve_lp',IN);% % OUT =% xopt: [1 0]% lambda: [-1 0 -2]% how: 1% objlp: -1%%% Note: the projection function is only available in CDDMEX.M. A projection% can be obtained here by (1) vertex enumeration, (2) projection of vertices,% (3) hull of projected vertices. Example:%% H=struct('A',A1,'B',B1);% V=cddmex('extreme',H);% Vproj.V=V.V(:,1:2); % Project over the first two coordinates% Hproj=cddmex('hull',Vproj); % Get the projection%%%==============================================================================%% /* The cdd library cddlib-093a was written by% Komei Fukuda, fukuda@ifor.math.ethz.ch% Version 0.93, August 11, 2003% Standard ftp site: ftp.ifor.math.ethz.ch, Directory: pub/fukuda/cdd% */%% /* cddlib.c : C-Implementation of the double description method for% computing all vertices and extreme rays of the polyhedron % P= {x : b - A x >= 0}. % Please read COPYING (GNU General Public Licence) and% the manual cddlibman.tex for detail.% */%% /* This program is free software; you can redistribute it and/or modify% it under the terms of the GNU General Public License as published by% the Free Software Foundation; either version 2 of the License, or% (at your option) any later version.%% This program is distributed in the hope that it will be useful,% but WITHOUT ANY WARRANTY; without even the implied warranty of% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the% GNU General Public License for more details.%% You should have received a copy of the GNU General Public License% along with this program; if not, write to the Free Software% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.% */%===============================================================================%% History:% cddmex.c v0.1, An initial Matlab MEX wrapper for cdd library written by% Fabio Torrisi (torrisi@control.ee.ethz.ch) and% Mato Baotic (baotic@control.ee.ethz.ch),% Zurich, December 2002.%% cddmex.c v1.0, Revision update by Mato Baotic, Zurich, October 2003.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -