Unable to find explicit solution in Lagrangian optimization
Afficher commentaires plus anciens
I am trying to find the analytical solution to the following problem:

I tried solving it by coding the Lagrangian by hand and use solve, but Matlab prints the warning: "Unable to find explicit solution".
I used the following code:
syms e1 e2 p1 p2 rho gamma lambda
syms E H(e1,e2)
H(e1,e2) = (e1^rho +e2^rho)^(1/rho)
L(e1, e2, lambda) = p1*e1 +p2*e2 + lambda*(H(e1,e2)-E)
L_e1 = diff(L,e1) == 0
L_e2 = diff(L,e2) == 0
L_lambda = diff(L,lambda) == 0
system = [L_e1,L_e2,L_lambda]
[e1_s,e2_s,lambda_s]=solve(system,[e1 e2 lambda])
Do you know what I could do to solve this? Or is there a different and better way to find an analytical solution?
1 commentaire
Réponse acceptée
Plus de réponses (1)
If you make rho explicit, it seems to be able to find solutions. I doubt there would be a closed-form solution for general rho.
rho=2;
syms e1 e2 p1 p2 gamma lambda
syms E H(e1,e2)
H(e1,e2) = (e1^rho +e2^rho)
L(e1, e2, lambda) = p1*e1 +p2*e2 + lambda*(H(e1,e2)-E^rho)
L_e1 = diff(L,e1) == 0
L_e2 = diff(L,e2) == 0
L_lambda = diff(L,lambda) == 0
system = [L_e1,L_e2,L_lambda]
[e1_s,e2_s,lambda_s]=solve(system,[e1 e2 lambda])
4 commentaires
Fabian
le 11 Fév 2024
is there a way to do the calculations for rho in [0 1] only?
No. Even if rho is a numerical value, you won't get an explicit solution for e1 in most cases because you had to solve the below equation df=0 explicitly for e1:
syms e1 e2 rho E p1 p2
f = p1*e1 + p2*(E^rho-e1^rho)^(1/rho)
df = diff(f,e1)
solve(df==0,e1)
Even when it can be explicitly solved, the result isn't nice:
rho=sym(1/4);
syms e1 e2 p1 p2 gamma lambda
syms H(e1,e2)
H(e1,e2) = (e1^rho +e2^rho);
L(e1, e2, lambda) = p1*e1 +p2*e2 + lambda*(H(e1,e2)-1);
L_e1 = diff(L,e1) == 0;
L_e2 = diff(L,e2) == 0;
L_lambda = diff(L,lambda) == 0;
system = [L_e1,L_e2,L_lambda];
[e1_s,e2_s,lambda_s]=solve(system,[e1 e2 lambda])
You can eliminate the root() constructs, but the result is confusing.
rho=sym(1/4);
syms e1 e2 p1 p2 gamma lambda
syms H(e1,e2)
H(e1,e2) = (e1^rho +e2^rho);
L(e1, e2, lambda) = p1*e1 +p2*e2 + lambda*(H(e1,e2)-1);
L_e1 = diff(L,e1) == 0;
L_e2 = diff(L,e2) == 0;
L_lambda = diff(L,lambda) == 0;
system = [L_e1,L_e2,L_lambda];
[e1_s,e2_s,lambda_s]=solve(system,[e1 e2 lambda], 'maxdegree', 3)
Catégories
En savoir plus sur Symbolic Math Toolbox dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!













