Thread Closed

create a square array in matlab

 
Share Thread Thread Tools
Jul12-06, 05:01 PM   #1
 

create a square array in matlab


Hi,

I realise this is a physics forum, but thought someone may be able to help!

I would like to create a square array i.e 4x4 and then plot a vector of data (16 elements) over this 4x4 array.

I have created the following code, it doesnt work but thats what I am ideally aiming after:

[X,Y] = meshgrid([1:1:4]);

z = [30 20 20 30 20 10 10 20 20 10 10 20 30 20 20 30];

mesh(X,Y,z)

The reason that I believe that it doesnt work is that my z variable is not a funtion of X or Y. But it isn't in real life so how do I get around this?

Regards

Tom
 
PhysOrg.com
PhysOrg
science news on PhysOrg.com

>> 'Whodunnit' of Irish potato famine solved
>> The mammoth's lament: Study shows how cosmic impact sparked devastating climate change
>> Curiosity Mars rover drills second rock target
Jul12-06, 07:27 PM   #2
 
Recognitions:
Science Advisor Science Advisor
You need some way for the program to assign an X and Y coordinate to each z value. I guess the easiest way to do this would be to make z a 4x4 matrix. Then you could have something like -

z = z(x,y)

Claude.
 
Jul13-06, 01:44 AM   #3
 
Quote by tommyers
I would like to create a square array i.e 4x4 and then plot a vector of data (16 elements) over this 4x4 array.

I have created the following code, it doesnt work but thats what I am ideally aiming after:

[X,Y] = meshgrid([1:1:4]);

z = [30 20 20 30 20 10 10 20 20 10 10 20 30 20 20 30];

mesh(X,Y,z)

The reason that I believe that it doesnt work is that my z variable is not a funtion of X or Y. But it isn't in real life so how do I get around this?
You must plot the same sized variables, ie :
size(X)=size(Y)=size(Z)

so you must have z in 4x4 form.

By example, maybe you can (it depends of your problem) just reshape your z :
>> Z = reshape(z,4,4)

Z =

30 20 20 30
20 10 10 20
20 10 10 20
30 20 20 30

then
mesh(X,Y,Z)
and maybe mesh isn't adapted to what you want. Try pcolor instead for a 2D visualisation.
 
Jul13-06, 02:28 AM   #4
J77
 

create a square array in matlab


Specifically, you need to specify the value of z at each point (x,y).

I see you have 16 z values.

Therefore, you may want a 4x4 grid with the z values in a corresponding 4x4 matrix.

My little bit: I always use surf(x,y,z) with "shading interp" for best results.
 
Jul13-06, 02:14 PM   #5
 
Thanks guys - I have now got the following code, so near yet so far:

x = [1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4];
y = [1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4];

x = reshape(x,4,4)
y = reshape(y,4,4)

z = [30 20 20 30 20 10 10 20 20 10 10 20 30 20 20 30];

z = reshape(z,4,4)

z = (z.*x + z.*y);

surf(x,y,z)
colormap hsv
axis([0 4 0 4 0 250])


to generate the attached plot (see below)

The plot is not what I want! I want 16 squares the 4 corners to be the same value, the 4 middle ones to be the same value and the rest a third value - as indicated by the z matrix. I am not bothered about the actual values i.e the 4 corners do not have to be 30 I am more interested in the weighting between each of the 3 values.

Regards

Tom
Attached Thumbnails
plot1.jpg  
 
Jul13-06, 08:18 PM   #6
 
Recognitions:
Science Advisor Science Advisor
You are getting a distorted curve because of this line.

z = (z.*x + z.*y);

Take out this line and the code should work. Don't get hung up on making z a function of x and y. It wont work because z has no analytic dependance on x and y, thus you need to manually specify the values of z at each coordinate (which you have already done).

Claude.
 
Jul14-06, 02:31 AM   #7
 
Thanks Claude,

I have now chnaged my code to:

x = [1 2 3 4 1 2 3 4 1 2 3 4 1 2 3 4];
y = [1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4];

x = reshape(x,4,4)
y = reshape(y,4,4)

z = [30 20 20 30 20 10 10 20 20 10 10 20 30 20 20 30];

z = reshape(z,4,4)

surf(x,y,z)
colormap hsv
axis([0 4 0 4 0 250])


Although my matrix (coloured part) is still 3 x 3!

I am trying to achieve something like the following:

30 20 20 30
20 10 10 20
20 10 10 20
30 20 20 30

in mesh / surf representation..................

Regards

Tom
 
Jul14-06, 02:45 AM   #8
J77
 
It's 3x3 squares, but 4x4 coordinate points - as you specify.
 
Jul14-06, 02:50 AM   #9
 
Further .... this is what I want.

4
30 20 20 30
3
20 10 10 20
2
20 10 10 20
1
30 20 20 30
0
0 1 2 3 4

where green represent the axis 'ticks' and the purple represent the values between these 'ticks'.

Regards

Tom
 
Jul14-06, 02:52 AM   #10
 
J77,

I NOW realise this - but any suggestions how to change this?

... and keep my matrices the same length?

Tom
 
Jul14-06, 03:13 AM   #11
J77
 
Use bar3 ?

Though you won't get a 'smooth' surface anymore.
 
Jul14-06, 03:23 AM   #12
 
Thats not what I am really looking for!

Tom
 
Jul14-06, 06:46 AM   #13
J77
 
The only other way I see is representing your values at the bisection of two tick marks, ie. at (0.5,0.5)=30, (0.5,1.5)=20, (0.5,2.5)=20, (0.5,3.5)=30 etc.

You don't have enough data to do anything more...

(And there aren't enough points to accurately extrapulate away from the data you have)
 
Jul14-06, 07:20 AM   #14
 
J77,

There is no more data - thats all there is....

I want a 4x4 mesh i.e. 16 squares, with a z term in each!

Have would you do as you suggested in an automated way?

Regards

Tom
 
Jul14-06, 07:26 AM   #15
J77
 
Code:
z = [30 20 20 30; 20 10 10 20; 20 10 10 20; 30 20 20 30];
x=[0.5:1:3.5];
y=[0.5:1:3.5];

surf(x,y,z)
axis([0 4 0 4 10 30])

shading interp
 
Jul14-06, 08:38 AM   #16
 
WOW J77,

That looks amazing!

Although when I turn the shading interp off I still only see 3x3 and the coloring isn't symmetrical - why is this?

The pattern is symmetrical when the shading is one!

Regards

Tom
 
Jul14-06, 08:55 AM   #17
J77
 
Colours in Matlab are quite hard (numerous) to explain... read up on the various colormaps in the helpdesk.
 
Thread Closed
Thread Tools


Similar Threads for: create a square array in matlab
Thread Forum Replies
Matlab: How to apply filters to and ECG signal using matlab? Math & Science Software 2
SVD with Matlab Math & Science Software 0
Matlab and PDE Math & Science Software 0
Matlab Help! Math & Science Software 3
Help in Matlab! Math & Science Software 0