MATLABコードをリファクタリングするために、関数型プログラミングに触発された引数(MATLABが無名関数と呼ぶもの)として関数を渡すと思いました。
ただし、パフォーマンスはかなり深刻な打撃を受けているようです。以下の例では、さまざまなアプローチを比較しています。(サブ関数を使用できるようにするために、コードスニペットは関数でラップされています)
私が得た結果は、直接の場合は0秒、サブ関数を使用した場合はほぼ0秒、無名関数を使用した場合は5秒です。私は、OS X 10.6、C2D 1.8GHzでMATLAB7.7(R2007b)を実行しています。
誰かがコードを実行して、何が得られるかを確認できますか?特にWindowsでのパフォーマンスに興味があります。
function [] = speedtest()
clear all; close all;
function y = foo(x)
y = zeros(1,length(x));
for j=1:N
y(j) = x(j)^2;
end
end
x = linspace(-100,100,100000);
N = length(x);
%% direct
t = cputime;
y = zeros(1,N);
for i=1:N
y(i) = x(i)^2;
end
r1 = cputime - t;
%% using subfunction
t = cputime;
y = foo(x);
r2 = cputime - t;
%% using anon function
fn = @(x) x^2;
t = cputime;
y = zeros(1,N);
for i=1:N
y(i) = fn(x(i));
end
r3 = cputime-t;
[r1 r2 r3]
end