| 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 |
| Jul12-06, 07:27 PM | #2 |
|
Recognitions:
|
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 |
|
|
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 |
|
|
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 |
| Jul13-06, 08:18 PM | #6 |
|
Recognitions:
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 |
|
|
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 | ||