简体   繁体   中英

MATLAB execute function for multiple variables in loop

To process data in MATLAB I have to execute a certain function, let's call it function() . Since there is much data to be processed, like large array Time or Voltage (but many more) I execute those one by one like this:

TimeNew = function(Time);
VoltageNew = function(Voltage);
... etc

So this is done around 10 times. Moreover, I have to do such a thing multiple times, resulting in around 30 lines of code which all do the same thing but to a different variable.

Is there a way to optimize this? I am using the most recent version of MATLAB (2015b) and have all toolboxes installed.

A possible solution could be to store the input array into a struct , them use that struct as input of the function.

In the function you can identify the number and content of each field by using fieldnames and getfiled built-in function.

The function could return a structure as output whose names can be made the same as the ones of the input struct.

In the example below, three arrays are generated and the function siply compute their square.

var_1=1:10;
var_2=11:20;
var_3=21:30;

str_in=struct('var_1',var_1,'var_2',var_2,'var_3',var_3)

str_out=my_function(str_in)

The function

function [str_out]=my_function(str_in)
f_names=fieldnames(str_in)
n_fields=length(f_names);

for i=1:n_fields
   x=getfield(str_in,f_names{i})
   str_out.(f_names{i})=x.^2;
end

Hope this helps.

Qapla'

You could try cellfun

allResultsAsACell = cellfun(@function, {Time,Voltage,...,varN});

This is equivalent to

allResultsAsACell{1} = function(Time);
allResultsAsACell{2} = function(Voltage);
...
allResultsAsACell{N} = function{VarN};

The issue is just matching up the indices with the values. I'm sure you could code those in as well if you needed (eg timeInd = 1; voltageInd =2; ... )

To see more on the cellfun method, type

help cellfun

into your MATLAB terminal.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM