[Date Index]
[Thread Index]
[Author Index]
Re: Re: Generalization of Greater to matrices
*To*: mathgroup at smc.vnet.net
*Subject*: [mg20307] Re: [mg20303] Re: [mg20278] Generalization of Greater to matrices
*From*: "Andrzej Kozlowski" <andrzej at tuins.ac.jp>
*Date*: Fri, 15 Oct 1999 20:20:39 -0400
*Sender*: owner-wri-mathgroup at wolfram.com
Just a small observation that you have probably also noticed. The concept
of "dominating" as defined below (and in the original message) is
non-transitive. For example {5,5,5,5,1,1,1} dominates {4,4,4,4,3,3,3} which
dominates {6,6,6,3,2,2,2}. But {6,6,6,3,2,2,2} dominates {5,5,5,5,1,1,1}. A
non-transitive binary relation is not an ordering and sorting according to
it does not really make sense.
--
Andrzej Kozlowski
Toyama International University
JAPAN
http://sigma.tuins.ac.jp
http://eri2.tuins.ac.jp
----------
>From: BobHanlon at aol.com
>To: mathgroup at smc.vnet.net
>Subject: [mg20307] [mg20303] Re: [mg20278] Generalization of Greater to matrices
>Date: Tue, 12 Oct 1999 03:39:36 -0400
>
> Hermann,
>
> Here is an approach:
>
> For a matrix (or vector) m1 to be greater than matrix (or vector) m2, then
> each element of m1 must be greater than or equal to its corresponding element
> of m2 and at least one element of m1 must be greater than its corresponding
> element of m2.
>
> greaterMatrix[m1_List, m2_List] /; Dimensions[m1] == Dimensions[m2] :=
> Module[{pairs =
> Transpose[
> Flatten /@ {m1, m2}]}, (And @@ (GreaterEqual[Sequence @@ #] & /@
> pairs)) && (Or @@ (Greater[Sequence @@ #] & /@ pairs))]
>
> For a matrix (or vector) m1 to dominate matrix (or vector) m2, then n
> elements (where n is greater than 1/2 the number of elements) of m1 must be
> greater than the corresponding elements of m2.
>
> dominantMatrix[m1_List, m2_List, n_Integer] /;
> Dimensions[m1] == Dimensions[m2] &&
> Times @@ Dimensions[m1] >= n >=
> Ceiling[(Times @@ Dimensions[m1] + 1)/2] :=
> Count[(Greater[Sequence @@ #1] & ) /@
> Transpose[Flatten /@ {m1, m2}], True] >= n
>
> M1 = Table[{{Random[Integer, {0, 10}]}, {Random[Integer, {0, 10}]}}, {3}]
> M2 = Table[{{Random[Integer, {0, 10}]}, {Random[Integer, {0, 10}]}}, {3}]
> M3 = Table[{{Random[Integer, {0, 10}]}, {Random[Integer, {0, 10}]}}, {3}]
>
> {{{8}, {7}}, {{5}, {3}}, {{9}, {10}}}
> {{{9}, {8}}, {{10}, {10}}, {{6}, {3}}}
> {{{5}, {5}}, {{0}, {1}}, {{5}, {4}}}
>
> Test for m1 = m2 and six pairwise comparisons:
>
> pairings = {{M1, M1}, {M1, M2}, {M1, M3}, {M2, M3}, {M2, M1}, {M3, M1}, {M3,
> M2}};
>
> greaterMatrix[Sequence @@ #] & /@ pairings
>
> {False, False, True, False, False, False, False}
>
> dominantMatrix[Sequence @@ Join[#, {4}]] & /@ pairings
>
> {False, False, True, True, True, False, False}
>
> dominantMatrix[Sequence @@ Join[#, {5}]] & /@ pairings
>
> {False, False, True, True, False, False, False}
>
> dominantMatrix[Sequence @@ Join[#, {6}]] & /@ pairings
>
> {False, False, True, False, False, False, False}
>
>
> Bob Hanlon
>
> In a message dated 10/11/1999 6:11:59 AM, hmeier at webshuttle.ch writes:
>
>>I tried to solve the following seemingly not to complicated problem, to
>>no
>>avail.
>>
>>M1, M2, M3 ... are matrices of equal dimensions. The task is to find
>>the
>>"greatest" among them. The elements of this matrix, say M2, should be
>>(in
>>principle) greater than all the corresponding elements of M1, M3, Mx....
>>Furthermore, a kind of a "slack variable" (s) should be introduced.
>>(Requiring a matrix to be the "strictly greatest" one would be a condition
>>too hard to meet in some of my practical applications.) A matrix should
>>therefore be considered "greatest", if all but s elements (say 8 out of
>>10)
>>are greater than the corresponding elements of the other matrices. (Such
>>a
>>matrix perhaps could be called "dominating".) The case of s = 0 is that
>>of
>>the "strictly greatest" matrix.
>>
>>Greater or GreaterEqual, Max ... do not work with matrices. Sort accepts
>>{M1,M2,M3 ..}, but there seems to be no built-in functionality to arrive
>>at
>>my desired result.
>>
>>Therefore I tried to set up GreaterMatrix (rather than overloading Greater).
>>GreaterMatrix should also work as an ordering relation in Sort. So
>>Sort[{M1,M2,M3..}, GreaterMatrix] should rank M1, M2, M3 according to the
>>above-mentioned criteria.
>>
>>GreaterMatrix can be (but has not to be) restricted to two-dimensional
>>matrices. The following expressions may be pieces usable for a solution:
>>
>>Outer[Count[(#1 - #2), _?Positive, 2] &, {M1,M2,M3}, {M1,M2,M3}, 1]
>>subtracts M1, M2, M3 from each other and counts the number of positive
>>values in the resulting matrix. A positive value equal to dim
>>(=Apply[Times,Dimensions[M1]]) at position {i,j}, say {2,3}, would
>>indicate that matrix M2 is strictly greater than M3. Outer[Count[(#1 -
>>#2),
>>_?(#>=(dim-s)?), 2] &, {M1,M2,M3}, {M1,M2,M3}, 1] may indicate a matrix
>>that
>>is just "dominating" another one.
>>
>>FoldList[GreaterMatrix, M0, {M1, M2, M3}]]//Rest - with M0 a starting matrix
>>like Table[-10^10, {First[dim]},{Last[dim]}] - may give a succession of
>>"increasing" matrices. (For this also see Mathematica Book, Online
>>Version, Further Examples to Max.)
>>
>>There is also TopologicalSort in package DiscreteMath`Combinatorica` which
>>may or may not be useful in the present context. (I am not sure if
>>TopologicalSort corresponds to the topological sort as explained in Knuth,
>>The Art of Computer Programming, Vol. 1, 3rd ed., ch. 2.2.3, p. 261 - 271.)
>>
>>The problem looks like quite a challenge (to me as a mid-level user). I
>>was
>>not able to put my pieces of code together into a working program that
>>would
>>pass all my tests. I would appreciate contributions of Mathematica experts.
>>Such contributions perhaps may even show - possible - extensions to Greater,
>>GreaterEqual, Less, LessEqual, Max, Min ... for handling matrices in a
>>future version of Mathematica.
>>
>
Prev by Date:
**Page Breaks inside a cell**
Next by Date:
**Help: read data to do contour plot**
Previous by thread:
**Re: Generalization of Greater to matrices**
Next by thread:
**Real integrand->complex result.**
| |