# Summation subroutine giving result as NaN (not a number)!

44 views (last 30 days)
Louis Crawford on 17 Jan 2021
Commented: Louis Crawford on 19 Jan 2021
In the code below I'm trying to produce the following summation notation with the answers expected being 1,-2,1 (second derivative,central finite difference coefficient)
However when I run my code the answer for S = NaN, and I'm a bit lost as to where I've gone wrong.
n = 2;
k = n/2;
for j=0:n
S = 0;
for i=0:n
if (i~=j)
end
sum=0;
for m=0:n
if (m~=j) && (m~=i)
end
prod=1.0;
for l=0:n
if (l~=j) && (l~=i) && (l~=m)
prod=prod*(n/2-l)/(j-l);
end
end
prod=prod*1/(j-m);
sum=sum+prod;
end
S=S*(1/(j-i))*sum;
end
end
Any help much appreciated, thanks in advance.
Louis Crawford on 18 Jan 2021
I'll give those a go thanks!

David Goodmanson on 19 Jan 2021
Hi Louis,
the basic problem is that in the product calculation you have
for l=0:n
if (l~=j) && (l~=i) && (l~=m)
prod=prod*(n/2-l)/(j-l);
end
end
which is correct, but in the first sum calculation (similarly for the second) you have
for m=0:n
if (m~=j) && (m~=i)
end
...
end
which does not make use of the 'if' check because the 'if' is immediatly followed by an 'end'. The following code changes that. I also used q instead of l (small L) because it is hard to distinguish l from 1, and did not use sum and prod for variables since they are Matlab functions and the possibility of getting mysterioso results is high. I also found that in this instance for whatever reason it was easier to keep track without using indentation, which can always be added.
n = 6; j = 3;
si = 0;
for i = 0:n
if (i~=j)
sm = 0;
for m=0:n
if (m~=j) && (m~=i)
p = 1;
for q=0:n
if (q~=j) && (q~=i) && (q~=m)
p = p*(n/2-1)/(j-q);
end
end
sm = sm + p/(j-m);
end
end
si = si + sm/(j-i);
end
end
si
Louis Crawford on 19 Jan 2021
Thank you!