Why can't Matlab do the factorial of a non-integer number?
14 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Davide Masiello
2022-2-6
编辑:Davide Masiello
2022-2-6
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 个评论
Dyuman Joshi
2024-1-23
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)
更多回答(2 个)
DGM
2022-2-6
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Special Functions 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!