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)
- Reply-to: hanlonr at cox.net
$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.