MathGroup Archive 2007

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

Search the Archive

RE: Identifying Linearly Dependent Equations


Dear Jean,

Thank you very much for your help. First, I have just noticed the problem
with my e-mail address. It has been corrected and now people will be able to
identify it more clearly. Second, your help in Math programming has been
very useful. The results have improved substantially. 

Best regards,
Tugrul Temel




-----Original Message-----
From: Jean-Marc Gulliet [mailto:jeanmarc.gulliet at gmail.com] 
Sent: woensdag 19 september 2007 11:19
To: mathgroup at smc.vnet.net
Subject: [mg81344] [mg81308] Identifying Linearly Dependent Equations

%uvt_fullname% wrote:

> I am facing the following problem:

Note that I have changed the title of the thread. A meaningful title 
will attract more answers (and a valid email address allows you to get 
faster replies by direct email) and it is easier for people to find a 
thread that answers their questions.

> 1) I have a system of m=12 linear equations, with n=11 variables.
> 
> 2) I want to identify those linearly dependent equations and drop them
from
> the system to have a solution.
> 
> 3) I applied the following code (somebody from MathGroup provided this
last
> year), which is the Gram-Schmidt method of orthogonalization:
> 
> 
> Clear[V];
> 
> equ = {i - 0.4 p == 0, k - 0.16 z == 0, m - 0.9 p == 0, c - 0.83 r == 0, x
-
> 0.7 p ==0, p + m - i - c - k - x == 0, y - p + i == 0, 
>   s - r + c == 0, b - m + x == 0, y - r == 0, k - s - b == 0, 
>   z - p - m == 0};
> 
> {h1, V} = CoefficientArrays[equ, {p, m, i, k, x, c, y, r, s, b, z}];
> 
> Do[Do[If[V[[n]] != {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, V[[m]] =
> (V[[n]].V[[n]]) V[[m]] - (V[[n]].V[[m]]) V[[n]]], {n, 1, m - 1}], {m, 2,
> 12}]
> 
> Map[If[# != {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "keep", "discard"] &, V]
> 
> 
> This Code always indicates the 6th row to be discarded no matter which
order
> you input the equations in "equ".
> 
> Isn't there a problem with this code or maybe I am missing something.

At a first glance, the code seems fine for symbolic computation (I am 
rather condiment that what you are facing is numerical instability due 
to the use of inexact arithmetic). In the example below, we can see that 
by reversing the sequence of equations, we get nothing to discard. So 
use exact numbers or rationalize the equations first.

In[1]:= equ = {i - 0.4 p == 0, k - 0.16 z == 0, m - 0.9 p == 0,
    c - 0.83 r == 0, x - 0.7 p == 0, p + m - i - c - k - x == 0,
    y - p + i == 0, s - r + c == 0, b - m + x == 0, y - r == 0,
    k - s - b == 0, z - p - m == 0};

dependentQ[eqns_] :=
  Module[{h1, V}, {h1, V} =
    CoefficientArrays[eqns, {p, m, i, k, x, c, y, r, s, b, z}];
   Do[Do[If[V[[n]] != {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
      V[[m]] = (V[[n]].V[[n]]) V[[m]] - (V[[n]].V[[m]]) V[[n]]], {n, 1,
       m - 1}], {m, 2, 12}];
   Map[If[# != {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, "keep", "discard"] &,
     V]
   ]

dependentQ[equ]
dependentQ[Reverse@equ]
dependentQ[Sort@equ]

Out[3]= {"keep", "keep", "keep", "keep", "keep", "keep", "keep", \
"keep", "keep", "keep", "discard", "keep"}

Out[4]= {"keep", "keep", "keep", "keep", "keep", "keep", "keep", \
"keep", "keep", "keep", "keep", "keep"}

Out[5]= {"keep", "keep", "keep", "keep", "keep", "keep", "keep", \
"keep", "keep", "keep", "discard", "discard"}

In[6]:= equ = Rationalize[equ];
dependentQ[equ]
dependentQ[Reverse@equ]
dependentQ[Sort@equ]

Out[7]= {"keep", "keep", "keep", "keep", "keep", "keep", "keep", \
"keep", "keep", "keep", "discard", "keep"}

Out[8]= {"keep", "keep", "keep", "keep", "keep", "keep", "discard", \
"keep", "keep", "keep", "keep", "keep"}

Out[9]= {"keep", "keep", "keep", "keep", "keep", "keep", "keep", \
"keep", "keep", "discard", "keep", "keep"}

-- 
Jean-Marc






  • Prev by Date: Re: Re: Can an arrow be drawn on a 3D plot?
  • Next by Date: Re: Re: plotmarkers in Listplot
  • Previous by thread: Identifying Linearly Dependent Equations
  • Next by thread: Re: Button Help Example