Dismiss Notice
Join Physics Forums Today!
The friendliest, high quality science and math community on the planet! Everyone who loves science is here!

3d plot in scilab

  1. Feb 15, 2012 #1

    fluidistic

    User Avatar
    Gold Member

    I just downloaded scilab because Wolfram Alpha wouldn't want to plot the function I'd like.
    In a physics problem I've found the temperature distribution of a 2 dimensional system. I'd like to visualize this function in 3d.
    The function I want to plot is [itex]u(x,y)=\frac{1}{\pi} \arctan \left ( \frac{y+a}{x} \right )+\frac{1}{\pi} \arctan \left ( \frac{a-y}{x} \right )[/itex]. I've read the help file of scilab of how to plot but I'm getting lost very quickly. Any help is appreciated!

    Edit: so far I have
    Code (Text):
    x=[0:0.1:12]'; y=[0:0.1:12]'; z=atan((y-2)/x)+atan((2-y)/2); plot3d(x,y,z)
    . I don't know how to pass a line (enter just evaluates the command I wrote). I get the message "Inconsistent addition."
     
    Last edited: Feb 15, 2012
  2. jcsd
  3. Feb 15, 2012 #2
    Don't know scilab, but your second 'atan' has a '2' in the denominator...shouldn't that be 'x'?

    what do the single apostrophes do?
    what do you think you are accomplishing with z=... ? are x and y traversed independently as if they were in 2 nested do-loops...or is it just a one-to-one? In other words, is z also just a vector? or are you getting a matrix?

    try to input one line at a time and find out what you get back after each....don't jump all the way to plotting...baby steps, baby steps!
     
  4. Feb 15, 2012 #3

    fluidistic

    User Avatar
    Gold Member

    No problem. Yes, it should be an x.
    I have absolutely no idea. Probably a necessary part of syntax.

    Hmm, I wanted it to be a function of both x and y and then plot it. My u(x,y)

    Ok.
    Here is an example they give, from which I've been inspired:
    Code (Text):
    // simple plot using z=f(x,y)
    t=[0:0.3:2*%pi]';
    z=sin(t)*cos(t');
    plot3d(t,t,z)
    Edit: It seems that x=[0:0.1:12] is a matrix or so. I thought it would plot x from 0 to 12 with increment of 0.1. Sigh. I really have no idea about Scilab.
     
  5. Feb 15, 2012 #4
    ok, so, did the example work? Did you get a surface plot?

    I think the apostrophe means transpose. In the example where they multiply sin times cos, notice how they pass t to one function and t' to the other...the fact that these two vectors are orthogonal (one is a column vector and the other a row vector) may be what makes it produce a square matrix for z....in other words, the expression is evaluated as in a double loop.

    So, go back to your own problem and pass y and x' and see what you get...see if you can display the z matrix before plotting to see if in fact is a square matrix.
     
  6. Feb 15, 2012 #5

    Dr Transport

    User Avatar
    Science Advisor
    Gold Member

    look at the function meshgrid if it exists in scilab (it is a matlab function), you need a 2-d grid to properly plot in 3-d
     
  7. Feb 15, 2012 #6

    fluidistic

    User Avatar
    Gold Member

    I tried:
    Code (Text):
    -->x=[0:0.1:12]';
     
    -->y=[0:0.1:12]';
     
    -->z=atan((y-2)/x)+atan((2-y)/x);
     
    -->plot3d(x,y,z)
    I do get a 3d surface but it's all flat.
     
  8. Feb 15, 2012 #7

    fluidistic

    User Avatar
    Gold Member

    In analogy to their working example:
    Code (Text):
    x = -1:0.1:1;
    y = -1:0.1:1;

    [X,Y] = meshgrid(x,y);

    for i=1:size(X,1)
      for j=1:size(X,2)
        Z(i,j) = sinc(2*%pi*X(i,j)*Y(i,j));
      end
    end

    surf(X,Y,Z)
    I do:
    Code (Text):
    -->x = 1:0.1:12;
     
    -->y = 1:0.1:12;
     
    -->
     
    -->[X,Y] = meshgrid(x,y);
     
    -->
     
    -->for i=1:size(X,1)
    -->  for j=1:size(X,2)
    -->    Z(i,j) = atan((Y(i,j)-2)/X(i,j))+atan((2-Y(i,j))/X(i,j));
    -->  end
    -->end
     
    -->
     
    -->surf(X,Y,Z)
    And I still get a totally planar surface.
     
  9. Feb 15, 2012 #8
    I think the reason you are getting a flat surface is because you have yet another typo which effectively makes the summation be zero...

    in your numerators, you have Y-2 and 2-Y ...you should have Y+2 and 2-Y

    and, for completeness, you may want to put back the division by PI
     
  10. Feb 15, 2012 #9

    fluidistic

    User Avatar
    Gold Member

    Whoops you're right. Well since I took a=2 while it's totally arbitrary, I don't think the 1/pi factor is really relevant.
    Using the meshgrid I get a somehow decent surface, but doesn't work well for the plot3d command so far.
    Here are 2 screenshots.
     

    Attached Files:

  11. Feb 15, 2012 #10
    Hhhmm...here it is what it looks like with python and matplotlib.
     

    Attached Files:

  12. Feb 16, 2012 #11

    fluidistic

    User Avatar
    Gold Member

    Maybe it's the same. If you take a=2, I suggest you to reduce the box up to y and x=6 rather than 12.
     
Know someone interested in this topic? Share this thread via Reddit, Google+, Twitter, or Facebook




Similar Discussions: 3d plot in scilab
  1. 3d surface plot (Replies: 1)

  2. 3D plot using Matlab (Replies: 1)

  3. MATLAB, 3D plotting (Replies: 1)

  4. [Mathematica] Plot 3D (Replies: 1)

Loading...