Re: How can I plot the region satisfying an inequality?
- To: mathgroup at smc.vnet.net
- Subject: [mg18892] Re: How can I plot the region satisfying an inequality?
- From: phbrf at t-online.de (Peter Breitfeld)
- Date: Sun, 25 Jul 1999 03:30:21 -0400
- Organization: das ist ein breites Feld ...
- References: <7mp3dn$l99@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
ELodger <elodger at my-deja.com> schrieb: > Hi There, > > Is there a way to plot the region satisfying a set of inequalities, > such as: > > x - y > 0 and > x + y < 0 > > on [-10, 10] > I have a Function to do this. It requires Algebra`InequalitySolve` and Graphics`FilledPlot` to work. Sorry for the german usage, but I just copied it :-) ----------------8<----------------8<---------------- InequalityPlot::usage= "InequalityPlot[ungl,{x,xmin,xmax},{y,ymin,ymax},(opts)] zeichnet das Loesungsgebiet der Ungleichung `ungl' in den beiden Variablen `x' und `y' innerhalb des angegebenen Gebiets. Die Ungleichungen mussen der Syntax von `InequalitySolve' gehorchen. Moegliche Optionen sind die fur `FilledPlot' erlaubten." InequalityPlot[ungl_, {x_, xmin_, xmax_}, {y_, ymin_, ymax_},opts___] := Module[{lsg, ur, plots, i, a, b}, lsg = InequalitySolve[(ungl) && (xmin <= x <= xmax) && (ymin <= y <= ymax),{x, y}]; ur = ((List @@ lsg) /. LessEqual -> Less); ur = ur //. {Inequality[a_, Less, x, Less, b_] -> {x, a, b}, Inequality[a_, Less, y, Less, b_] -> {a, b}, And[a_, b__] -> {a, b}, {a_, HoldPattern[Or[b__]]} :> ({a, #} &) /@ {b} }; b = Position[{ur}, {{_, _, _}, {_, _}}]; a = Table[Extract[{ur}, b[[i]] ], {i, 1, Length[b]}]; plots = Table[ FilledPlot[a[[i]][[2]], a[[i]][[1]], DisplayFunction -> Identity, opts], {i, 1, Length[a]}]; Show[plots, DisplayFunction -> $DisplayFunction]; ] SetAttributes[InequalityPlot,ReadProtected] Protect[InequalityPlot] ----------------8<----------------8<---------------- For your example you enter: In:= InequalityPlot[x-y>0 && x+y<0, {x,-10,10},{y,-10,10}]; I don't know if there are still some bugs in it, but it works for your example and a lot of others I used it for. I used `Extract' in the code wich is new to Mathematica 4 IIRC, but you can use `Part' instead with slightly change of the syntax to make it work on Mathematica 3 as well. When testing this function, I realized, that InequalitySolve returns only Inequalities in Less and LessEqual. Can the gurus in this group confirm this observation? Gruss, Peter -- =--=--=--=--=--=--=--=--=--=--=--=--= http://home.t-online.de/home/phbrf Peter Breitfeld, Saulgau, Germany PGP public key: 08548045