Как более эффективно вычислить сумму бинома?
Я должен рассчитать уравнение следующим образом:
гдеk1,k2
дано. Я использую MATLAB для вычисленияP
, Я думаю, что у меня есть правильная реализация для вышеуказанного уравнения. Тем не менее, моя реализация настолько медленная. Я думаю, что проблема от биномиального коэффициента. Исходя из уравнения, могу ли я найти эффективный способ ускорить время? Поблагодарить всех.
Заk1=150; k2=150; D=200;
, занимает11,6 секунды
function main
warning ('off');
function test_binom()
k1=150; k2=150; D=200; P=0;
for i=0:D-1
for j=0:i
if (i-j>k2||j>k1)
continue;
end
P=P+nchoosek(k1,j)*nchoosek(k2,i-j)/nchoosek((k1+k2),i);
end
end
end
f = @()test_binom();
timeit(f)
end
Обновление: для измерения времени я обнаружил, что nchoosek является причиной большого вычислительного времени. Следовательно, я переписываю функцию следующим образом
function re=choose(n, k)
if (k == 0)
re=1;
else
re=(n * choose(n - 1, k - 1)) / k;
end
end
Теперь время вычислений сокращается до 0,25 секунды. Есть ли лучший способ?