Solving system of quadratic equations

28 views (last 30 days)
Hi guys!
I'm trying to solve a set of quadratic equations for a code I'm working on. I've tried to use vpasolve and solve but the code doesn't bring any solution. The equations are correct and I'm sure there are solutions to it as I can solve them with Mathematica but I'd like to be able to solve them in matlab so that I can write my code in there instead of Mathematica.
The code is something like this:
syms y1 y2 y3 y4 z1 z2
depd = [y1 y2 y3 y4 z1 z2];
% Assign the independent variables
x1 = sqrt(2/3);
x2 = sqrt(1/6);
x3 = sqrt(1/2);
x4 = sqrt(1/2);
z3 = sqrt(1/2);
z4 = sqrt(1/2);
prev = [-0.438450, -0.505030, -0.076748, -0.048791, 0.455646, 0.989215];
% write constraint equations
eq1 = (x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2 - 1/3 == 0;
eq2 = (x3 - x1)^2 + (y3 - y1)^2 + (z3 - z1)^2 - tan(pi/12) == 0;
eq3 = (x3 - x2)^2 + (y3 - y2)^2 + (z3 - z2)^2 - tan(pi/12) == 0;
eq4 = (y4 - x4)^2 + (z4 - y4)^2 + (x4 - z4)^2 - 1 == 0;
eq5 = (y4 - x1)^2 + (z4 - y1)^2 + (x4 - z1)^2 - 2 == 0;
eq6 = (z3 - x2)^2 + (x3 + y2)^2 + (y3 + z2)^2 - 0.84529946 == 0;
eqs = [eq1, eq2, eq3, eq4, eq5, eq6];
sol = vpasolve(eqs, depd, prev);
I don't need a precise solution but rather a numerical approximation. Is there something that can provide that in Matlab?
  2 Comments
Matt J
Matt J on 11 Apr 2022
Are you sure the first equation shouldn't be,
eq1 = (x2 - x1)^2 + (y2 - y1)^2 + (z2 - z1)^2 - 1/3 == 0;
Alessandro Arduino
Alessandro Arduino on 11 Apr 2022
Yes I just updated it as you commented, regardless the problem is still there

Sign in to comment.

Accepted Answer

Davide Masiello
Davide Masiello on 11 Apr 2022
I am not really confident with Simulink, but it does work on Matlab using the fsolve function.
In the equation, I changed z1 and z2 to y(5) and y(6) respectively so to make possible the indexing of the dependent variable.
clear,clc
y0 = [-0.438450, -0.505030, -0.076748, -0.048791, 0.455646, 0.989215];
y = fsolve(@eqSystem,y0)
Equation solved. fsolve completed because the vector of function values is near zero as measured by the value of the function tolerance, and the problem appears regular as measured by the gradient.
y = 1×6
-0.4416 -0.3699 0.0505 0.0000 0.5894 0.7509
function out = eqSystem(y)
x1 = sqrt(2/3);
x2 = sqrt(1/6);
x3 = sqrt(1/2);
x4 = sqrt(1/2);
z3 = sqrt(1/2);
z4 = sqrt(1/2);
out = [ (x2 - x1)^2 + (y(2) - y(1))^2 + (y(6) - y(5)) - 1/3;...
(x3 - x1)^2 + (y(3) - y(1))^2 + (z3 - y(5))^2 - tan(pi/12);...
(x3 - x2)^2 + (y(3) - y(2))^2 + (z3 - y(6))^2 - tan(pi/12);...
(y(4) - x4)^2 + (z4 - y(4))^2 + (x4 - z4)^2 - 1;...
(y(4) - x1)^2 + (z4 - y(1))^2 + (x4 - y(5))^2 - 2;...
(z3 - x2)^2 + (x3 + y(2))^2 + (y(3) + y(6))^2 - 0.84529946;...
];
end
  2 Comments
Alessandro Arduino
Alessandro Arduino on 11 Apr 2022
Thank you very much! This should do it!
Alex Sha
Alex Sha on 12 Apr 2022
There are four solutions:
No. y1 y2 y3 y4 z1 z2
1 -0.408248290310322 -0.408248290883343 -2.65940075527358E-10 5.66489492618543E-16 0.408248289890841 0.816496580354705
2 -0.561883068548743 -0.453705322086167 -0.0890364837212022 1.4142135623731 0.527109082977269 0.9207640611459
3 -0.332314192176063 -0.0311689186229293 -0.387501968689092 5.89828382789581E-16 1.21003557681 0.934394159596848
4 -0.473380938970007 -0.109067418601998 -0.390919363116206 1.4142135623731 1.20628926550608 1.02205483456621

Sign in to comment.

More Answers (0)

Categories

Find more on Systems of Nonlinear Equations in Help Center and File Exchange

Products


Release

R2021a

Community Treasure Hunt

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

Start Hunting!