Read text file in MATLAB

If you would like to analyze data generated from other sources, you will most likely need to import the data from a text, csv, or xls file.  Here we’ll provide different methods you can use to import this data.

First, you will need to select the file of interest, with the filename stored in the variable ‘file’:

% Select file
[filename, pathname] = uigetfile ('*.*', 'Pick a file');
file = [pathname, filename];

In our example, we will be importing a tab-delimited textfile generated by Sensor Data. The data file we are playing with is test_gyroscope_t3.txt.  As you can see, this file has 13 header lines (two of which are blank lines) and 110 lines of data (consisting of time, x axis, y axis, z axis).

Now that your file has been selected, you have several options through which to import.  First let’s look at textread. While this function will soon be decremented, it still serves a nice purpose. We can specify a delimiter, and then parse out the header and data using cellfun.

% Using textread, which will be removed in later MATLAB releases
% Read in file
allData = textread(file, '%s', 'delimiter', '\n');
% Make allData cells empty if numerical 
numericalArray = cellfun(@(s) sscanf(s,'%f').' ,allData, 'un', 0);
% Get Header
header = allData(cellfun('isempty',numericalArray));
% Get Data
data = vertcat(numericalArray{:});

With this piece of code, you will have a 11×4 cell array for the header and a 110×4 double for the numerical data. What if we were to use textscan as recommended by MATLAB rather than textread? Well now the code is a little bit longer, and you need to specify before hand how many columns of data you want as well as how many header lines are in the file. This method might be useful if you want to manually select only certain columns and even start at a later row, but does require knowledge of your data file. Here we’ll initialize the values for the headerlength and columnlength to 13 and 4, respectively. You’ll also notice our usage of the command repmat, which comes in very handy here and elsewhere.

% If you know the header and column length using textscan
headerLength = 13;
numColumns = 4;
fid = fopen(file);
% this is error message for reading the file
if fid == -1 
    error('File could not be opened, check name or path.')
end
% Get header
header = cell(headerLength, 1);
for i = 1:headerLength
    header{i} = fgetl(fid);
end
fclose(fid);
fid = fopen(file);
% Read in numerical data
data = textscan(fid, repmat('%f',1,numColumns), 'headerlines', headerLength);
data = cell2mat(data);
fclose(fid);

Again, our data has been stored into 11×4 cell array for the header and a 110×4 double for the numerical data. So this is great, now you can read in data… but wait, MATLAB also has a great function, which we just found that allows you to do all this with just a single line of code!

% importdata
A = importdata(file);

Importdata! This command will output the data to a struct, with a field for the data (110×4 double), textdata (11×4 cell) and colheaders (1×4 cell). The colheaders is simply the title for each column of data, in our case ‘Time’, ‘X’, ‘Y’, ‘Z’. You can even specify the delimiter for the file as the second argument to importdata, though the default character is interpreted from the file.

Regardless of which method you choose, you should now have access to your all-important data within MATLAB, so you can now begin analysis.

If you have found any other methods for importing data into MATLAB, please let us know.

Check convexity of polygon

As we demonstrated in our previous post, we can generate polygons by tracing a circle around a given center and placing vertices at randomly spaced angles and radii.

MATLAB irregular polygon

While on visual inspection it should be clear whether some polygons are convex or concave, we want to find a way to check for this property mathematically. We will do so by checking the direction that each internal angle takes around the polygon, as by definition, convex polygons will have all internal angles of less than 180 degrees (additional rules include the fact that all diagonals are contained within the polygon and a line drawn through a convex polygon in any direction will intersect at exactly two points).

Continue reading

Creating 2-D polygons in MATLAB

The basic premise of computational geometry is to calculate distances, areas, intersections and other geometrical calculations on basic objects such as points, lines and polygons. To begin this series on computational geometry in MATLAB, we’ll discuss the creation of random polygons in MATLAB.

Continue reading

Random Numbers in Matlab – Part III

This is the final post in our series on random numbers in Matlab. In the first post, we discussed basic random number functions, and in the second post, we discussed the control of random number generation in Matlab and alternatives for applications with stronger requirements. In this post, we will demonstrate how to create probability distributions with the basic rand and randn functions of Matlab. This is useful in many engineering applications, including reliability analysis and communications.

Continue reading

Modeling with ODEs in Matlab – Part 5B

And so we reach the end. We will wrap up this series with a look at the fascinating Lorenz Attractor. Like the logistic map of the previous lesson, the Lorenz Attractor has the structure and behavior of a complex system. Unlike the logistic map, the Lorenz Attractor is defined by a system of first order autonomous ordinary differential equations. Thus, it is a perfect example to use for this last lesson where we examine the importance of error tolerance in evaluation chaotic systems of ODEs.
Continue reading

Modeling with ODEs in Matlab – Part 5A

We are going to wrap up this tutorial series with a fun exploration of complex systems. Complex systems behave in unpredictable ways. This often makes it difficult to design and use models to examine their behavior. In this lesson we will look at some hallmarks of complex systems and examine a canonical example. Finally, in the next installment we will look at how differential equation models of complex systems can be difficult to examine using numerical solutions.
Continue reading

Modeling with ODEs in Matlab – Part 4B

Welcome to Modeling with ODEs in Matlab – Part 4B! The previous post, Part 4A, introduced the idea of fitting ODE coefficients to empirical data. We saw that proper use of the nlinfit function combined with ode45 or ode15s allows us to fit a model to data when given a good initial estimate of the parameter values. Unfortunately, this approach does not work as well if the initial guess is not within the basin of attraction of the best fit. Today we will look at a new approach to function optimization: Genetic Algorithms (GAs). Genetic Algorithms are part of a search family I like to call “intelligent randomized search”, which also includes techniques such as Simulated Annealing and Particle Swarm Optimization.
Continue reading