3D Visualization of Temperature Distribution Function

Click For Summary

Discussion Overview

The discussion revolves around visualizing a temperature distribution function in 3D using Scilab. Participants explore the challenges of plotting a specific mathematical function, u(x,y), and share their experiences and code snippets while troubleshooting issues related to syntax and output.

Discussion Character

  • Technical explanation
  • Exploratory
  • Debate/contested

Main Points Raised

  • One participant seeks assistance with plotting the function u(x,y) using Scilab, expressing confusion over the plotting process and syntax.
  • Another participant questions the denominator in the function and suggests that it should be 'x' instead of '2'.
  • There is a discussion about the use of single apostrophes in Scilab, with some participants speculating that it indicates transposition.
  • Participants discuss the need for a 2D grid to properly plot in 3D, referencing the meshgrid function from MATLAB.
  • One participant attempts to implement a nested loop to calculate Z values based on X and Y matrices but reports that the resulting surface is flat.
  • Another participant suggests that the flat surface may be due to a typo in the function's numerator, proposing corrections to the terms used.
  • There are mentions of using Python and matplotlib as an alternative for visualization, with suggestions to adjust the plotting range for better results.

Areas of Agreement / Disagreement

Participants express uncertainty about specific syntax and function behavior in Scilab, with multiple competing views on how to correct the plotting issues. No consensus is reached on the best approach to achieve the desired visualization.

Contextual Notes

Participants note limitations in their understanding of Scilab syntax and functionality, particularly regarding matrix operations and plotting commands. There are unresolved questions about the correct implementation of the temperature distribution function.

fluidistic
Gold Member
Messages
3,934
Reaction score
286
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 u(x,y)=\frac{1}{\pi} \arctan \left ( \frac{y+a}{x} \right )+\frac{1}{\pi} \arctan \left ( \frac{a-y}{x} \right ). 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:
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:
Physics news on Phys.org
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!
 
gsal said:
Don't know scilab, but your second 'atan' has a '2' in the denominator...shouldn't that be 'x'?
No problem. Yes, it should be an x.
what do the single apostrophes do?
I have absolutely no idea. Probably a necessary part of syntax.

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?
Hmm, I wanted it to be a function of both x and y and then plot it. My u(x,y)

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!
Ok.
Here is an example they give, from which I've been inspired:
Code:
// 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.
 
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.
 
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
 
gsal said:
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.
I tried:
Code:
-->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.
 
In analogy to their working example:
Code:
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:
-->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.
 
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
 
gsal said:
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

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.
 

Attachments

  • working.jpg
    working.jpg
    29.2 KB · Views: 1,073
  • working2.jpg
    working2.jpg
    28.5 KB · Views: 891
  • #10
Hhhmm...here it is what it looks like with python and matplotlib.
 

Attachments

  • arctan.png
    arctan.png
    15.8 KB · Views: 1,007
  • #11
gsal said:
Hhhmm...here it is what it looks like with python and matplotlib.
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.
 

Similar threads

  • · Replies 4 ·
Replies
4
Views
3K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 6 ·
Replies
6
Views
2K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 10 ·
Replies
10
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
3K
  • · Replies 1 ·
Replies
1
Views
4K
Replies
5
Views
3K