MATLAB – Operations on Structure Arrays

MATLAB. Love it. At the moment, though? Frustrated. Here’s some generalized code that I’m working on:

classdef particle
        x_pos  % x position
        y_pos  % y position
        x_upd  % x update value
        y_upd  % y update value
        function b = particle()
            x_pos = 0;
            y_pos = 0;
            x_upd = rand();
            y_upd = rand();
        function objs = update(objs)
            % Update x and y
            objs.x_pos = objs.x_pos + objs.x_upd;
            objs.y_pos = objs.y_pos + objs.y_upd;

So the problem lies in my update function. Well, there isn’t really a problem with the code posted, one could use the following main script and it’ll run just fine.

one_particle = particle();
one_particle = update(one_particle);

The update method will run just fine and dandy. My problem? Trying to get this to run in a structure array. That is, getting the following main script to work.

ten_particles(10) = particle();
ten_particles = update(ten_particles);

The first line creates a structure array of size 1 by 10. When the update function is called in line 2, it tries to perform addition on the structure array, which it can’t do. The output of a structure array is a comma separated list, and MATLAB cannot do normal operations (like addition) on comma separated lists.

So the solution?

function objs = update(objs, walls)
    % Update x and y
    for ii = 1:numel(objs)
        objs(ii).x_pos = objs(ii).x_pos + objs(ii).x_upd;
        objs(ii).y_pos = objs(ii).y_pos + objs(ii).y_upd;

Which bothers me to no end. Why? Because my whole reason for creating a structure array was to take advantage of the speed of vector operations within MATLAB. That is, operations complete faster when done as vectors rather than as elements within a loop. Oh well, maybe a future build of MATLAB will allow structure arrays to be written and read as vectors.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s