>> Kronecker_double_sum(10000)
ans =
50005000
>> Kronecker_testing
>> eff_Kronecker_double_sum(10000)
ans =
50005000
>> efff_Kronecker_double_sum(10000)
ans =
50005000
>> Kronecker_eff_test % k = 10000
Elapsed time is 0.131591 seconds.
Elapsed time is 0.000163 seconds.
Elapsed time is 0.000332 seconds.
>> Kronecker_eff_test % k = 20000
Elapsed time is 0.466981 seconds.
Elapsed time is 0.000145 seconds.
Elapsed time is 0.000124 seconds.
>> Kronecker_eff_test % k = 30000
Elapsed time is 1.032543 seconds.
Elapsed time is 0.000582 seconds.
Elapsed time is 0.000118 seconds.
>> Kronecker_eff_test % k = 40000
Elapsed time is 1.813770 seconds.
Elapsed time is 0.000132 seconds.
Elapsed time is 0.000229 seconds.
>>
function S = Kronecker_double_sum(N)
% Calculates a double sum up to N using the Kronecker delta-function.
% :param N: Upper limit of the summation.
% :return S: The result of the summation.
% Initalise the sum, S
S = 0;
% Calculate the Kronecker double sum
for n = 1:N
for m = 1:N
if n == m
S = S + (1 * n); % \delta_{nm} = 1
else
S = S + (0 * n); % \delta_{nm} = 0
end
end
end
end
function S = eff_Kronecker_double_sum(N)
% Calculates a double sum up to N using the Kronecker delta-function,
% efficiently.
% :param N: Upper limit of the summation.
% :return S: The result of the summation.
% Initalise the sum, S
S = 0;
% Calculate the Kronecker double sum
for n = 1:N
S = S + n;
end
end
function S = efff_Kronecker_double_sum(N)
% Calculates a double sum up to N using the Kronecker delta-function,
% very efficiently.
% :param N: Upper limit of the summation.
% :return S: The result of the summation.
% Calculate the Kronecker double sum
S = (N^2 + N) / 2;
end
% A simple script to test the efficiency of three functions
k = 40000;
tic;
Kronecker_double_sum(k);
toc;
tic;
eff_Kronecker_double_sum(k);
toc;
tic;
efff_Kronecker_double_sum(k);
toc;