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/

**References**:**Reduce bug report***From:*Chris Chiasson <chris.chiasson@gmail.com>