New to MATLAB - trying to write bisection method?

Hello, I'm brand new to MATLAB and am trying to understand functions and scripts, and write the bisection method based on an algorithm from our textbook. However, I'm running into problems. Could anyone help me please?
Here is my code:
function [f] = Bisection(a,b,Nmax,TOL)
f = x^3 - x^2 + x;
i=1;
BisectA=f(a);
while i <= Nmax
p=a+(b-a)/2;
BisectP=f(p);
if BisectP == 0 || (b-a)/2 < TOL
disp('p');
end
i=i+1;
if BisectA*BisectP > 0
a=p;
BisectA=BisectP;
else
b=p;
end
end
disp('Method failed after num2str(Nmax) iterations, Nmax=', Nmax);
Thanks.

3 comentarios

Walter Roberson
Walter Roberson el 15 de Dic. de 2013
What problems are you running into? Are you getting an error message? If so then at which line, and under what circumstances?
youcef mokrane
youcef mokrane el 9 de Nov. de 2020
Editada: Walter Roberson el 9 de Nov. de 2020
x=4:4.7
f=tan(x)-x
a=4
b=4.7
fa=tan(a)-a
fb=tan(b)-b
n=1
n0=5000
while n<5000
p=(a+b)/2
fp=tan(p)-p
n=n+1
if fa*fp>0
a=p
else
b=p
end
end
Why are you bothering to do x=4:4.7 ? The default increment for the colon operator is 1, so 4:4.7 is the same as 4:1:4.7 which is just going to be 4 .
Why are you assigning to n0 when you do not use it?

Iniciar sesión para comentar.

 Respuesta aceptada

Walter Roberson
Walter Roberson el 15 de Dic. de 2013
Editada: Walter Roberson el 16 de Dic. de 2013
Your line
f = x^3 - x^2 + x;
does not define a function. Try
f = @(x) x^3 - x^2 + x;

10 comentarios

AM
AM el 16 de Dic. de 2013
Hi, I tried that but it gave me an "unexpected MATLAB expression" error. I then tried f(x) = x^3 - x^2 + x;
but I received an "undefined function or variable 'x' " message.
I have no idea what's going on?!
Walter Roberson
Walter Roberson el 16 de Dic. de 2013
Sorry somehow my fingers missed the @. I have corrected above.
You need to use dot multiplication
SADIA RASHEED
SADIA RASHEED el 29 de Sept. de 2016
Editada: Walter Roberson el 29 de Sept. de 2016
function [f] = Bisection(a,b,Nmax,TOL)
f = @(x) x^3 - x^2 + x;
i=1;
BisectA=f(a);
while i <= Nmax
p=a+(b-a)/2;
BisectP=f(p);
if BisectP == 0 || (b-a)/2 < TOL
disp('p');
end
i=i+1;
if BisectA*BisectP > 0
a=p;
BisectA=BisectP;
else
b=p;
end
end
disp('Method failed after num2str(Nmax) iterations, Nmax=', Nmax);
%%%%but it gives an error function [f] = Bisection(a,b,Nmax,TOL)
|
Error: Function definitions are not permitted in this context.
plz help
Walter Roberson
Walter Roberson el 29 de Sept. de 2016
You need to store the code in a file named Bisection.m
It is not permitted to define functions from the MATLAB command line.
In all MATLAB versions up to R2016a, it was also not permitted to define functions in "script" files -- that is, files that do not start with the word "function" or "classdef". In R2016b that is now permitted, though.
SADIA RASHEED
SADIA RASHEED el 30 de Sept. de 2016
okay.Thanks
Error in ==> Bisection at 4 BisectA=f(a);
what possible correction I can make?
Silverio Jr Magday:
You can make the correction of going down to the command line and calling the function by name, passing in appropriate valeus for a, b, Nmax, and TOL, such as
Bisection(-8, 14, 207, 1e-10)
You attempted to run the code by clicking on "Run", which is the same as if you had gone to the command line and commanded
Bisection
without passing in anything. Then when the code reached the first line in which it needed one of the parameters, the code failed because there was no parameter there.
A_J Khan
A_J Khan el 18 de Sept. de 2017
Editada: Walter Roberson el 18 de Sept. de 2017
function p = bisection(f,a,b)
|
Error: Function definitions are not permitted in this
context.
I have this error with above code....???
Walter Roberson
Walter Roberson el 18 de Sept. de 2017
You can never define a function at the command prompt: you have to store a function inside a .m file; in this case, bisection.m
In versions up to R2016a you cannot store a function inside a script file (a .m file that does not start with the word "function" or "classdef"). That changed in R2016b.

Iniciar sesión para comentar.

Más respuestas (1)

Categorías

Más información sobre Live Scripts and Functions en Centro de ayuda y File Exchange.

Etiquetas

Preguntada:

AM
el 15 de Dic. de 2013

Comentada:

el 9 de Nov. de 2020

Community Treasure Hunt

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

Start Hunting!

Translated by