创建一个MATLAB函数,用于估计e并概述误差

创建一个MATLAB函数,用于估计e并概述误差,matlab,if-statement,while-loop,Matlab,If Statement,While Loop,我正在尝试创建一个函数,它向我提供eexp1的估计值,并向我提供有关函数中错误的信息。 然而,当尝试使用if语句在函数中创建无限递归时,估计e不是问题 这是我的功能 function e = myExpFunction(i) for i = 1:20 n = 10.^i; e = (1+1./n).^n; if abs(exp(1) - myExpFunction(i)) < abs(exp(1) - myExpFunction(i-1)) fpri

我正在尝试创建一个函数,它向我提供eexp1的估计值,并向我提供有关函数中错误的信息。 然而,当尝试使用if语句在函数中创建无限递归时,估计e不是问题

这是我的功能

function e = myExpFunction(i)
for i = 1:20
    n = 10.^i;
    e = (1+1./n).^n;
    if abs(exp(1) - myExpFunction(i)) < abs(exp(1) - myExpFunction(i-1))
        fprintf('The error always decreases as n increases.\n')    
    end
end
end
下面是错误消息

myExpFunction(i)
Out of memory. The likely cause is an infinite recursion within the program.

Error in myExpFunction (line 5)
    if abs(exp(1) - myExpFunction(i)) < abs(exp(1) - myExpFunction(i-1))
我尝试使用while循环将I的值限制在1和20之间,但得到了相同的错误消息。所以我想我一定在这些边界内创建了一个无限循环


我很难解决这个问题,因为我不明白在程序中我在哪里创建了无限递归。如果有人能帮我解决问题,给我一些启示,那将是一个巨大的帮助,谢谢。

我想我理解这个问题。在中,如果要调用所处的函数,则必须调用变量ei和ei-1以避免无限循环

function e = myExpFunction(i)

e(1) = (1+1/10)^10
for i = 2:20
    n = 10.^i;
    e(i) = (1+1/n)^n;
    if abs(exp(1) - e(i)) < abs(exp(1) - e(i-1))
        fprintf('The error always decreases as n increases.\n')    
    end
end

end
1请不要使用i或j作为可变名称,因为它们是为虚拟单位保留的,参见。2每次调用myExpFunction时,都会启动一个for i=1:20,忽略传递的i并再次在内部调用myExpFunctioni,因此这是一个无限递归。@HansHirse 1 i和j不是保留的;MATLAB非常有效地处理阴影。我同意避免隐藏这些名称是一种很好的做法,但即使是MATLAB官方文档也在某些地方使用I作为循环索引,这不是代码评审SE。这应该是一个答案,而不是对问题的评论!