为什么 Matlab 阶乘函数将整数视为非整数?

Why does Matlab factorial function perceives an integer as a non-integer?

我正在尝试在 Matlab 中构建一个函数,该函数为正弦生成 0 左右的泰勒级数,用户可以插入 x(正弦的近似值)和最大误差。因此,我希望该函数检查最大误差,并根据该最大值生成泰勒级数中的元素数量。

我收到以下错误:

Error using factorial (line 20)

N must be an array of real non-negative integers.

Error in maxError (line 19)

y(x) = y(x) + (-1)^(j) * x^(2j+1)/factorial(2j+1)

下面是我的代码。

function [n] = maxError(x,e);
%Computes number of iterations needed for a given absolute error.

n=1;

while abs(x)^(n+1)/factorial(n+1) >= e
    n = n+1;
end


if mod(n,2) == 0
    n=n+1;
end

y=@(x) x;

j=1;
while j<n
    y(x) = y(x) + (-1)^(j) * x^(2j+1)/factorial(2j+1)
    j=j+1;
end

return

我想我得到这个错误是因为 factorial 函数只能接受整数,但在我看来,我正在给它输入一个整数。由于 j=1; 然后每次迭代变大 1,我看不出 Matlab 如何将其视为整数以外的其他东西。

感谢任何帮助。

您正在使用 j 作为索引变量,这也是 Matlab 中的复数,而您忘记了 * 乘法。

您可以将 j 用作变量(不推荐!)但是当您将数字放在它前面时,Matlab 仍然会将 is 解释为复数,而不是变量。

添加乘号将解决问题,但使用 ij 作为变量会给您带来这些难以调试的错误。如果您使用 a,错误会更容易理解:

>> a=10;
>> 2a+1
 2a+1
  ↑
Error: Invalid expression. Check for missing multiplication operator, missing or 
unbalanced delimiters, or other syntax error. To construct matrices, use brackets
instead of parentheses.