MATLAB Answers

Error in implemented function

2 views (last 30 days)
Nik joung
Nik joung on 14 Nov 2017
Commented: Nik joung on 15 Nov 2017
I have the function written above. It was calculated by WolframAlpha and the result is 0.
I've tried to implement the formula in Matlab with the code below:
for s=0:24
if (48-s >= 24)
bin1 = nchoosek(48-s,24);
bin1 = 0;
if (47-s >= 24)
bin2 = nchoosek(47-s,24);
bin2 = 0;
tmp = tmp + (-1)^s * nchoosek(24,s) * (bin1-bin2);
But my code outputs (variable tmp) the result -2 instead of 0. I am not seeing, where the mistake is.
I would appreciate, if someone could help me.


Sign in to comment.

Accepted Answer

Michal Kvasnicka
Michal Kvasnicka on 14 Nov 2017
Edited: Michal Kvasnicka on 14 Nov 2017
The double precision (default numerical values class in Matlab) is not enough for this kind of computation!!! You need to use symbolic math toolbox, to get multi-precision accuracy. Wolfram alpha (with Mathematica engine) using this approach by default.
Just a simple code using matlab symbolic toolbox: tmp = 0 !!!
syms s
for s=0:24
bin1 = nchoosek(sym(48)-s,sym(24));
bin2 = nchoosek(sym(47)-s,sym(24));
aux = (-1)^s * nchoosek(sym(24),s) * (bin1-bin2);
tmp = tmp + aux;
But you must know, that symbolic computations are significantly slower than numerical computations (double class).


Stephen Cobeldick
Stephen Cobeldick on 14 Nov 2017
+1 nice explanation.
Nik joung
Nik joung on 15 Nov 2017
Thank you, for your nice explanation! It helps me a lot to get behind such problems.
And if I want to do further calculations with the result, I just use the double()-function on the resulting sym-variable.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by