how can we plot this function as 3d with matlab?

how can we plot this fucntion as 3d with matlab? I tried surf and ezplot to plot function. but they didnt work. thanks for help.

 Akzeptierte Antwort

Matt Tearle
Matt Tearle am 12 Sep. 2012

0 Stimmen

Aww, cute.
The reason you can't use surf or ezplot is that these are not designed for this kind of equation. To use surf you need to have a surface defined as z = f(x,y). You have g(x,y,z) = 0. If you could rearrange that into z = f(x,y), you could use surf, but the equation you have doesn't really allow that.
So... instead, go back to the definition of the surface as g(x,y,z) = 0. Think of this as a particular isosurface of the function g(x,y,z) (with isosurface value of 0).
To make a surface in MATLAB from that kind of setup, you need (surprise, surprise) isosurface. Look in the documentation at the examples for isosurface. They will guide you through the visualization.
The one thing you need that isn't in the isosurface doc is to create the data to plot. (The examples do [x,y,z,v] = flow; which creates the data from a canned routine for a specific example.) So:
  1. You need to create 3 3-D arrays for x, y, and z, in the given range -- hint: linspace and meshgrid.
  2. Then you need to evaluate the function g(x,y,z) at each of those x, y, z locations: V = (X.^2+9*Y.^2/4+Z.^2-1).^3 - X.^2.*Z.^3 (etc)
Now you have the data, you can plot, using the examples in the isosurface documentation.
You'll "love" the result. Haha. I'm so funny.

6 Kommentare

murat can
murat can am 12 Sep. 2012
i did something but i didnt make it 3d array. it gave an error V must be a 3D array.
Here is some help with (1)
[X,Y,Z] = meshgrid(linspace(-3,3,25));
Azzi Abdelmalek
Azzi Abdelmalek am 12 Sep. 2012
Bearbeitet: Azzi Abdelmalek am 12 Sep. 2012
the question asked was to plot X.^2+9*Y.^2/4+Z.^2-1).^3 - X.^2.*Z.^3=0 which don't correspond to the answer. you must solve the equation before ploting
murat can
murat can am 12 Sep. 2012
Bearbeitet: murat can am 12 Sep. 2012
OH MY GOODNESS =) its really cool thing. friend of mine said me solve it ^^ its pretty cool =) its an heart
@Azzi - no you don't!
isosurface is essentially a three dimensional contour plot. When you set the threshold value to zero, it will draw the isosurface at that interface thus automagically solving the equation for you :)
Ok Sean, I widhdraw

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (3)

Azzi Abdelmalek
Azzi Abdelmalek am 12 Sep. 2012
Bearbeitet: Azzi Abdelmalek am 12 Sep. 2012

1 Stimme

sol=[];
for k=-3:0.1:3
for m=-3:0.1:3
x=[k m];
a=x(1)^2+x(2)^2*9/4-1;
v=[1 0 3*a 0 + 3*a^2 0 a^3 ];
z=roots(v);
z=z(imag(z)==0);
n=length(z);
if n>0
xyz=[repmat(x(1:2),n,1) z];
sol=[sol;xyz];
end
end
end
plot3(sol(:,1),sol(:,2),sol(:,3))
murat can
murat can am 12 Sep. 2012

0 Stimmen

i did something again but it didnt work again... =)
clear all
close all
syms X Y Z V
[X,Y,Z] = meshgrid(linspace(-3,3,25));
V = (X.^2+9*Y.^2/4+Z.^2-1).^3 - X.^2.*Z.^3
fv=isosurface(X,Y,Z,V,0)
fv = isosurface(V,0)
fvc = isosurface(V,'red')
p = patch(isosurface(X,Y,Z,V,-0))
isonormals(X,Y,Z,V,p)
set(p,'FaceColor','red','EdgeColor','none');
view(3);
axis tight
camlight

3 Kommentare

murat can
murat can am 12 Sep. 2012
i think axis is wrong. but i dont know much think about 3d axises.
Sean de Wolski
Sean de Wolski am 12 Sep. 2012
Bearbeitet: Sean de Wolski am 12 Sep. 2012
You don't need to define X,Y,Z,V as syms since they won't be syms but rather double arrays....
Removing that line, it works for me.
murat can
murat can am 12 Sep. 2012
its excess. i will delete it. i tought i was need it for equation.
i tried another way. i forgot to delete it. thx for remember.

Melden Sie sich an, um zu kommentieren.

murat can
murat can am 12 Sep. 2012

0 Stimmen

for axises i used daspect([1 1 1]) and it worked fbetter i think ^^ thank you all for help.
clear all
close all
syms X Y Z V
[X,Y,Z] = meshgrid(linspace(-3,3,25));
V = (X.^2+9*Y.^2/4+Z.^2-1).^3 - X.^2.*Z.^3
fv=isosurface(X,Y,Z,V,0)
fv = isosurface(V,0)
fvc = isosurface(V,'red')
p = patch(isosurface(X,Y,Z,V,-0))
isonormals(X,Y,Z,V,p)
set(p,'FaceColor','red','EdgeColor','none');
daspect([1 1 1])
view(3);
axis tight
camlight
and the result is good. to see results: http://postimage.org/image/6altq3zqf/

Community Treasure Hunt

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

Start Hunting!

Translated by