Попытка создать функцию MATLAB, включая while-l oop, которая вычисляет квадрат root значения - PullRequest
0 голосов
/ 26 февраля 2020

Я пытаюсь создать функцию MATLAB, которая вычисляет квадрат root любого положительного числа, используя эту формулу:

x (n + 1) = (a + x (n) * x ( n-1)) / (x (n) + x (n-1))

, а также сообщает мне значение n, при котором while-l oop в моей функции завершается.

Мне удалось создать функцию, которая вначале работала нормально, когда я вводил 16 и 100. Однако, когда я вводил значения, для которых root не является целым числом, функция не давала никаких решений.

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) 

Когда я ввожу значение, которое root не является целым числом, функция не завершается, и мне приходится завершать ее вручную. Я не смог выяснить причину этого.

Ответы [ 2 ]

1 голос
/ 26 февраля 2020

Проблема в том, что 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
1 голос
/ 26 февраля 2020

Ваша функция проверяет только целые числа n=n+1, поэтому она может получать только целые числа в качестве ответов. Нет ничего, что могло бы остановить это, если бы он отклонил ответ, так что l oop будет продолжаться бесконечно.

...