MathGroup Archive 1994

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Inequalities into Standard Form

  • To: mathgroup at yoda.physics.unc.edu
  • Subject: Re: Inequalities into Standard Form
  • From: Edmund Greaves <egreaves>
  • Date: Mon, 27 Jun 94 16:32:50 CDT

> 
> Some time ago, I wrote asking how to put
> linear inequalities into standar form:
> with all variable terms on the lhs, and
> the constant term on the rhs. I wrote that
> I could make such a function myself, but
> hoped for something built-in or ready-made.
>   Eventually, I asked WRI tech support, and
> am glad I did. Edmund Greaves, of WRI, 
> immediately started in on the problem, and
> has sent me a far neater, and watertight,
> function than anything I would have made.
>   Here is the function supplied by Ed Greaves
> of Wolfram Research:
>   (I have to hand type everything, so any 
> mistakes are mine.)
> 
> convertIneq[ x_[lhs_,rhs_] ] :=
>   Module{temp,const,result},
>     temp = Expand[ lhs - rhs ]; (*all terms to rhs*)
>     const = If[Head$ at {(J[temp] === Plus,
> 		Select[temp, NumberQ],
> 		0];
>     result = x[temp-const, -const];
> 	(* If a negative rhs is okay, done *)
> 	(* If need rhs non-negative... *)
>     If[const>0,
>       result = Map[ Minus, result];
>       result = result /. {Less -> Greater,
> 			LessEqual->GreaterEqual,
> 			Greater->Less,
> 			GreaterEqual->LessEqual}];
>       result
>   ]
> 
> I hope this is of help to any one with similar problems.
> 
> 

Ronald,

I'm glad you found my solution useful.  There was a slight typo in what
you've given here so I thought I'd repost what I wrote:


convertIneq[ x_[lhs_, rhs_] ] :=
	Module[{temp, const, result},
		temp = Expand[lhs - rhs];	(* move all terms to LHS *)
		const = If[Head[temp] === Plus,
			Select[temp, NumberQ],
			0];
		result = x[temp - const, -const];
		If[const > 0,		(* Is b negative on RHS? *)
			result = Map[Minus, result];
			result = result /. {Less -> Greater,
					LessEqual -> GreaterEqual,
					Greater -> Less,
					GreaterEqual -> LessEqual}];
		result
	]



Here are some examples of how you would use this function:

In[2]:= convertIneq[2 (x - 1) == 1]

Out[2]= 2 x == 3

In[3]:= convertIneq[-4 + 2 x + 3 y >= 1 - 4 x + 2 y]

Out[3]= 6 x + y >= 5

In[4]:= ineq2 =  x + y - 3 z -  1 <= 2 x - 5

Out[4]= -1 + x + y - 3 z <= -5 + 2 x

In[5]:= convertIneq[ineq2]

Out[5]= x - y + 3 z >= 4

The main use for this function is to convert inequalities to a form
which could be used in a linear programming function.

---------------------------------------------------------------------------
Edmund Greaves						egreaves at wri.com

{My views may or may not be the views of Wolfram Research}
---------------------------------------------------------------------------





  • Prev by Date: Re: Defining a predicate
  • Next by Date: re: Specifying rules OR "How to do complex math in Mathematica"
  • Previous by thread: Inequalities into Standard Form
  • Next by thread: Listable attribute (was Re: eval differential expressions)