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

问题描述

我正在尝试使用以下公式创建一个计算任何正数的平方根的 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 
>> [sqa, nitr] = mySqrt(100) 

sqa =

    10


nitr =

    10

>> [sqa, nitr] = mySqrt(5) 

当我输入一个根不是整数的值时,该函数没有完成,我必须手动结束它。我一直无法弄清楚这其中的原因。

标签: matlabif-statementwhile-loop

解决方案


问题是 n 只是一个计数器,而不是结果。试试这个(我在手机上输入这个,请原谅一个小错别字)

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

推荐阅读