In the last lecture you learned about more sophisticated ways of organizing data in your Matlab scripts. Today you will get a little bit of practice in using such structs and cell arrays. You will also write a function. After this lab you should be in equipped with the very basics of programming so that we can move on to flow control in the up coming lectures.
Get the data, examples, stuff and unpack it.
Open the file structs.m
and follow us along as we
explain what's happening. You're welcome read the comments again, and again, and again.
You're very welcome to ignore the parts that are bracketed with SIDE TRACK
.
Once you've understood what's going on, take a look at timeseries.m
.
We provide you with GPS data for the three sites FAIR, WHIT, and BZ09 - namely the latitude, longitude, and height
solutions for certain GPS epochs that are defined in the respective *_time
arrays.
These data are stored in the file gps_data.mat
which is loaded at the beginning of the timeseries.m
script. This is a way to preserve the state of a Matlab Workspace.
You task is it
to organize the data better: put the data for each station in a struct, and then maybe all stations in an array
of structs (make sure all structs have the same fields for that!).
You can add more fields to your structs if you want to. Once you've done that, add the following line below
the populating of the structs:
clear BZ09_time BZ09_lon BZ09_lat BZ09_height ... FAIR_time FAIR_lon FAIR_lat FAIR_height ... WHIT_time WHIT_lon WHIT_lat WHIT_height
This deletes the arrays previously loaded; but have no fear! You already copied everything into structs, right? Now
adjust the plotting routines accordingly. If you're really motivated, you can optimize the plotting by
putting everything into a for
loop, and iterating over your array of structs. You may have to introduce
additional cell arrays for station names and plate names, and include them using sprintf
for the title strings
(or just delete them for now).
Here's the code of a simple example function: cuberoot.m (you got this in your examples):
function out = cuberoot(in); out = in.^(1/3); return
Now, try it:
cuberoot(9)
x = [ 1 3 28 17 33 27 ];
y = cuberoot(x)
y = y.^3
x == y
x == int16(y)
Kinda like magic. Note the conversion from floating point to integer values at the end and the changes in results of the comparisons(Matlab is weakly typed).
Now it's up to you to write a function that is similar to cuberoot
. Take a simple mathematical operation or function and implement it following the
given example. Make sure you allow for both operation on scalars and vectors. Then, write a script in which you call the function using (surprise) a scalar
and an array. Note that you can pass more parameters if you or your desired function need that.
ronni <at> gi <dot> alaska <dot> edu | last changed: October 01, 2010