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

• To: mathgroup at smc.vnet.net
• Subject: [mg105071] Re: [mg105041] Solve and the order of variables to solve for (v7.0)
• From: Bob Hanlon <hanlonr at cox.net>
• Date: Fri, 20 Nov 2009 06:37:19 -0500 (EST)

```\$Version

7.0 for Mac OS X x86 (64-bit) (February 19, 2009)

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}][[1]];

First /@ res

{yh,yht,yf,yft}

To force a specified order

desiredOrder = {yf, yh, yft, yht};

res2 = SortBy[res,
Position[desiredOrder, #[[1]]][[1, 1]] &];

desiredOrder == First /@ res2

True

Or slightly more compactly

res3 = SortBy[res,
Position[desiredOrder, #[[1]]] &];

desiredOrder == First /@ res3

True

Bob Hanlon

---- kristoph <kristophs.post at web.de> 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: Dynamic Control of Graphics
• Next by Date: Re: Re: Re: Undo in Mathematica
• Previous by thread: Re: Solve and the order of variables to solve for (v7.0)
• Next by thread: Re: How to instruct Math to take a certain (e.g. real) type of