Re: Classifying by Inequalities???
- To: mathgroup at smc.vnet.net
- Subject: [mg29219] Re: [mg29212] Classifying by Inequalities???
- From: Daniel Lichtblau <danl at wolfram.com>
- Date: Tue, 5 Jun 2001 04:21:50 -0400 (EDT)
- References: <200106040930.FAA15721@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Moranresearch at aol.com wrote:
>
> I have a series of integers l1={{a1,b1},{a2,b2},...{ai,bi}}
> I want to label each pair in the series according to the inequality rules
> defined below
> such that I get a series of labels l2={n,k,p....}
>
> k = A<0 B<0
> l = A<0 B=0
> m = A<0 B<0 A=B
> n = A<0 B>0
> p = A>0 B>0
> q = A=0 B>0
> r = A>0 B>0 A=B
> Thanks. John
Here is one approach. First we make a function that can generate each
type of pair of interest.
In[35]:= pair[] := Module[{ii=Random[], rr=Random[]},
Which [ii <.1, {0,2*rr-1},
ii<.2, {2*rr-1,0},
ii<.3, 2*{rr,rr}-1,
True, 2*{rr,Random[]}-1]
Now make a bunch of pairs.
In[37]:= InputForm[l1 = Table[pair[], {50}]]
Out[37]//InputForm=
{{-0.7277720328476165, -0.7277720328476165}, {0.3650932569449612, 0},
{0.3828321773557133, -0.020274616446146254},
{-0.3940875158130537, 0.997067967530467}, {0.6213444854391139,
0.09675465779260661}, {0.6600609675409608, -0.7314420021404626},
{0.6730425898894106, 0.03683216049718552}, {0.9847914349300675, 0},
{0.5421321367722511, -0.2841344899487116},
{0.5916667018905335, 0.25533189681510304},
{0.6589619623709377, -0.7911654754651798}, {-0.7777235695190945, 0},
{-0.7882334429956468, -0.6909830807230597},
{0.9562948203913848, 0.22151633148255012}, {-0.6676260528177457,
0.20161235884951756}, {0.6121237912387938, -0.9745531204517499},
{0.6845790725502223, -0.9300083455334571},
{0.6338220167426081, -0.9070876293403111},
{0.9588091163906343, 0.9748600543716706}, {-0.46094675560980947,
0.7365326859097288}, {0.6723112891205154, -0.7699636748867497},
{-0.03448424420370577, -0.5492050423620347},
{-0.19677320631431716, 0.7639033969467766},
{0.9689565821384771, -0.22222008586256725},
{0.2177421434946034, 0.2177421434946034}, {0.46819854464047106,
-0.08673954371528148}, {0.08430517002049442, 0.5093894282498368},
{0.24075192671004575, -0.4547480743696961},
{-0.9834101742746311, 0.5684406375895303}, {-0.3627439985278291, 0},
{0.11764567995156505, -0.2658647728602175},
{0.28717067298229804, -0.7846755360932607},
{0.05624929364905529, -0.25991180004502856},
{-0.13378628267062875, 0.5880507490085842},
{0.8727525475772215, 0.7819085473088767}, {0, -0.11157265824279505},
{0.23665662167857282, -0.6941954215813606},
{0.06355998327764567, -0.07855897883848062},
{0.8207634461027611, 0.9459143033260806}, {0, 0.8345193691599806},
{0.7305898394193413, 0.7305898394193413}, {-0.22172992448907458,
0.7935045731654915}, {-0.4440865683089399, 0.1902193265023413},
{-0.13974502857001625, -0.2259951156178166},
{0.07824948773803353, -0.7717456494371921},
{-0.19424657267504564, -0.7935880282938024},
{-0.384092758457909, 0.13720485037848573}, {0.21878006395908178, 0},
{0.30268548121850514, 0.30268548121850514},
{0.4881902245397405, 0.00647429849992287}}
Now we make pairs of the form {inequality,name}.
In[38]:= ineqs = {{A<0&&B<0,k}, {A<0&&B==0,l},
{A<0&&A==B,m}, {A<0&&B>0,n},
{A>0&&B>0,p}, {A==0&&B>0,q},
{A>0&&A==B,q}};
I use Outer[Cases[...]&, l1, ineqs, 1] in order to test every inequality
against every pair.
In[39]:= Map[Flatten,
Outer[Cases[{#1}, ({A_,B_}/;Evaluate[#2[[1]]])->#2[[2]]]&, l1, ineqs,
1]]
Out[39]= {{k, m}, {}, {}, {n}, {p}, {}, {p}, {}, {}, {p}, {}, {l}, {k},
{p},
{n}, {}, {}, {}, {p}, {n}, {}, {k}, {n}, {}, {p, q}, {}, {p}, {}, {n},
{l}, {}, {}, {}, {n}, {p}, {}, {}, {}, {p}, {q}, {p, q}, {n}, {n}, {k},
{}, {k}, {n}, {}, {p, q}, {p}}
Note that one might try to be more efficient (at the expense of trickier
coding) insofar as many inequalities are mutually exclusive. Hence once
one is found that fits a given pair, it could be used to rule out
several others.
Daniel Lichtblau
Wolfram Research
- References:
- Classifying by Inequalities???
- From: Moranresearch@aol.com
- Classifying by Inequalities???