Adding Plotting to bisection method

조회 수: 7 (최근 30일)
gracias claude
gracias claude 2021년 2월 13일
댓글: Alan Stevens 2021년 2월 13일
Not sure what the c is in this bisection method. Also I would like to add plotting of the intervals
function [x,e] = MyBisectFunc(f, a1,b1, number)
format long
c1 = f(a1); d1 = f(b1);
if c1*d1 > 0.0
error ('Func has same sign at both endpoints')
end
for i = 1:number
x = (a1 + b1) /2;
y = f(x);
disp([x,y])
if y == 0.0
e = 0
break
end
if c*y < 0
b = x
else
a = x
end
end
x = (a1 + b1)/2;
e = (b1 - a1) /2;

답변 (1개)

Alan Stevens
Alan Stevens 2021년 2월 13일
Like so:
f = @(x) x^2 - 2; % arbitrary function
a1 = 0; b1 = 1.8; % initial end-points
c1 = f(a1); d1 = f(b1);
if c1*d1 > 0.0
error ('Func has same sign at both endpoints')
end
number = 20;
for i = 1:number
c1 = f(a1); d1 = f(b1);
if c1*d1 > 0.0
error ('Func has same sign at both endpoints')
end
x = (a1 + b1) /2;
y = f(x);
disp([x,y])
if abs(y) < 10^-8
break
end
if c1*y < 0 % c1 not c
b1 = x;
else
a1 = x;
end
end
  댓글 수: 6
gracias claude
gracias claude 2021년 2월 13일
not very familar with the syntax
Alan Stevens
Alan Stevens 2021년 2월 13일
This section
if abs(y) < 10^-8
break
end
breaks out of the loop if the condition is met. Probably best to remove it if you want to plot the intervals. You'll need to do something like:
f = @(x) x^2 - 2; % arbitrary function
number = 20; % number of iterations
lo = zeros(1,number); % initialise vector
hi = zeros(1,number);
lo(1) = 0;
hi(1) = 1.8;
for i = 1:number-1
flo = f(lo(i)); fhi = f(hi(i));
if flo*fhi > 0.0
error ('Func has same sign at both endpoints')
end
mid = (lo(i) + hi(i)) /2;
fmid = f(mid);
if flo*fmid < 0 % c1 not c
hi(i+1) = mid;
lo(i+1) = lo(i);
else
lo(i+1) = mid;
hi(i+1) = hi(i);
end
end
disp([mid fmid])
plot(1:number,abs(hi-lo),'o'),grid
xlabel('iteration number'), ylabel('interval')

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Graphics Objects에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by