Why can't Matlab do the factorial of a non-integer number?
27 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Hi,
I tried using the factorial function on a number with decimals and got the following error: N must be an array of real non-negative integers.
Is there an alternative so that it can calculate the factorial of a number with decimals like Excel does?
Thanks for your time
0 commentaires
Réponse acceptée
Davide Masiello
le 6 Fév 2022
Modifié(e) : Davide Masiello
le 6 Fév 2022
MatLab 'factorial' is coded so to work with integers only.
The generalization of a factorial is the Γ function, which is
and the relation with the factorial is
MatLab implements the Γ function. Therefore, to compute the factorial of 1.5 you can write
gamma(2.5)
Which yields 1.3293, the correct answer.
2 commentaires
Dyuman Joshi
le 23 Jan 2024
There is no function in MATLAB, in-built or a part of the toolbox, that offers that functionality directly.
(Possibly because) There is no known explicit relation or definition which can be utilized to obtain that.
However, you can try this -
%value of which the inverse is to be calculated
y = gamma(2.5)
f = @(x, val) gamma(x) - val;
out = fzero(@(x) f(x, y), 2)
But note that the inverse gamma function is not one-on-one (reference - Graph of the function provided in its wikipedia article - https://en.wikipedia.org/wiki/Inverse_gamma_function), so multiple solutions exist for each input.
The value obtained as the output depends on the initial guess -
%Finding the inverse for the same, but with initial guess as 1
fzero(@(x) f(x, y), 1)
Plus de réponses (2)
DGM
le 6 Fév 2022
See the Gamma function
Or in MATLAB, gamma().
Note that if you're trying to replicate the behavior of factorial, the input is offset by 1:
factorial([2 3 4])
gamma([2 2.5 3 3.2 3.6 4])
gamma([2 2.5 3 3.2 3.6 4]+1) % offset by 1
0 commentaires
Voir également
Catégories
En savoir plus sur Gamma Functions dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!