solving a multivariate equation (4 equations, 4 variables) for n rows data using loop

I wrote this code to solve a multivariate equation (4 equations, 4 variables) while aprim0,bprim0, xmid, and ymid are available
for i = 1:n
eqn1 = yup(i,1) - (aprim0(i,1)*xup(i,1)) - bprim0(i,1) == 0;
eqn2 = ydown(i,1) - (aprim0(i,1)*xdown(i,1)) - bprim0(i,1) == 0;
eqn3 = sqrt((xup(i,1) - xmid(i,1))^2 + (yup(i,1) - ymid(i,1))^2) - 0.008 == 0;
eqn4 = sqrt((xdown(i,1) - xmid(i,1))^2 + (ydown(i,1) - ymid(i,1))^2) - 0.008 == 0;
eqns = [eqn1, eqn2, eqn3, eqn4];
vars=[xup(i,1), yup(i,1), xdown(i,1), ydown(i,1)];
sol = solve('eqns', 'vars');
end
but it did not work in solve function, where is my mistake?

 Réponse acceptée

syms Aprim0 Bprim0 Xmid Ymid R real
syms Xup Xdown Yup Ydown
% Define system of equations
eqn1 = Yup - Aprim0*Xup - Bprim0 == 0;
eqn2 = Ydown - Aprim0*Xdown - Bprim0 == 0;
eqn3 = (Xup - Xmid)^2 + (Yup - Ymid)^2 - R^2 == 0;
eqn4 = (Xdown - Xmid)^2 + (Ydown - Ymid)^2 - R^2 == 0;
% Solve system of equations
sol = solve([eqn1,eqn2],[Yup,Ydown]);
eqn3 = subs(eqn3,Yup,sol.Yup);
sol_Xup = simplify(solve(eqn3,Xup));
eqn4 = subs(eqn4,Ydown,sol.Ydown);
sol_Xdown = simplify(solve(eqn4,Xdown));
sol_Yup = simplify(subs(sol.Yup,Xup,sol_Xup));
sol_Ydown = simplify(subs(sol.Ydown,Xdown,sol_Xdown));
% Insert numerical values for the parameters to get numerical values for
% the unknowns
n = 1;
aprim0(1) = 5.0;
bprim0(1) = 1.5;
xmid(1) = 6;
ymid(1) = -2.5;
r = 0.008;
for i = 1:n
xup(i,:) = double(subs(sol_Xup,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
xdown(i,:) = double(subs(sol_Xdown,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
yup(i,:) = double(subs(sol_Yup,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
ydown(i,:) = double(subs(sol_Ydown,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
end
xup
xup =
-0.5385 - 1.3077i -0.5385 + 1.3077i
xdown
xdown =
-0.5385 - 1.3077i -0.5385 + 1.3077i
yup
yup =
-1.1923 - 6.5385i -1.1923 + 6.5385i
ydown
ydown =
-1.1923 - 6.5385i -1.1923 + 6.5385i

4 commentaires

maryam es
maryam es le 15 Mai 2023
Modifié(e) : maryam es le 15 Mai 2023
thank you, but I recieved this error through running:
Conversion to struct from double is not possible.
my availabe data are vectors( a n*1 matrix)
syms Aprim0 Bprim0 Xmid Ymid R real
syms Xup Xdown Yup Ydown
% Define system of equations
eqn1 = Yup - Aprim0*Xup - Bprim0 == 0;
eqn2 = Ydown - Aprim0*Xdown - Bprim0 == 0;
eqn3 = (Xup - Xmid)^2 + (Yup - Ymid)^2 - R^2 == 0;
eqn4 = (Xdown - Xmid)^2 + (Ydown - Ymid)^2 - R^2 == 0;
sol = solve([eqn1, eqn2, eqn3, eqn4], [Yup, Ydown, Xup, Xdown]);
sol_Yup = sol.Yup;
sol_Ydown = sol.Ydown;
sol_Xup = sol.Xup;
sol_Xdown = sol.Xdown;
would seem to be a bit easier. It can solve to four solutions in one step instead of needing a series of steps.
thank you, but I recieved this error through running:
Conversion to struct from double is not possible.
my availabe data are vectors( a n*1 matrix)
In the code above, I set
n = 1;
aprim0(1) = 5.0;
bprim0(1) = 1.5;
xmid(1) = 6;
ymid(1) = -2.5;
r = 0.008;
and it gave the expected results. So I can't tell what's going wrong without seeing your code.
Maybe you overlooked that the symbolic variables are with a big letter in front while the numerical values appear with a small letter in front:
syms Aprim0 Bprim0 Xmid Ymid R real
syms Xup Xdown Yup Ydown
in contrast to
xup(i,:) = double(subs(sol_Xup,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
xdown(i,:) = double(subs(sol_Xdown,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
yup(i,:) = double(subs(sol_Yup,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
ydown(i,:) = double(subs(sol_Ydown,[Aprim0 Bprim0 Xmid Ymid R],[aprim0(i) bprim0(i) xmid(i) ymid(i) r]));
you are right
thank you so much

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur MATLAB dans Centre d'aide et File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by