How do I save the error data for each iteration?

조회 수: 14 (최근 30일)
Willson Blesstian
Willson Blesstian 2021년 3월 9일
편집: Willson Blesstian 2021년 3월 9일
Hello,
I have a bisection function code that doesn't quite do what I want it to do. I want it to output the error data for each iteration. Right now, it's only giving me the final error value. I know I'm supposed to do err = [] or something like that but I haven't been able to implement it correctly. Could I please get some assistance? Thank you
function [x_i,err,yi] = bisect(f,x_l,x_r,delta)
yl = feval(f,x_l);
yr = feval(f,x_r);
err = [];
if yl*yr > 0
disp('error'),0;
else
max1 = 1+round((log(x_r-x_l)-log(delta))/log(2));
for k = 1:max1
x_i = (x_l+x_r)/2;
yi = feval(f,x_i);
if yi == 0
x_l = x_i;
x_r = x_i;
elseif yr*yi > 0
x_r = x_i;
yr = yi;
else
x_l = x_i;
yl = yi;
end
if x_r-x_l < delta, break,end
end
end
x_i = (x_l+x_r)/2;
err = abs(x_r-x_l);
yi = feval(f,x_i);

채택된 답변

Mathieu NOE
Mathieu NOE 2021년 3월 9일
hello
simply put err computation in the main loop and index it
function [x_i,err,yi] = bisect(f,x_l,x_r,delta)
yl = feval(f,x_l);
yr = feval(f,x_r);
err = [];
if yl*yr > 0
disp('error'),0;
else
max1 = 1+round((log(x_r-x_l)-log(delta))/log(2));
for k = 1:max1
x_i = (x_l+x_r)/2;
yi = feval(f,x_i);
if yi == 0
x_l = x_i;
x_r = x_i;
elseif yr*yi > 0
x_r = x_i;
yr = yi;
else
x_l = x_i;
yl = yi;
end
err(k) = abs(x_r-x_l); %% here
% if x_r-x_l < delta, break,end
if err(k) < delta, break,end %% and here
end
end
x_i = (x_l+x_r)/2;
% err = abs(x_r-x_l); % remove here
yi = feval(f,x_i);
end

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Get Started with MATLAB에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by