Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试创建一个MATLAB函数,包括一个while循环,用于计算值的平方根_Matlab_If Statement_While Loop - Fatal编程技术网

尝试创建一个MATLAB函数,包括一个while循环,用于计算值的平方根

尝试创建一个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) >

我试图创建一个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) >=  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