MATLAB在循环中执行多个变量的函数

时间:2016-01-16 17:21:53

标签: matlab function optimization

要在MATLAB中处理数据,我必须执行某个函数,我们称之为function()。由于要处理的数据很多,比如大数组TimeVoltage(但还有更多),我会逐个执行这些数据:

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

所以这大概做了10次。此外,我必须多次做这样的事情,导致大约30行代码,它们都做同样的事情,但是变量不同。

有没有办法优化这个?我正在使用最新版本的MATLAB(2015b)并安装了所有工具箱。

2 个答案:

答案 0 :(得分:1)

一种可能的解决方案是将输入数组存储到struct中,它们使用该结构作为函数的输入。

在该功能中,您可以使用fieldnamesgetfiled内置功能识别每个字段的数量和内容。

该函数可以返回structure作为输出,其名称可以与输入结构的名称相同。

在下面的示例中,生成了三个数组,并且函数siply计算它们的平方。

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)

功能

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

希望这有帮助。

Qapla'

答案 1 :(得分:0)

您可以尝试cellfun

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

这相当于

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

问题只是将指数与值进行匹配。我确定您可以根据需要对其进行编码(例如timeInd = 1; voltageInd =2; ...

要了解有关cellfun方法的更多信息,请键入

help cellfun

进入MATLAB终端。