Vpasolve can not find a solution that I know it exist
5 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Roque Ivan Acosta Bellizzi
le 14 Fév 2024
Commenté : Roque Ivan Acosta Bellizzi
le 14 Fév 2024
clear
clc
%% Parameters and Assumptions
syms x11 x12 x21 x22 positive % Actions
syms a11 a12 a21 a22 positive % Marginal effects
syms c1 c2 positive % Costs
syms W1 W2 positive % Budget constraint
syms epsilon1 epsilon2 positive % Inital voters (can be seen as partisian voters)
syms b1 b2 positive % Total effects
syms V positive % Prize of winning
assume(a11 > 0 & a11 < 1)
assume(a12 > 0 & a12 < 1)
assume(a21 > 0 & a21 < 1)
assume(a22 > 0 & a22 < 1)
%% Theoretical Model
% Votes gain functions
f1 = b1*(x11^a11)*(x12^a12);
f2 = b2*(x21^a21)*(x22^a22);
F1 = f1 + epsilon1;
F2 = f2 + epsilon2;
% Payoff - Probability of winning.
P1 = (F1/(F1 + F2))*V;
P2 = (F2/(F1 + F2))*V;
DP11 = diff(P1,x11);
DP21 = diff(P2,x21);
isAlways(DP11 > 0)
isAlways(DP21 > 0)
% The probability of winning is strictly increasing in activity one (and also two).
% Therefore candidates spend all budget.
% Budget constraints
BC1 = W1 == x11*c1 + x12*c2;
BC2 = W2 == x21*c1 + x22*c2;
%% Theoretical Solution
BC1 = isolate(BC1,x12);
BC2 = isolate(BC2,x22);
P1 = subs(P1, lhs(BC1), rhs(BC1));
P2 = subs(P2, lhs(BC2), rhs(BC2));
DP11 = diff(P1,x11);
DP21 = diff(P2,x21);
eqns1 = [DP11 == 0];
vars1 = [x11];
S11 = solve(eqns1,vars1,'Real',true);
eqns2 = [DP21 == 0];
vars2 = [x21];
S21 = solve(eqns2,vars2,'Real',true);
% S11 and S21 are the equilibrium efforts of activity one for candidates one and two.
S12 = (W1 - S11*c1)/c2;
S22 = (W2 - S21*c1)/c2;
S12 = simplify(S12);
S22 = simplify(S22);
%% Equations
% First order conditions
Eq1 = ((a11*W1)/(c1*(a11+a12))) - x11 == 0;
Eq2 = ((a12*W2)/(c2*(a21+a22))) - x12 == 0;
% Election result (it is number of votes)
Eq3 = f1 - 1189313 == 0;
Eq4 = f2 - 1152271 == 0;
% Parameter restrictions
Eq5 = a11 + a12 - 1 == 0;
Eq6 = a21 + a22 - 1 == 0;
%% Substitution
% Candidate number one is LLP and candidate number two is DM.
Data = [28.752/c1,0.911/c2,29.664,31.012/c1,2.490/c2,33.502,1022013,1143681,1,1];
% The budget is in millions of UYU, epsilon1 and epsilon2 is number of inicial voters.
% Since do not have enough equations for parameters, assume b1 = b2 = 1.
% Last two digits of the vector "Data" reflect that.
E1 = subs(Eq1,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data);
E2 = subs(Eq2,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data);
E3 = subs(Eq3,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data);
E4 = subs(Eq4,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data);
E5 = a11 + a12 -1 == 0;
E6 = a21 + a22 -1 == 0;
%% Calibration
X0 = [0 1; 0 1; 0 1; 0 1; 0 Inf; 0 Inf];
S = vpasolve([E1,E2,E3,E4,E5,E6],[a11, a12, a21, a22, c1, c2],X0)
I know there is a solution to this system of equations but Matlab does not find it and I can see what is wrong on the code.
0 commentaires
Réponse acceptée
Torsten
le 14 Fév 2024
Modifié(e) : Torsten
le 14 Fév 2024
Maybe it must read
Eq2 = ((a21*W2)/(c2*(a21+a22))) - x12 == 0;
instead of
Eq2 = ((a12*W2)/(c2*(a21+a22))) - x12 == 0;
?
clear
clc
%% Parameters and Assumptions
syms x11 x12 x21 x22 positive % Actions
syms a11 a12 a21 a22 positive % Marginal effects
syms c1 c2 positive % Costs
syms W1 W2 positive % Budget constraint
syms epsilon1 epsilon2 positive % Inital voters (can be seen as partisian voters)
syms b1 b2 positive % Total effects
syms V positive % Prize of winning
assume(a11 > 0 & a11 < 1)
assume(a12 > 0 & a12 < 1)
assume(a21 > 0 & a21 < 1)
assume(a22 > 0 & a22 < 1)
%% Theoretical Model
% Votes gain functions
f1 = b1*(x11^a11)*(x12^a12);
f2 = b2*(x21^a21)*(x22^a22);
F1 = f1 + epsilon1;
F2 = f2 + epsilon2;
% Payoff - Probability of winning.
P1 = (F1/(F1 + F2))*V;
P2 = (F2/(F1 + F2))*V;
DP11 = diff(P1,x11);
DP21 = diff(P2,x21);
% The probability of winning is strictly increasing in activity one (and also two).
% Therefore candidates spend all budget.
% Budget constraints
BC1 = W1 == x11*c1 + x12*c2;
BC2 = W2 == x21*c1 + x22*c2;
%% Theoretical Solution
BC1 = isolate(BC1,x12);
BC2 = isolate(BC2,x22);
P1 = subs(P1, lhs(BC1), rhs(BC1));
P2 = subs(P2, lhs(BC2), rhs(BC2));
DP11 = diff(P1,x11);
DP21 = diff(P2,x21);
eqns1 = [DP11 == 0];
vars1 = [x11];
S11 = solve(eqns1,vars1,'Real',true);
eqns2 = [DP21 == 0];
vars2 = [x21];
S21 = solve(eqns2,vars2,'Real',true);
% S11 and S21 are the equilibrium efforts of activity one for candidates one and two.
S12 = (W1 - S11*c1)/c2;
S22 = (W2 - S21*c1)/c2;
S12 = simplify(S12);
S22 = simplify(S22);
%% Equations
% First order conditions
Eq1 = ((a11*W1)/(c1*(a11+a12))) - x11 == 0;
Eq2 = ((a21*W2)/(c2*(a21+a22))) - x12 == 0;
% Election result (it is number of votes)
Eq3 = f1 - 1189313 == 0;
Eq4 = f2 - 1152271 == 0;
% Parameter restrictions
Eq5 = a11 + a12 - 1 == 0;
Eq6 = a21 + a22 - 1 == 0;
%% Substitution
% Candidate number one is LLP and candidate number two is DM.
Data = [28.752/c1,0.911/c2,29.664,31.012/c1,2.490/c2,33.502,1022013,1143681,1,1];
% The budget is in millions of UYU, epsilon1 and epsilon2 is number of inicial voters.
% Since do not have enough equations for parameters, assume b1 = b2 = 1.
% Last two digits of the vector "Data" reflect that.
E1 = subs(Eq1,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E2 = subs(Eq2,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E3 = subs(Eq3,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E4 = subs(Eq4,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E5 = a11 + a12 -1 == 0
E6 = a21 + a22 -1 == 0
syms c1s c2s
sola = solve([E1,E2,E5,E6],[a11 a12 a21 a22]);
E3 = subs(E3,[a11 a12 a21 a22],[sola.a11 sola.a12 sola.a21 sola.a22]);
E4 = subs(E4,[a11 a12 a21 a22],[sola.a11 sola.a12 sola.a21 sola.a22]);
E3 = E3 + 1189313;
E3 = simplify(log(lhs(E3))) == log(rhs(E3));
E3 = subs(E3,[log(c1) log(c2)],[c1s c2s]);
E4 = E4 + 1152271;
E4 = simplify(log(lhs(E4))) == log(rhs(E4));
E4 = subs(E4,[log(c1) log(c2)],[c1s c2s]);
solcs = solve([E3 E4],[c1s c2s]);
a11 = vpa(sola.a11)
a12 = vpa(sola.a12)
a21 = vpa(sola.a21)
a22 = vpa(sola.a22)
c1 = vpa(exp(solcs.c1s))
c2 = vpa(exp(solcs.c2s))
Plus de réponses (1)
Walter Roberson
le 14 Fév 2024
Modifié(e) : Walter Roberson
le 14 Fév 2024
There is no solution in the reals.
clear
clc
%% Parameters and Assumptions
syms x11 x12 x21 x22 positive % Actions
syms a11 a12 a21 a22 positive % Marginal effects
syms c1 c2 positive % Costs
syms W1 W2 positive % Budget constraint
syms epsilon1 epsilon2 positive % Inital voters (can be seen as partisian voters)
syms b1 b2 positive % Total effects
syms V positive % Prize of winning
assume(a11 > 0 & a11 < 1)
assume(a12 > 0 & a12 < 1)
assume(a21 > 0 & a21 < 1)
assume(a22 > 0 & a22 < 1)
%% Theoretical Model
% Votes gain functions
f1 = b1*(x11^a11)*(x12^a12);
f2 = b2*(x21^a21)*(x22^a22);
F1 = f1 + epsilon1;
F2 = f2 + epsilon2;
% Payoff - Probability of winning.
P1 = (F1/(F1 + F2))*V;
P2 = (F2/(F1 + F2))*V;
DP11 = diff(P1,x11);
DP21 = diff(P2,x21);
isAlways(DP11 > 0)
isAlways(DP21 > 0)
% The probability of winning is strictly increasing in activity one (and also two).
% Therefore candidates spend all budget.
% Budget constraints
BC1 = W1 == x11*c1 + x12*c2;
BC2 = W2 == x21*c1 + x22*c2;
%% Theoretical Solution
BC1 = isolate(BC1,x12);
BC2 = isolate(BC2,x22);
P1 = subs(P1, lhs(BC1), rhs(BC1));
P2 = subs(P2, lhs(BC2), rhs(BC2));
DP11 = diff(P1,x11);
DP21 = diff(P2,x21);
eqns1 = [DP11 == 0];
vars1 = [x11];
S11 = solve(eqns1,vars1,'Real',true);
eqns2 = [DP21 == 0];
vars2 = [x21];
S21 = solve(eqns2,vars2,'Real',true);
% S11 and S21 are the equilibrium efforts of activity one for candidates one and two.
S12 = (W1 - S11*c1)/c2;
S22 = (W2 - S21*c1)/c2;
S12 = simplify(S12);
S22 = simplify(S22);
%% Equations
% First order conditions
Eq1 = ((a11*W1)/(c1*(a11+a12))) - x11 == 0;
Eq2 = ((a12*W2)/(c2*(a21+a22))) - x12 == 0;
% Election result (it is number of votes)
Eq3 = f1 - 1189313 == 0;
Eq4 = f2 - 1152271 == 0;
% Parameter restrictions
Eq5 = a11 + a12 - 1 == 0;
Eq6 = a21 + a22 - 1 == 0;
%% Substitution
% Candidate number one is LLP and candidate number two is DM.
Data = [28.752/c1,0.911/c2,29.664,31.012/c1,2.490/c2,33.502,1022013,1143681,1,1];
% The budget is in millions of UYU, epsilon1 and epsilon2 is number of inicial voters.
% Since do not have enough equations for parameters, assume b1 = b2 = 1.
% Last two digits of the vector "Data" reflect that.
E1 = subs(Eq1,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E2 = subs(Eq2,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E3 = subs(Eq3,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E4 = subs(Eq4,[x11,x12,W1,x21,x22,W2,epsilon1,epsilon2,b1,b2],Data)
E5 = a11 + a12 -1 == 0
E6 = a21 + a22 -1 == 0
eqns = [E1, E2, E3, E4, E5, E6].';
partial_a11 = solve(eqns(1), a11, 'returnconditions', true)
eqns2 = subs(eqns(2:end), a11, partial_a11.a11)
partial_a12 = solve(eqns2(4), a12)
eqns3 = subs(eqns2([1 2 3 5]), a12, partial_a12)
partial_a21 = solve(eqns3(4), a21)
eqns4 = subs(eqns3([1 2 3]), a21, partial_a21)
%partial_c2 = Inf; %by inspection
%at this point we have something divided by c2, raised to the power of a22.
%With c2 being inf to satisfy 3677/(30900*c2) == 0, normally
%(249/(100*c2))^a22 would give 0^a22 which would give 0, and 0 times something minus something cannot give 0.
% But if a22 is 0 then it would be 0^0 which would give 1, and we survive
% anther step
partial_a22 = 0; %by inspection
eqns5 = subs(eqns4(2:end), a22, partial_a22)
partial_c1 = solve(eqns5(2), c1)
eqns6 = subs(eqns5(1), c1, partial_c1)
partial_c2 = solve(eqns6, c2)
subs(eqns4(1), c2, partial_c2)
Voir également
Catégories
En savoir plus sur Equation Solving dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!