Trying to calculate the square root of a positive number based on the “divide and average” scheme.
1 次查看(过去 30 天)
显示 更早的评论
I am re-posting this as it would not post correctly earlier.
I am trying to calculate the square root of a positive number, a, based on the “divide and average” scheme. The scheme is formulated in the following:
x = ( x + a/x) / 2
My function, however, returns incorrect results. I was hoping someone could help me debug it.
function v = my_sqrtD(t)
%find the square root of t, and t must be larger than 0.
v_pre = t/2.0;
my_eps = 0.0001;
%when the limit is reached, stop the loop
n_limit = 1000000;
for i=1:n_limit
v = (v_pre + t/v_pre)/2.0;
res = abs((v-v_pre)/v);
if res < my_eps, break, end
end %end of loop
if (i==n_limit)
disp('The root cannot be found.');
end
0 个评论
采纳的回答
Roger Stafford
2016-2-21
编辑:Roger Stafford
2016-2-21
The line
v = (v_pre + t/v_pre)/2.0;
is your trouble. It should read:
v_pre = (v_pre + t/v_pre)/2.0;
However, you will have to appropriately revise your computation of 'res'.
2 个评论
Roger Stafford
2016-2-21
I've changed it a bit:
for i=1:n_limit
v = (v_pre + t/v_pre)/2.0;
res = abs((v-v_pre)/v);
v_pre = v; % <-- Update v_pre (That's what was missing)
if res < my_eps, break, end
...
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Loops and Conditional Statements 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!