MATLAB - 阶乘
MATLAB - 阶乘计算及其细节
Section titled “MATLAB - 阶乘计算及其细节”非负整数 ‘n’ 的阶乘,记作 n!,是所有小于等于 n 的正整数的乘积。它是组合数学、概率论和高等数学中的一个基本函数。
推荐方法:factorial() 函数
Section titled “推荐方法:factorial() 函数”在 MATLAB 中计算阶乘,最有效、准确和推荐的方法是使用内置的 factorial() 函数。该函数经过性能优化,并能优雅地处理各种输入类型。
示例 1:标量的阶乘
Section titled “示例 1:标量的阶乘”示例 2:数组的阶乘
Section titled “示例 2:数组的阶乘”factorial 函数是向量化的,这意味着它可以同时对数组的每个元素进行操作。
重要注意事项与局限性
Section titled “重要注意事项与局限性”输入数据类型与约束
Section titled “输入数据类型与约束”输入 n 必须是非负实整数。如果您提供负整数或非整数,MATLAB 将抛出错误。
浮点精度与溢出
Section titled “浮点精度与溢出”阶乘值增长极快。MATLAB 默认使用双精度浮点数。这会带来两个结果:
- 大数:对于
n > 21,结果太大,无法精确表示为整数,而是作为浮点近似值返回。 - 溢出:对于
n > 170,factorial(n)的结果会超出最大的双精度数,并溢出为Inf(无穷大)。
解决特大数问题:符号数学工具箱
Section titled “解决特大数问题:符号数学工具箱”要精确计算 n > 170 的阶乘,您可以使用 Symbolic Math Toolbox™(符号数学工具箱)。首先将数字转换为符号对象。
学习旁白:手动实现阶乘
Section titled “学习旁白:手动实现阶乘”尽管在实际应用中应始终使用内置的 factorial 函数,但编写自己的版本是一个很好的编程练习。以下是两种常见的方法。
1. 迭代方法(使用 for 循环)
Section titled “1. 迭代方法(使用 for 循环)”这种方法通过循环和乘法构建结果。
2. 递归方法
Section titled “2. 递归方法”递归函数是调用自身的函数。这是一种优雅但通常效率较低的定义阶乘的方式。
如果您正在使用阶乘,您可能还会对以下函数感兴趣:
gamma(x):Gamma 函数,它是阶乘的推广。对于整数 n,gamma(n+1) = factorial(n)。nchoosek(n, k):计算二项式系数“n 选 k”,即从 n 个项目中选择 k 个项目的方法数。它使用阶乘定义:n! / (k! * (n-k)!)。