Matlab - biseccion

 
Vista:

biseccion

Publicado por will (1 intervención) el 24/06/2008 04:26:27
Hola amigos como estan, me pidieron en la uni que hiciera un varios algoritmos entre ellos el de la biseccion yo hice este:

function x=biseccion(fun,a,b,tol)
%Este programa aproxima la raiz de una funcion f(x)=0 usando el metodo de la biseccion
disp('Metodo de la Biseccion');
u=feval(fun,a);
v=feval(fun,b);
n=1;
while ((b-a)*0.5>tol)
c=(b+a)/2;w=feval(fun,c);
if sign(u)==sign(w)
a=c;u=w
else
b=c;v=w
end
n=n+1;
end;
x=c
las cuestiones son dos
la funcion tengo que hacerla en un archivo .m
supongamos
function y=fun(x)
y=x^2+2x+1

pero el agoritm no corre se detiene en la 4 linea y en la funcion tambien me da problemas cualquier ayuda en verdad la agradecere.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:biseccion

Publicado por Carlos Arriagada (11 intervenciones) el 28/06/2008 10:11:07
primero que nada
u=feval(fun,a); fun debe ser un string un nombre
es decir cuendo la llamas debes escribir :

x=biseccion( 'fun' ,a,b,tol)
lo otro es que

y=x^2+2x+1; esta mal ybe ser 2*x, auque este error es solo de el ejemplo rapido que pusiste para ejemplificar el asunto

yo corri la rutina y me funciona

Saludos
Carlos Arriagada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:biseccion

Publicado por Alexis Sanchez (2 intervenciones) el 05/08/2008 04:48:18
Pues yo tambien ando buscando ayuda con la misma funcion... y tratdo de colocar como dices x=biseccion( 'fun' ,a,b,tol) y corrigiendo lo de x^2+2*x+1 y aun sigue sin funcionar la funcion...

>> y='x^2+2*x+1'

y =

x^2+2*x+1

>> x=biseccion( 'fun' ,0,1,0.1)
Método de la bisección
??? Error using ==> feval
Undefined function or method 'fun' for input arguments of type 'double'.

Error in ==> biseccion at 5
u=feval(fun,a);

>> func

func =

x^2+2*x+1

>> x=biseccion( 'fun' ,0,1,0.1)
Método de la bisección
??? Error using ==> feval
Undefined function or method 'fun' for input arguments of type 'double'.

Error in ==> biseccion at 5
u=feval(fun,a);

>> x=biseccion( 'fun' ,0,1,1)
Método de la bisección
??? Error using ==> feval
Undefined function or method 'fun' for input arguments of type 'double'.

Error in ==> biseccion at 5
u=feval(fun,a);

>>

Por favor podria ser mas especifico en tu respuesta... estoy algo perdido..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:biseccion

Publicado por Alexis Sanchez (2 intervenciones) el 05/08/2008 05:08:50
trato incluso asi

>> biseccion('x*x*x-3*x+x-1',0,2,0.001)
??? Error: File: biseccion.m Line: 9 Column: 4
A BREAK statement appeared outside of a loop. Use RETURN instead.

>> y = biseccion('x*x*x-3*x+x-1',0,2,0.0001)
??? Error: File: biseccion.m Line: 9 Column: 4
A BREAK statement appeared outside of a loop. Use RETURN instead.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:biseccion

Publicado por rutilo (1 intervención) el 16/02/2009 22:36:30
No seas pendejo, el´problema de tu pinche algoritmo es que lo bajaste de internet, yo creo que deberias cambiarle el titulo por eso no funciona, o probarlo en otra computadora por que la tuya valemadre
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

RE:biseccion

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 12/10/2018 21:29:20
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
function x=biseccion14(fun,a,b,tol)
%Este programa aproxima la raiz de una funcion f(x)=0 usando el metodo de la biseccion 
disp('Metodo de la Biseccion');
% a=0; b=1; tol=0.0001;
u=feval(fun,a);
v=feval(fun,b);
U=[];
n=1;
while (b-a)*0.5>tol
c=(b+a)/2;w=feval(fun,c);
U=[U; a  c b  u  w v ];
if sign(u)==sign(w)
a=c;u=w ;
else
b=c;v=w ;
end
n=n+1;
end
x=c;
end
 
function y=fun(x)
y=x^2+2*x+1;
end

1
2
3
4
5
6
>> x=biseccion14('fun',-2,0, 0.00000001)
Metodo de la Biseccion
 
x =
 
   -1.0000


Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar