创建一个MATLAB函数,用于估计e并概述误差
我正在尝试创建一个函数,它向我提供eexp1的估计值,并向我提供有关函数中错误的信息。 然而,当尝试使用if语句在函数中创建无限递归时,估计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
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。这应该是一个答案,而不是对问题的评论!