Approximating square root function using loops

Please help me solve this:
the "divide and average" method, an old-time method for approximating the square root of any positive number a, can be formulated as x=(x+a/x)/2. write a well-structured function to implement this alogrithm.
here is my first line:
function estSqrt= ApproxSqrt(a,tol)
a is the number whos square root i want to find
tol is the tolerance that must be greater than abs(xOld-xNew)/abs(xOld)

5 Kommentare

I think you mean
x=(x+a/x)/2
Char Jacobus
Char Jacobus am 6 Feb. 2019
yeah sorry
Matt J
Matt J am 6 Feb. 2019
Well, you have to write more than the first line of code in order to call it "help".
I can't seem to make this work for negative inputs of a
function estSqrt= ApproxSqrt(a,tol)
% function estSqrt= ApproxSqrt(a,tol)
e = 1;
x = a/2;
estSqrt = 1;
if a == 0
estSqrt = 0;
end
while e > tol
xOld = x;
x = (x+a/x)/2;
e=abs((x - xOld)/x);
estSqrt = x;
if a < 0
a = abs(a);
estSqrt = x*1i;
end
end
end
Matt J
Matt J am 6 Feb. 2019
I can't seem to make this work for negative inputs of a
Why would you need to?

Melden Sie sich an, um zu kommentieren.

Antworten (1)

AKARSH KUMAR
AKARSH KUMAR am 24 Jun. 2020

0 Stimmen

function estSqrt= ApproxSqrt(a,tol)
if a<0
msg='Can't calculate square root of negative number';
error(msg);
else if a==0
estSqrt=0;
else
e = 1;
x = a/2;
estSqrt = 1;
while e > tol
xOld = x;
x = (x+a/x)/2;
e=abs((x - xOld)/x);
estSqrt = x;
if a < 0
a = abs(a);
estSqrt = x*1i;
end
end
end
end

Kategorien

Mehr zu Mathematics finden Sie in Hilfe-Center und File Exchange

Produkte

Version

R2018b

Gefragt:

am 6 Feb. 2019

Beantwortet:

am 24 Jun. 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by