Solving non linear equation "Circle" equations
6 views (last 30 days)
Show older comments
Hello I have a 20 non linear equations that I want to solve, I started with only three to check if it would be working but I always get an empty vector. I do not get any answers.
syms xa ya
eq1 = xa^2 + ya^2 == 84.4^2;
eq2 = (xa-40)^2 + ya^2 == 68^2;
eq3 = (xa-100.66)^2 + (ya-49.07)^2 == 52.59^2;
sol = solve([eq1, eq2, eq3],[xa,ya])
for example the above 3 circles intersect at one point which should be (51.24, 67.06) but I always get an empty object. I know I can solve each 2 of them seperately and compare results, but my main object is to solve 20 equations with 15 unknowns at once.
but even for 2 unknowns I do not get answers.
sol =
struct with fields:
xa: [0×1 sym]
ya: [0×1 sym]
5 Comments
Accepted Answer
Matt J
on 15 Sep 2021
Edited: Matt J
on 15 Sep 2021
Because you cannot be certain of an exact 3-way (or n-way) intersection, you need to use a numerical least squares solver like fsolve.
opts=optimoptions(@fsolve,'StepTol',1e-8,'FunctionTol',1e-8,'OptimalityTol',1e-8);
[xy,Fxy]=fsolve(@modelEq,[51.24, 67.06],opts)
function F=modelEq(p)
xa=p(1); ya=p(2);
eq1 = xa^2 + ya^2 - 84.4^2;
eq2 = (xa-40)^2 + ya^2 - 68^2;
eq3 = (xa-100.66)^2 + (ya-49.07)^2 - 52.592^2;
F=[eq1, eq2, eq3];
end
More Answers (2)
Walter Roberson
on 15 Sep 2021
syms xa ya R3
xc = [0; 40; 100.66];
yc = [0; 0; 49.07];
r3 = 52.59;
R = [84.4; 68; R3];
eqn = (xa-xc).^2 + (ya-yc).^2 == R.^2;
sol = solve(eqn(1:2), [xa, ya])
sol.xa
sol.ya
r3_needed = sqrt(lhs(vpa(subs(eqn(3), sol))))
r3_needed - r3
RR = double([R(1:2); r3_needed(2)]);
viscircles([xc, yc], RR, 'Color', 'k')
hold on
scatter(sol.xa, sol.ya, 60, 'r+')
hold off
0 Comments
Bjorn Gustavsson
on 15 Sep 2021
If the 20 equations are of the same form you will have a vastly overdetermined problem (that in general will not have any exact solution which will lead you to some kind of least-squares like solutions). The most natural first-stab might be to simply solve pairwise problems and then check if you have any common solution to all (or some subsets).
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!