尝试创建一个MATLAB函数,包括一个while循环,用于计算值的平方根
我试图创建一个MATLAB函数,使用以下公式计算任何正数的平方根: x(n+1)=(a+x(n)*x(n-1))/(x(n)+x(n-1)) 还告诉我函数中while循环终止时的n值 当我输入16和100时,我设法创建了一个起初似乎运行良好的函数。但是,当我输入的值的根不是整数时,函数无法产生任何解尝试创建一个MATLAB函数,包括一个while循环,用于计算值的平方根,matlab,if-statement,while-loop,Matlab,If Statement,While Loop,我试图创建一个MATLAB函数,使用以下公式计算任何正数的平方根: x(n+1)=(a+x(n)*x(n-1))/(x(n)+x(n-1)) 还告诉我函数中while循环终止时的n值 当我输入16和100时,我设法创建了一个起初似乎运行良好的函数。但是,当我输入的值的根不是整数时,函数无法产生任何解 function [sqa, nitr] = mySqrt(a) n = 0; sqa = (a+(n)*(n-1))/((n)+(n-1)); while abs(sqa - n) >
function [sqa, nitr] = mySqrt(a)
n = 0;
sqa = (a+(n)*(n-1))/((n)+(n-1));
while abs(sqa - n) >= eps(10*a)
n = n + 1;
if n == 0
sqa = 1;
nitr = 0;
elseif n == 1
sqa = a;
nitr = 1;
else
sqa = (a+(n)*(n-1))/((n)+(n-1))
nitr = n;
end
end
当我输入一个根不是整数的值时,函数不会完成,我必须手动结束它。我无法找出原因。您的函数只检查整数
n=n+1
,因此它只能得到整数作为答案。如果超出了答案,则没有什么可以阻止它,因此循环将无限期地继续。您的函数只检查整数n=n+1
,因此它只能将整数作为答案。如果它超出了答案,那么没有什么可以阻止它,因此循环将无限期地继续。问题在于n只是一个计数器,而不是结果。试试这个(我在手机上打这个,所以请原谅一个小的打字错误)
问题是n只是一个计数器,而不是结果。试试这个(我在手机上打这个,所以请原谅一个小的打字错误)
对,这是有道理的。我需要完全重新考虑我的函数,还是有一些小的调整可以解决这个问题?事实上,看看Thomas的参考资料,我误解了这个方法,你的问题是你用n代替x(n),你应该把x(n)作为一个序列来生成,这是有道理的。我需要完全重新考虑我的函数,还是有一些小的调整可以解决这个问题?实际上,看看Thomas的参考资料,我误解了这个方法,你的问题是你用n代替x(n),你应该生成一个序列。这可能是你的答案,这可能是你的答案
>> [sqa, nitr] = mySqrt(100)
sqa =
10
nitr =
10
>> [sqa, nitr] = mySqrt(5)
function [x2, iteration] = mySqrt(a)
x1 = 1;
x2 = 1;
iteration = 0;
while abs( x2*x2 - a ) > 10*a*eps
iteration = iteration + 1;
x0 = x1;
x1 = x2;
x2 = ( a + x1*x2 ) / ( x1+x2 );
end
end