Hello,
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:
tmp=0;
for s=0:24
if (48-s >= 24)
bin1 = nchoosek(48-s,24);
else
bin1 = 0;
end
if (47-s >= 24)
bin2 = nchoosek(47-s,24);
else
bin2 = 0;
end
tmp = tmp + (-1)^s * nchoosek(24,s) * (bin1-bin2);
end
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.

 Akzeptierte Antwort

Michal
Michal am 14 Nov. 2017
Bearbeitet: Michal am 14 Nov. 2017

2 Stimmen

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 !!!
tmp=sym(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;
end
tmp
But you must know, that symbolic computations are significantly slower than numerical computations (double class).

2 Kommentare

Stephen23
Stephen23 am 14 Nov. 2017
+1 nice explanation.
Nik joung
Nik joung am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Gefragt:

am 14 Nov. 2017

Kommentiert:

am 15 Nov. 2017

Community Treasure Hunt

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

Start Hunting!

Translated by