Bisection Method Code MATLAB
2.127 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Problem 4 Find an approximation to (sqrt 3) correct to within 10−4 using the Bisection method (Hint: Consider f(x) = x 2 − 3.) (Use your computer code)
I have no idea how to write this code. he gave us this template but is not working. If you run the program it prints a table but it keeps running. for some reason the program doesnt stop.
tol = 1.e-10;
a = 1.0;
b = 2.0;
nmax = 100;
% Initialization
itcount = 0;
error = 1.0;
% Graph of the function
xval = linspace(a,b,100);
for i=1:100
fval(i) = func(xval(i));
end
plot(xval,fval);
grid on;
hold on;
% iteration begins here
while (itcount <= nmax && error >= tol)
itcount = itcount + 1;
% Generate and save iteratres
x = a + (b-a)/2;
z(itcount) = x;
fa = func(a);
fb = func(b);
fx = func(x);
error = abs(fx);
% error = abs(x - xold);
if (error < tol)
x_final = x;
else
if (fa*fx < 0)
% root is between a and x
b = x;
else
% root is between x and b
a = x;
end
end
plot(z(1:itcount),zeros(itcount,1),'r+');
pause(5)
end
if (itcount < nmax);
val = func(x);
fprintf(1,'Converged solution after %5d iterations',itcount);
fprintf(1,' is %15.7e, %e \n',x_final, val);
else fprintf(1,'Not converged after %5d iterations',nmax);
end
function val = func(x)
%val = x^3 + 4 * x^2 - 10;
val = x^3 - x - 3;
%val = sin(x);
end
2 Kommentare
Aristi Christoforou
am 14 Apr. 2021
function[x]=bisect(m)
a=1;
b=3;
k=0;
while b-a>eps*b
x=(a+b)/2
if x^2>m
b=x
else
a=x
end
k=k+1
end
Antworten (6)
David Hill
am 4 Okt. 2019
function c = bisectionMethod(f,a,b,error)%f=@(x)x^2-3; a=1; b=2; (ensure change of sign between a and b) error=1e-4
c=(a+b)/2;
while abs(f(c))>error
if f(c)<0&&f(a)<0
a=c;
else
b=c;
end
c=(a+b)/2;
end
Not much to the bisection method, you just keep half-splitting until you get the root to the accuracy you desire. Enter function above after setting the function.
f=@(x)x^2-3;
root=bisectionMethod(f,1,2);
1 Kommentar
Justin Vaughn
am 10 Okt. 2022
Thank you for this because I was not sure of how to easily send a functino into my method's function. yours helped tremendously!
SHUBHAM GHADOJE
am 29 Mai 2021
function c = bisectionMethod(f,j,k,error)%f=@(x)x^2-3; j=1; k=2; (ensure change of sign between a and b) error=1e-4
c=(j+k)/2;
while abs(f(c))>error
if f(c)<0&&f(a)<0
j=c;
else
k=c;
end
c=(j+k)/2;
end
0 Kommentare
Prathamesh Purkar
am 6 Jun. 2021
Bearbeitet: Walter Roberson
am 3 Dez. 2021
tol = 1.e-10;
a = 1.0;
b = 2.0;
nmax = 100;
% Initialization
itcount = 0;
error = 1.0;
% Graph of the function
xval = linspace(a,b,100);
for i=1:100
fval(i) = func(xval(i));
end
plot(xval,fval);
grid on;
hold on;
% iteration begins here
while (itcount <= nmax && error >= tol)
itcount = itcount + 1;
% Generate and save iteratres
x = a + (b-a)/2;
z(itcount) = x;
fa = func(a);
fb = func(b);
fx = func(x);
error = abs(fx);
% error = abs(x - xold);
if (error < tol)
x_final = x;
else
if (fa*fx < 0)
% root is between a and x
b = x;
else
% root is between x and b
a = x;
end
end
plot(z(1:itcount),zeros(itcount,1),'r+');
pause(5)
end
if (itcount < nmax);
val = func(x);
fprintf(1,'Converged solution after %5d iterations',itcount);
fprintf(1,' is %15.7e, %e \n',x_final, val);
else
fprintf(1,'Not converged after %5d iterations',nmax);
end
function val = func(x)
%val = x^3 -x + 1;
val = x^3 -x + 1;
%val = sin(x);
end
0 Kommentare
narendran
am 2 Jul. 2022
5cosx + 4.5572 -cos30cosx-ssin30sinx
2 Kommentare
Image Analyst
am 2 Jul. 2022
@narendran it doesn't look like this is an answer to the original question. I think you posted this in the wrong place.
Walter Roberson
am 2 Jul. 2022
syms x
y = 5*cos(x) + 4.5572 - cos(30)*cos(x)-sin(30)*sin(x)
fplot(y, [-20 20]); yline(0)
vpasolve(y,x)
Aman Pratap Singh
am 3 Dez. 2021
Bearbeitet: Walter Roberson
am 3 Dez. 2021
f = @(x)('x^3-2x-5');
a = 2;
b = 3;
eps = 0.001;
m = (a+b)/2;
fprintf('\nThe value of, after bisection method, m is %f\n', m);
while abs(b-a)>eps
if (f(a)*f(m))<0
b=m;
else
a=m;
end
m = (a+b)/2;
end
fprintf('\nThe value of, after bisection method, m is %f\n', m);
1 Kommentar
Walter Roberson
am 3 Dez. 2021
f = @(x)('x^3-2x-5');
That means that f will become a function handle that, given any input, will return the character vector ['x', '^', '3', '-', '2', 'x', '-', '5'] which is unlikely to be what you want to have happen.
f(0)
f(1)
f(rand(1,20))
Siehe auch
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!