plot a surface for g-f=0

1 view (last 30 days)
M
M on 5 Jun 2022
Commented: Star Strider on 6 Jun 2022
Hi, would you mind telling me how can I plot g-f=0 as a surface.
f=0.07.*z.^2./(0.09+z.^2) and g=0.003+0.01.*(42./(42+(y-z).^4))
Thanks in advance for any help.

Accepted Answer

Star Strider
Star Strider on 5 Jun 2022
That is challenging, however it will work with certain restrictions on the matrix dimensions (i.e. they must both be the same sizes) —
f = @(z) 0.07.*z.^2./(0.09+z.^2);
g = @(y,z) 0.003+0.01.*(42./(42+(y-z).^4));
N = 25;
y = linspace(-10, 10, N);
z = linspace(-10, 10, N);
[Y,Z] = ndgrid(y,z);
figure
surf(Y,Z,f(Z))
colormap(turbo)
figure
surf(Y,Z,g(Y,Z))
colormap(turbo)
figure
surf(Y,Z,g(Y,Z)-f(Z))
hold on
contour3(Y,Z,g(Y,Z)-f(Z), [0 0], '-r', 'LineWidth',2) % Plot Contour At 0
hold off
colormap(turbo)
.
  4 Comments
Paul
Paul on 6 Jun 2022
Why use ndgrid() here and not meshgrid()? Doesn't surf expect the first two arguments to be in meshgrid() format?
Star Strider
Star Strider on 6 Jun 2022
Either work, although the outputs are different. Some functions require meshgrid and others require ndgrid.

Sign in to comment.

More Answers (1)

Torsten
Torsten on 5 Jun 2022
Edited: Torsten on 5 Jun 2022
The "surface" f-g = 0 is a one-dimensional manifold in the y/z - plane and you get the corresponding curves using the "fimplicit" command:
fimplicit(@(y,z)0.07.*z.^2./(0.09+z.^2)-(0.003+0.01.*(42./(42+(y-z).^4))))

Community Treasure Hunt

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

Start Hunting!