
how to find intersection between 3 functions?
11 views (last 30 days)
Show older comments
Hello I have the following code which has 3 functions and plots all 3 of them. My question is is there anyway to get some type of mark on the graph that shows where all 3 functions intersect? also is there a way to change the color of the 3 functions? Thank you for your help.
[X,Y] = meshgrid(-10:0.2:10,-10:0.2:10);
Z1 = X.^2+Y-37;
Z2=X-Y.^2-5;
Z3=3-X-Y;
figure
surface(X,Y,Z1)
hold on
surface(X,Y,Z2)
surface(X,Y,Z3)
view(3)
xlabel('x')
ylabel('y')
zlabel('z')
0 Comments
Answers (2)
John D'Errico
on 16 Dec 2016
Easier than you think.
First of all, if your goal is to plot three surfaces with different colors on each, then use handle graphics.
H1 = surface(X,Y,Z1);
hold on
H2 = surface(X,Y,Z2);
H3 = surface(X,Y,Z3);
set(H1,'facecolor','r')
set(H2,'facecolor','g')
set(H3,'facecolor','b')
Next, where do the surfaces intersect? First, find where surfaces 1 and 2 intersect, and plot that curve. Then find where surfaces 1 and 3 intersect, plotting that curve. Any point of intersection of those curves in the (x,y) plane MUST be a point of intersection of all three surfaces.
figure
contour(Z1-Z2,[0 0])
hold on
contour(Z1-Z3,[0 0])
contour(Z2-Z3,[0 0])

The implication being there are exactly two points where the three surfaces intersect. I could have introduced the contours of z2-z3 too. But the above plot is entirely adequate for this problem.
You can access the contour paths themselves, by use of the output arguments to contour, or you could have used the contourc function to give you the contour path without a plot at all.
Finally, find the intersection points along the paths using Doug Schwarz's nice tool - intersections, as found on the file exchange for download. Other tools are also on the FEX for this purpose.
3 Comments
John D'Errico
on 16 Dec 2016
Edited: John D'Errico
on 16 Dec 2016
You did not think about what I did here. Next time, try reading what I wrote. Then think about what you read.
Each of your functions is a function of TWO variables. The same two variables, (X,Y), over the same domain. The third variable, Z, is the dependent variable for each function.
What I showed you how to do locates the intersections, in the (x,y) plane. That location is in TWO DIMENSIONS. That is what contour does nicely. If you then want to identify those points on the surfaces, all three functions have the same value of Z at the located points, although that value need not be the same for each point.
So, again, think. You asked to find the point(s) where z1(x,y)=z2(x,y)=z3(x,y). I showed you exactly how to find those locations.
Walter Roberson
on 17 Dec 2016
syms X Y Z real
Z1 = X.^2+Y-37 == Z;
Z2 = X-Y.^2-5 == Z;
Z3 = 3-X-Y == Z;
sols = solve(Z1, Z2, Z3);
sols.X, sols.Y and sols.Z will then be the exact locations of intersection. For example one of the X coordinates is
(35*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2))/(288*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/6)) - ((294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2)/(6*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/6)) + (588*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) - 30049*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) - 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) + 1152*2^(1/2)*6^(1/2)*(288*3^(1/2)*32626735^(1/2) + 5937263)^(1/2))^(1/2)/(6*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/6)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/4)) - 3)^3/96 - (3*((294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2)/(6*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/6)) + (588*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) - 30049*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) - 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) + 1152*2^(1/2)*6^(1/2)*(288*3^(1/2)*32626735^(1/2) + 5937263)^(1/2))^(1/2)/(6*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/6)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/4)) - 3)^2)/32 + (35*(588*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) - 30049*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) - 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/2) + 1152*2^(1/2)*6^(1/2)*(288*3^(1/2)*32626735^(1/2) + 5937263)^(1/2))^(1/2))/(288*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/6)*(294*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(1/3) + 9*((32*3^(1/2)*32626735^(1/2))/3 + 5937263/27)^(2/3) + 30049)^(1/4)) + 49/16
If you work this through... you will find that it gives the same answer that John D'Errico was suggesting.
0 Comments
See Also
Categories
Find more on Surface and Mesh Plots in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!