MathGroup Archive 2005

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

Search the Archive

Re: Reduce bug report

  • To: mathgroup at smc.vnet.net
  • Subject: [mg56301] Re: [mg56273] Reduce bug report
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Thu, 21 Apr 2005 05:36:19 -0400 (EDT)
  • References: <200504200932.FAA18065@smc.vnet.net>
  • Sender: owner-wri-mathgroup at wolfram.com


On 20 Apr 2005, at 18:32, Chris Chiasson wrote:

> I am sending this to MathGroup first in the hope that I am wrong.
>
> In the code below, I give two sets of equations. On Mathematica 5.0
> for Windows, the Reduce command does not finish evaluation if Most@ is
> removed from the second equation set.
>
> I have done my best to make sure the problem is well posed by making
> sure there are exactly as many equations as unknowns (less unit
> variables) and by telling Mathematica that all units are nonzero.
>
> Reduce can easily handle it if the last equation of the "defining
> equations" (prob2[defineqns]) is separate system from the rest of the
> equations, but this should be unnecessary.
>
> I realize that it is possible I have made a mistake in posing the
> problem to Mathematica; if so, please enlighten me.
>
> prob2[given]={\[ScriptCapitalN][3600]\[Equal](3600*Circle)/Minute,
>     BT[max,3600]\[Equal](236*Meter*Newton)/Radian,\[ScriptCapitalN][
>          
> 5500]\[Equal](5500*Circle)/Minute,BP[max,5500]\[Equal]100*Kilo*Watt,
>      
> z\[Equal](2*Circle)/Cycle,Vd\[Equal]3*Liter,\[Eta][mech]\[Equal]9/10,
>     sfc\[Equal](9*Kilogram)/(100*Joule*Mega),
>     LHV\[Equal](44*Joule*Mega)/Kilogram,CR\[Equal]89/10,k\[Equal]7/5}
>
> prob2[defineqns]=
>   Most@{BP[max,3600]\[Equal]BT[max,3600]*\[ScriptCapitalN][3600],
>       BP[max,5500]\[Equal]BT[max,5500]*\[ScriptCapitalN][5500],
>       BMEP[max,3600]\[Equal](2*Pi*Radian*z*BT[max,3600])/(Circle*Vd),
>       BMEP[max,3600]/IMEP[max,3600]\[Equal]\[Eta][mech],
>       BMEP[max,5500]\[Equal](2*Pi*Radian*z*BT[max,5500])/(Circle*Vd),
>       BMEP[max,5500]/IMEP[max,5500]\[Equal]\[Eta][mech],\[Eta][
>            
> ind]\[Equal]1/(LHV*sfc),\[Eta][otto]\[Equal]1-(CR^(-1))^(-1+k)}
>
> prob2[units]={Circle,Cycle,Joule,Kilo,Kilogram,Liter,Mega,Meter,Minute, 
> Newton,
>     Radian,Watt}
>
> prob2[redvars]={CR,k,LHV,sfc,Vd,z,BMEP[max,3600],BMEP[max,5500],BP[max, 
> 3600],
>     BP[max,5500],BT[max,3600],BT[max,5500],IMEP[max,3600],
>      
> IMEP[max,5500],\[ScriptCapitalN][3600],\[ScriptCapitalN][5500],\[Eta][
>       ind],\[Eta][mech],\[Eta][otto]}
>
> prob2[numsoln]=
>   Refine[Reduce[Flatten@{prob2[given],prob2[defineqns]},prob2[redvars],
>       Backsubstitution->True],#!=0&/@prob2[units]]
>
> Regards,
> -- 
> Chris Chiasson
> Kettering University
> Mechanical Engineering
> Graduate Student
> 1 810 265 3161


In my opinion it is a bad idea to use Reduce in such cases. Reduce  
attempts to give you a "complete solution", which will means it will  
try to obtain all conditions on your parameters and variables and while  
doing so it may try to use algorithms such as Cylindrical Algebraic  
Decomposition (for some strange reason renamed in Mathematica 5.1 as  
CylindircalDecomposition) or Quantifier Elimination which have very  
high complexity in the naumber of variables. The result is that Reduce  
may take a very long time to deal with expressions involving many  
unknowns, even if they are actually very simple ones. Actually, on my 1  
Gigaherz Powerbook G4 I can't get an answer to your system in  
reasonable time even if Most is present.

However, I think the way to deal with your system is by using Solve and  
not Reduce. The problem is that you can't use Solve directly, because  
it will notice "not algebraic equations" in your system and without  
checking that actually the variables in which the equations are  
non-algebraic can be easily eliminated, Solve will refuse to proceed  
further. The way to avoid this is to tell Solve to eliminate these  
variables as follows:



prob2[numsoln] = Solve[Flatten[{prob2[given], prob2[defineqns]}],  
prob2[redvars], First /@ prob2[given]]


{{BP[max, 3600] -> (849600*Circle*Meter*Newton)/(Minute*Radian),  
$B&G(B[otto] -> 1 - (10/89)^(2/5),
    BP[max, 5500] -> 100*Kilo*Watt, $B&G(B[ind] -> 25/99,  
\[ScriptCapitalN][3600] -> (3600*Circle)/Minute,
    \[ScriptCapitalN][5500] -> (5500*Circle)/Minute, BMEP[max, 3600] ->  
(944*Meter*Newton*Pi)/(3*Cycle*Liter),
    BMEP[max, 5500] ->  
(4*Kilo*Minute*Pi*Radian*Watt)/(165*Circle*Cycle*Liter),
    IMEP[max, 3600] -> (9440*Meter*Newton*Pi)/(27*Cycle*Liter),
    IMEP[max, 5500] ->  
(8*Kilo*Minute*Pi*Radian*Watt)/(297*Circle*Cycle*Liter),
    BT[max, 5500] -> (Kilo*Minute*Watt)/(55*Circle), LHV ->  
(44*Joule*Mega)/Kilogram,
    BT[max, 3600] -> (236*Meter*Newton)/Radian, sfc ->  
(9*Kilogram)/(100*Joule*Mega), Vd -> 3*Liter,
    z -> (2*Circle)/Cycle}}

There may be some other reason why you wanted to use Reduce, but the  
above seems to me to give as complete an answer as you could hope to  
get.


Andrzej Kozlowski
Chiba, Japan
http://www.akikoz.net/andrzej/index.html
http://www.mimuw.edu.pl/~akoz/


  • Prev by Date: Re: Precision/FullSimplify
  • Next by Date: Re: Precision/FullSimplify
  • Previous by thread: Reduce bug report
  • Next by thread: Re: Reduce bug report