MathGroup Archive 2009

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

Search the Archive

Re: Solve and the order of variables to solve for (v7.0)

  • To: mathgroup at smc.vnet.net
  • Subject: [mg105068] Re: [mg105041] Solve and the order of variables to solve for (v7.0)
  • From: Andrzej Kozlowski <akoz at mimuw.edu.pl>
  • Date: Thu, 19 Nov 2009 07:25:28 -0500 (EST)
  • References: <200911191021.FAA14496@smc.vnet.net>

The simplest way is

res = Solve[{D[profitHome[\[Epsilon], pht, ph], yh] == 0,
   D[profitHome[\[Epsilon], pht, ph], yht] == 0,
   D[profitFor[\[Epsilon], pf, pft], yf] == 0,
   D[profitFor[\[Epsilon], pf, pft], yft] == 0}, {yh, yht, yf, yft},
  Sort -> False]

but it may have a cost. Solve chooses an ordering of the variables that 
it believes will be the most efficient and the answer is returned in 
this particular order. Probably Solve is going to be more often right 
than wrong so setting the Sort option to False may give you poorer 
performance (but it may also not).

The alternative is to let Solve choose its own ordering and then sort 
the answers to put them in the order you want them to be. It's easy 
enough to program this but I don't think it is worth bothering about 
unless you find that the simple solution above seriously damages 
performance.

Andrzej Kozlowski


On 19 Nov 2009, at 19:21, kristoph wrote:

> Hi,
>
> consider the following problem:
>
> costsHome[yh_, yht_] := w (yh^2 + 10/100 yh yht + 110/100 yht^2);
> costsFor[yf_, yft_] := wt (110/100 yf^2 + 10/100 yf yft + yft^2);
>
> profitHome[\[Epsilon]_, pht_, ph_] := \[Epsilon] pht yht + ph yh -
>   costsHome[yh, yht];
> profitFor[\[Epsilon]_, pf_, pft_] :=
>  1/\[Epsilon] pf yf + pft yft - costsFor[yf, yft];
>
> res = Solve[{D[profitHome[\[Epsilon], pht, ph], yh] == 0,
>   D[profitHome[\[Epsilon], pht, ph], yht] == 0,
>   D[profitFor[\[Epsilon], pf, pft], yf] == 0,
>   D[profitFor[\[Epsilon], pf, pft], yft] == 0}, {yh, yht, yf, yft}]
>
> The list of results I get is sorted not in the way I would like to
> have it, i.e. yh, yht, yf and yft.
>
> How do I always the the list to be the way I want it?
>
> The order even changes if I let
>
> costsHome[yh_, yht_] := w (yh^2 + yht^2);
> costsFor[yf_, yft_] := wt (yf^2 + yft^2);
>
> Does anybody know why? Thanks in advance.
>



  • Prev by Date: Re: Re: Undo in Mathematica
  • Next by Date: Re: Permanent Computation Efficiency
  • Previous by thread: Solve and the order of variables to solve for (v7.0)
  • Next by thread: Re: Solve and the order of variables to solve for (v7.0)