plot a surface for g-f=0

1 vue (au cours des 30 derniers jours)
M
M le 5 Juin 2022
Commenté : Star Strider le 6 Juin 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.

Réponse acceptée

Star Strider
Star Strider le 5 Juin 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 commentaires
Paul
Paul le 6 Juin 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 le 6 Juin 2022
Either work, although the outputs are different. Some functions require meshgrid and others require ndgrid.

Connectez-vous pour commenter.

Plus de réponses (1)

Torsten
Torsten le 5 Juin 2022
Modifié(e) : Torsten le 5 Juin 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!

Translated by