# Help explain failure of Solve method to solve economic equation

Below is an economic equation consisting of Y, Ki, Alpha, G, Ki, K, and two parameters Epsilon and Eta. Mathematica's Solve method computes G, in terms of the other variables, but fails to solve for Ki, as shown below. I have included an 'Assuming block' to help push a solution for Ki, yet this addition does not guide the solution.

What makes Ki difficult in solve to this case?

A call to the Solve method for G works with a warning:

Solve[Y == α Ki ((G (Ki/K)^(1 - ϵ))/Ki)^η, G]


Solve::ifun: Inverse functions are being used by Solve, so some solutions may not be found; use Reduce for complete solution information.

Here is an acceptable solution for G:

{{G->K (Ki/K)^ϵ (Y/(α Ki))^(1/η)}}


A similiar call for Ki fails. What makes Ki uniquely difficult in this case?

Assuming[{{Y, Ki, G, K, α , ϵ, η} ∈
Reals, 1 >= η >= 0, 1 >= ϵ >= 0, K > 0, Y > 0,
Ki > 0, G > 0, α > 0},
Simplify[
Solve[Y = α Ki ((G (Ki/K)^(1 - ϵ))/Ki)^η, Ki]]]


Solve::nsmet: This system cannot be solved with the methods available to Solve.

• Note: K is a symbol with a predefined meaning. It is better not to use it as a symbolic variable (more generically, try to refrain from using upper case variables; use y,g,ki instead of Y,G,Ki). Note also that equations use == instead of =. May 12, 2019 at 16:20

Solve is awesome if the expressions involve rational functions. Otherwise it may need a little assistance.

