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?

 Respuesta aceptada

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 comentarios

maryam es
maryam es el 15 de Mayo de 2023
Editada: maryam es el 15 de Mayo de 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

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

el 15 de Mayo de 2023

Comentada:

el 16 de Mayo de 2023

Community Treasure Hunt

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

Start Hunting!

Translated by