私は同じ階乗を何度も何度も計算するコードを最適化しています。呼び出しはいくつかの異なる関数からのものですので、関数の引数としてあらかじめ計算された階乗を配列に渡すことを避けたかったのですが、これが最も速い方法だと思います。matlabで階乗の使用を最適化
グローバル変数を使用する方が効果的ですが、グローバル変数の読み込みがファクタルアルの計算とほぼ同じくらい長くかかるので、それほど高速ではありません。
function [ facn ] = cfactorial(n)
global facs
if n > 170
facn = Inf;
elseif n == 0
facn = 1;
else
facn = facs(n);
end
私はまた永続的に設定しようとしましたが、あまり速くはありません。
function [ facn ] = cfactorial(n)
persistent facs
if isempty(facs)
load('facs.mat')
facs = faccs;
end
if n > 170
facn = Inf;
elseif n == 0
facn = 1;
else
facn = facs(n);
end
どちらの場合も、 "persistent facs"という行が表示されます。 「グローバルなfacs」はプロファイラでほとんどの時間を費やします。
これを行う別の方法はありますか?変数をロードせずにグローバルに利用できるようなものを定義できますか?
をそこからそれらを入手しますか? – mpaskov
それは私がやることです、私はすべての機能の間で配列を共有する効率的な方法を探しています。今のところ、私はその配列を渡す余分な引数を追加しましたが、それは私が避けたかったものです。私はまだ私が知らないよりエレガントで効率的な方法があれば、ほとんど興味があります。 – kili
組み込みのガンマ関数はどうですか? –