home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 9 / 09.iso / e / e031 / 3.ddi / MATHZIP2 / STARTUP / LINEARPR.M < prev    next >
Encoding:
Text File  |  1991-09-23  |  1.3 KB  |  50 lines

  1.  
  2. (* LinearProgramming.m *)
  3.  
  4. Begin["System`"]
  5.  
  6. Unprotect[ LinearProgramming]
  7.  
  8. Clear[ LinearProgramming]
  9.  
  10. LinearProgramming::usage = 
  11. "LinearProgramming[c, m, b] finds the vector x which minimizes
  12. the quantity c.x subject to the constraints m.x >= b and x >= 0."
  13.  
  14. Begin["`Private`"]
  15.  
  16. AreWeValid[vector1_, matrix_, vector2_]:= 
  17.     Block[{length1, length2, length3, length4},
  18.     If[!(VectorQ[vector1, NumberQ]&&
  19.     MatrixQ[matrix, NumberQ]&&VectorQ[vector2, NumberQ]),
  20.      Return[False]];
  21.     length1=Length[vector1];
  22.     length2=Length[matrix];
  23.     length3=Length[vector2];
  24.     length4=Length[matrix[[1]]];
  25.     If[length2!=length3, Return[False]];
  26.     If[Length1!=length4, Return[False]];
  27.     True]
  28.  
  29. LinearProgramming[vector1_, matrix_, vector2_]:= 
  30.     Block[{tempans=LPAux[vector1, matrix, vector2]},
  31.     Map[#[[2]]&, tempans[[2]]]/; !SameQ[Head[tempans],
  32.                             ConstrainedMin]]/; AreWeValid[vector1, matrix, vector2]
  33.  
  34. LPAux[vector1_, matrix_, vector2_]:=
  35.     Block[{vars=Table[OptVar[i], {i, Length[vector1]}],
  36.         nopt, neqns,
  37.         tempans, indicator},
  38.         nopt = vars . vector1;    
  39.         neqns = Map[( # . vars) &, matrix] - vector2;
  40.             neqns = Map[(# >= 0) &, neqns];
  41.         tempans = ConstrainedMin[nopt, neqns, vars]
  42.             ]    
  43.  
  44. Protect[LinearProgramming]
  45.  
  46. End[]
  47. End[]
  48.  
  49. Null
  50.