       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)