Solve[Y == α Ki ((G (Ki/K)^(1 - ϵ))/Ki)^η // PowerExpand, Ki]


Including a switch of '//PowerExpand' led to an answer.

Changing the variable names to lower case maybe valuable, yet I did not test this suggestion.

Solve[Y == α Ki ((G (Ki/K)^(1 - ϵ))/Ki)^η // PowerExpand, Ki]

{{Ki->((Y G^-η K^(η (1-ϵ)))/α)^(1/(1-η ϵ))}}

Solve[Y == α Ki ((G (Ki/K)^(1 - ϵ))/Ki)^η // PowerExpand, K]

{{K->((Y G^-η Ki^(η+η (-(1-ϵ))-1))/α)^(1/(η (ϵ-1)))}}


From PowerExpand section possible issues:

This implies that the equation in this generality should not be solved despite there is a result!

Assuming[{{Ys, Ki, Gs, Ks, \[Alpha], \[Epsilon], \[Eta]} \[Element]
Reals, 1 >= \[Eta] >= 0, 1 >= \[Epsilon] >= 0, Ks > 0, Y > 0,
Ki > 0, Gs > 0, \[Alpha] > 0},
Solve[Ys ==
PowerExpand[\[Alpha] Ki ((Gs (Ki/Ks)^(1 - \[Epsilon]))/Ki)^\[Eta]],
Ki]]


{{Ki -> ((Ks^((1 - \[Epsilon])*\[Eta])*Ys)/(Gs^\[Eta]*\[Alpha]))^(1/(1 - \[Epsilon]*\[Eta]))}}


Reduce does not produce an answer even with PowerExpand.

Assuming[{Element[{Ys, Ki, Gs, Ks, \[Alpha], \[Epsilon], \[Eta]},
Reals], 1 >= \[Eta] >= 0, 1 >= \[Epsilon] >= 0,
Ks > 0, Y > 0, Ki > 0, Gs > 0, \[Alpha] > 0},
Solve[Ys ==
PowerExpand[\[Alpha]*
Ki*((Gs*(Ki/Ks)^(1 - \[Epsilon]))/Ki)^\[Eta]], Ks]]


{{Ks -> ((Ki^(-1 + \[Eta] - (1 - \[Epsilon])*\[Eta])*Ys)/(Gs^\[Eta]*\[Alpha]))^(1/((-1 + \[Epsilon])*\[Eta]))}}


So Automatic->True is not very reliable. And using this advice leds to the concept to put the Assuming conditions into the Assumption options of PowerExpand.

PowerExpand[\[Alpha] Ki ((Gs (Ki/Ks)^(1 - \[Epsilon]))/Ki)^\[Eta],
Assumptions -> 1 >= \[Eta] >= 0]

E^(-2*I*Pi*\[Eta]*Floor[1/2 - Arg[Ki]/(2*Pi) + Arg[Ks]/(2*Pi)] +
2*I*Pi*(1 - \[Epsilon])*\[Eta]*Floor[1/2 - Arg[Ki]/(2*Pi) + Arg[Ks]/(2*Pi)] +
2*I*Pi*\[Eta]*Floor[1/2 - Arg[Gs]/(2*Pi) + Arg[Ki]/(2*Pi) - Im[(1 - \[Epsilon])*Log[Ki]]/
(2*Pi) - Im[(-1 + \[Epsilon])*Log[Ks]]/(2*Pi) +
Floor[1/2 - Arg[Ki]/(2*Pi) + Arg[Ks]/(2*Pi)]*Re[\[Epsilon]]])*Gs^\[Eta]*
Ki^(1 - \[Eta] + (1 - \[Epsilon])*\[Eta])*Ks^((-1 + \[Epsilon])*\[Eta])*\[Alpha]


From Assuming Assuming affects functions using the Assumptions :> $Assumptions option setting: This is an expression that Solve can not deal with and cope with. Quiet[Select[ToExpression /@ Names["System*"], Head[#] === Symbol && MemberQ[Options[#], Assumptions :>$Assumptions] &]]


{ArcLength, Area, ContinuedFractionK, Convolve, DEigensystem,
DEigenvalues, DifferenceDelta, DifferenceQuotient,
DifferenceRootReduce, DifferentialRootReduce, DirichletTransform,
DiscreteConvolve, DiscreteLimit, DiscreteMaxLimit, DiscreteMinLimit,
DiscreteRatio, DiscreteShift, DSolve, DSolveValue, Expectation,
ExpectedValue, ExponentialGeneratingFunction, FinancialBond,
FourierCoefficient, FourierCosCoefficient, FourierCosSeries,
FourierCosTransform, FourierSequenceTransform, FourierSeries,
FourierSinCoefficient, FourierSinSeries, FourierSinTransform,
FourierTransform, FourierTrigSeries, FullSimplify, FunctionExpand,
GeneratingFunction, GraphPropertyDistribution, GreenFunction,
HankelTransform, Integrate, InverseFourierCosTransform,
InverseFourierSequenceTransform, InverseFourierSinTransform,
InverseFourierTransform, InverseHankelTransform,
ItoProcess, LaplaceTransform, Limit, MaxLimit, MeijerGReduce,
MellinConvolve, MellinTransform, MinLimit, MomentOfInertia,
Perimeter, PiecewiseExpand, PossibleZeroQ, Probability, Product,
RegionDisjoint, RegionEqual, RegionMeasure, RegionMoment,
RegionWithin, Residue, Series, SeriesCoefficient, Simplify,
StratonovichProcess, Sum, SumConvergence, TensorDimensions,
TensorExpand, TensorRank, TensorReduce, TensorSymmetry, TimeValue,
TransformedProcess, Volume, ZTransform}

So not Solve and not Reduce. And not Arg.

The deal comes with Assumptions section Properties & Relation:

Assuming[{Element[{Ys, Ki, Gs, Ks, \[Alpha], \[Epsilon], \[Eta]},
Reals], 1 >= \[Eta] >= 0, 1 >= \[Epsilon] >= 0,
Ks > 0, Y > 0, Ki > 0, Gs > 0, \[Alpha] > 0}, {$Assumptions, Refine[-2*I*Pi*\[Eta]*Floor[1/2 - Arg[Ki]/(2*Pi) + Arg[Ks]/(2*Pi)] + 2*I*Pi*(1 - \[Epsilon])*\[Eta]* Floor[1/2 - Arg[Ki]/(2*Pi) + Arg[Ks]/(2*Pi)] + 2*I*Pi*\[Eta]* Floor[1/2 - Arg[Gs]/(2*Pi) + Arg[Ki]/(2*Pi) - Im[(1 - \[Epsilon])*Log[Ki]]/ (2*Pi) - Im[(-1 + \[Epsilon])*Log[Ks]]/(2*Pi) + Floor[1/2 - Arg[Ki]/(2*Pi) + Arg[Ks]/(2*Pi)]*Re[\[Epsilon]]]]}]  {(Ys | Ki | Gs | Ks | \[Alpha] | \[Epsilon] | \[Eta]) \[Element] Reals && 1 >= \[Eta] >= 0 && 1 >= \[Epsilon] >= 0 && Ks > 0 && Y > 0 && Ki > 0 && Gs > 0 && \[Alpha] > 0, 0} Assuming[{{Ys, Ki, Gs, Ks, \[Alpha], \[Epsilon], \[Eta]} \[Element] Reals, 1 >= \[Eta] >= 0, 1 >= \[Epsilon] >= 0, Ks > 0, Y > 0, Ki > 0, Gs > 0, \[Alpha] > 0}, {$Assumptions,
Solve[Ys ==
Refine[PowerExpand[
Refine[\[Alpha] Ki ((Gs (Ki/Ks)^(1 - \[Epsilon]))/Ki)^\[Eta]],
Assumptions -> 1 >= \[Eta] >= 0]], Ki]}]


{Element[Ys | Ki | Gs | Ks | \[Alpha] | \[Epsilon] | \[Eta], Reals] && 1 >= \[Eta] >= 0 && 1 >= \[Epsilon] >= 0 &&
Ks > 0 && Y > 0 && Ki > 0 && Gs > 0 && \[Alpha] > 0,
{{Ki -> ((Ks^((1 - \[Epsilon])*\[Eta])*Ys)/(Gs^\[Eta]*\[Alpha]))^(1/(1 - \[Epsilon]*\[Eta]))}}}


So that is better practice with Mathematica!

Assuming[{{Ys, Ki, Gs, Ks, \[Alpha], \[Epsilon], \[Eta]} \[Element]
Reals, 1 >= \[Eta] >= 0, 1 >= \[Epsilon] >= 0, Ks > 0, Y > 0,
Ki > 0, Gs > 0, \[Alpha] > 0}, {\$Assumptions,
Solve[Ys ==
Refine[PowerExpand[
Refine[\[Alpha] Ki ((Gs (Ki/Ks)^(1 - \[Epsilon]))/Ki)^\[Eta]],
Assumptions -> 1 >= \[Eta] >= 0]], Ks]}]


{Element[Ys | Ki | Gs | Ks | \[Alpha] | \[Epsilon] | \[Eta], Reals] && 1 >= \[Eta] >= 0 && 1 >= \[Epsilon] >= 0 &&
Ks > 0 && Y > 0 && Ki > 0 && Gs > 0 && \[Alpha] > 0,
{{Ks -> ((Ki^(-1 + \[Eta] - (1 - \[Epsilon])*\[Eta])*Ys)/(Gs^\[Eta]*\[Alpha]))^(1/((-1 + \[Epsilon])*\[Eta]))}}}


So the question was: "A similar call for Ki fails. What makes Ki uniquely difficult in this case?"

Nothing on the behalf of Mathematica or Wolfram Language. You just did not know how to operate with Assumption even not from the documentation page of Mathematica. But now I tought You, how to us Assumption for this problem and Your path for a more advanced user of Mathematica did a step ahead. I introduced to You the built-in Refine` and how it operates in Solve.

You know now two facts: