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.