5 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]

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

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

Bjorn Gustavsson
on 15 Sep 2021

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

Start Hunting!