At last Matlab do it!!!
Useful tool to plot a 3D implicit surface defined in cartesian coordinates. You can give f(x,y,z) = 0 as a string or as a function handle. Type <help ezimplot3> for usage. Remember to leave your comments and ratings...Thanks!
;)
1.4.0.0  I've added information about the products required: Symbolic Math Toolbox 

1.3.0.0  Cleaned some bugs up


1.2.0.0  *Now supports symbolic and inline classes as input


1.1.0.0  Better and corrected comments

Create scripts with code, output, and formatted text in a single executable document.
Gustavo Morales (view profile)
Awanthika Senarath
Hi.
First argument "fun" must be of type character, simbolic, function handle or inline. You can't introduce a matrix.
Ezimplot3 do not graph 'data'. It graphs functions.
Awanthika Senarath (view profile)
Hello Gustov,
Thank you for your function. I'm a newbie to matlab. I'm trying to plot my data (151 samples each with 30 readings) 151*30 matrix with 3 independent variables. I have the matrix. However, when I feed the matrix directly into your function I get the error,
Error using ezimplot3>fix_fun (line 194)
First argument "fun" must be of type character, simbolic, function handle or inline
Error in ezimplot3 (line 76)
[f_handle f_text] = fix_fun(fun); % f_handle is the anonymous fhandle for "fun"
Could you help me with this? Am I importing the data wrong?
Regards
Awanthika
pan jijun (view profile)
Daniel Blixt (view profile)
Nice function. I have an spectrum problem which yields the following equation
0=sin(kx/2)*sin(ky/2)*sin(k*(1xy)/2)*(sin(k/2)sin(kx/2)*sin(ky/2)*sin(k*(1xy)/2))
It have multiple solutions and I want to display the figure so that you can distinguish between the different levels (surfaces) of solutions.
I also have restrictions that cannot be satisfied by your function. I have x+y+z(x,y)=1. x≤y≤z.
Can you help me solve these two problem
In other words x and y takes values on the triangle limited by
x=0, 0≤y≤1/2
0≤y=x≤1/3
1/3≤y=1/2x/2≤1/2
Thank you in advance
Matt J (view profile)
Very nice. I think it would be a great favor to the community, though, if you would generalize it so that when you already have a function handle, it doesn't require the Symbolic Toolbox. This is very easy to do by circumventing fix_fun as follows
if ~isempty(which('syms'))
[f_handle f_text] = fix_fun(fun); % f_handle is the anonymous fhandle for "fun"
% f_text is "fun" ready to be a title
elseif isa(fun,'function_handle')
f_handle=fun; f_text='';
else
error 'Cannot process input function'
end
Other minor remarks:
1. The syntax ezimplot3(fun,domain, color) does not parse correctly
2. You have a missing % in your help text, making about half of it disappear when doing help/doc ezimplot3
Andrey Zhigachev (view profile)
Nice function! Thank you, I was looking for such as one for a long time.
Gkcn (view profile)
Dear Gustavo,thank you for your useful function.I tried to use it for plotting my own equation but it gives many surfaces together although i need only one surface around first root of my equation.Please can you help me how can i find it?
my equation is:
tan(sqrt(y)*(11/x)*z)sqrt(y)*(xz^2)/(x+y)*z=0
1<=x<=10 , 0.1<=y<=10 , 0<=z<=1
Thank you in advance.
Shahab (view profile)
Nice Job Gustavo
I just needed an implicit plot in the middle of my code somewhere to show an obstacle...
You saved me a few days of work.
Thx man
Daniel Lopes (view profile)
Nice code! Well done!
You should try to combine it with the implicitplot3d(.)[go this website http://wwwusers.math.umd.edu/~jmr/241/surfaces.html].
It realy gives an excelent visual result as an alternative to the cranky mesh from isosurface(.) :S.
%% ____________________________________
figure,
syms x y z;
h=x^2+y^2+z^2;
implicitplot3d(h, 1, 3, 3, 3, 3, 3, 3, 40); axis equal
hold on
ezimplot3(h1,[5 5])
Gustavo Morales (view profile)
Sorry for not being a good software documenter. I'm just a Electrical Engineer .... all the "symbol part" of the code, you can replace it...
Jonathan (view profile)
This seems like a good function. However, I could not discover it since my time has been fruitlessly spent. This function requires the symbolic toolbox, yet no mention of this was explicitly included on this page or in the function help.
Michelle Gledhill (view profile)
Hello Gustavo,
Is there a way to add a contour plot on the xyplane in a similar way that the function "surfc" does?
Thank you for your time!
Gustavo Morales (view profile)
Hi Camilla!!! I've already aswered your email...!
Camilla Colombo (view profile)
Hi Gustavo,
I sent you an email to gmorales@uc.edu.ve
Please let me know if you received it.
Thanks
Camilla
Gustavo Morales (view profile)
Hi Camilla!
Your funcion has others arguments than x,y,z?
Can you send me the code of your function?... Send it by email...
Camilla Colombo (view profile)
Dear Gustavo,
thank you for your function. I am trying to plot an implicit function coded into an m. file. However i get an error and i think this is due to the fact that my function contains some "if condition". So I get the error at line 168 of ezimplot3:
f_sym = eval([fun,'(x,y,z)']); % evaluating FUN at the sym point (x,y,z)
do you know a way to avoid this problem?
thank you in advance
Camilla
Gustavo Morales (view profile)
Hi Hisham.. ok! send me the code of M1 by email...
Hisham Moideen (view profile)
hi Gustavo,
I tried plotting the way you suggested.
h1=ezimplot3(M1,[0.02 5 0 4 0 0.35]);
where M1 is the determinant of a matrix involving the three variables alpha,gamma,R.
I got the following error:
"??? Error using ==> ezimplot3 at 82
FUN must have no more than 3 arguments"
To make sure i dont have more than 3 unknowns, i substituted specific values for each and got a single value for my Function M1.
Is is possible that i could send you my code of generating M1 and maybe you could help me.
Problem is my function M1 is not a simple function. Its a determinant of a matrix of order 8. Some of the terms in my matrix is polynomial fit of alpha and R. So the determinant is one crazy looking expression. Matlab cant output my entire determinant value (out of line limit error).
Appreciate any help in this regard!!!
Gustavo Morales (view profile)
Hi...
*fun can be a string, an anonymous function handle, a .Mfile handle, an inline function or a symbolic function. Any other variable present at the function (aside from alpha, gamma and R), must have a known value, that is, your function must depend only of alpha, gamma and R.
*>> domain = [minalpha maxalpha mingamma maxgamma minR maxR];
ezimplot3(fun,domain);
test with the examples of help: >> help ezimplot3
regards from Venezuela!
Hisham Moideen (view profile)
hi Gustavo,
I have an implicit function, but the variables are alpha, gamma and R.
Can i use ezimplot3() to output my function?
Also is it possible to input different range for my variables like
ezimplot3(M1,[0.2 6 0 5 0 0.34]), will that work?
Appreciate the help and code.
Gustavo Morales (view profile)
Hi!
> h = ezimplot3() outputs a handle for the patch object. So you can do the folowing:
> set(h,'FaceColor','none','EdgeColor','k')
I hope I have been able to help you.
"I prefer being useful than being important"
Brian Bak (view profile)
Hi Gustavo Morales
Just as you wrote the boundaries was not large enough for the surfaces to be plottet.
Do you have any suggestions to how you kan change the surface to be a grid instead of a color?
Thanks in advance.
Very nice program btw!
Gustavo Morales (view profile)
I didn't understand you... so... have you already discovered the mistake? I was trying to do something about it, and that's what I've found:
> f = '(x/(4  3*y))^2 + (z/(4  3 *y))^2 1';
> ezimplot3(f,[3000 3000 10000 10000 3000 3000]);
It produces a nice graph... maybe the function that you provided is too small...
Regards!
Gustavo Morales (view profile)
the numeric answer you get is a handle for the patch object
Brian Bak (view profile)
My mistake it was just the boundaries that where wrong.
Brian Bak (view profile)
Hi
Does anyone no why I can't plot the following:
f = '(x/(400^2  0.3*y))^2 + (z/(400^2  0.3 *y))^2 1';
ezimplot3(f,[3000 3000 10000 10000 3000 3000])
It just shows an empty plot from 0 to 1 on all axes. And gives the output: ans = 0.0037
thanks in advance
Gustavo Morales (view profile)
Dave, as you should know, you only can see plots for explicit R2 to R functions, so the index "i" must be at most 2. Your function is also known as "Parabola", and has this other explicit (not implicit) form:
f(x,y) = x^2 + y^2 ... a paraboloid
I suggest that use instead the following command:
>> plotobjective(@dejong1fcn,[5.12 5.12;5.12 5.12]);
;)
Dave Yap (view profile)
Dear Gustavo, really nice and neat program.
I would like to plot a DeJong1 test function as below,
f1(x)=sum(x(i)^2), i=1:n, 5.12<=x(i)<=5.12
I'm unable to plot the Dejong1 test function.
Could you pls help me on this?
my email is dyfw@hotmail.com. Thanks in advance.
Gustavo Morales (view profile)
I'd like to study ezgraph3 throughly to make ezimplot3 a "real command", and maybe some day, Mathworks could take it ;)
And...There's a way.... try writing:
>>help ezimplot3
for usage
Tamara Kolda (view profile)
This is fantastic! Just what I was looking for and what ezplot3 should do!
One questions/suggestion: Is there a way to also choose the color of the surface that's plotted? I was able to do it manually using the get/set commands, but I was hoping to be able to do it using the function directly.
Thanks for sharing this with the community.