PDA

View Full Version : Plotting a stream function in matlab

dukebound85
Oct 30, 2010, 04:05 PM
How does one do this?

I am trying to plot

PSI = Acos(6x)-Uy where A=1 and U=1 over an x range of -2000-200 and y from -2000-2000

My code is this and it is giving me an error.

x = -2000:1:2000;
y = -2000:1:2000;
si = zeros(x,y);
for x = -2000:1:2000
for y = -2000:1:2000
si(x,y) = cos(6*x)-y;
end
end
plot(si)

Thanks for any help:)

SidBala
Oct 30, 2010, 04:55 PM
What is the error?

I am not sure what you are trying to do here. Are you trying to make a 3D graph of cos(6*x) - y over x = [-2000,2000] and y = [-2000,2000] ?

dukebound85
Oct 30, 2010, 05:28 PM
What is the error?

I am not sure what you are trying to do here. Are you trying to make a 3D graph of cos(6*x) - y over x = [-2000,2000] and y = [-2000,2000] ?

This is my error

??? Attempted to access si(-2000,-2000); index must be a positive integer or logical.

Error in ==> si5 at 6
si(x,y) = cos(6*x)-y;

Essentially, I want to plot the si function over many values of x's and y's that will result in somewhat parrallel plots so to speak.

Something that looks like this

Berlepsch
Oct 31, 2010, 08:20 AM
I never used Matlab, but from the error description

??? Attempted to access si(-2000,-2000); index must be a positive integer or logical.

Error in ==> si5 at 6
si(x,y) = cos(6*x)-y;

it seems clear that the x,y in si(x,y) are indexes for a two-dimensional array and must be larger than zero. try the following:

for x = 0:1:4000
for y = 0:1:4000
si(x,y) = cos(6*(x-2000))-(y-2000);

crackpip
Oct 31, 2010, 01:03 PM
In MATLAB arrays always have a lower bound of 1. Your for loops have to be adjusted. Also I think contour() is more suitable instead of plot(). Then you can specify the x- and y-axis units.

crackpip