Matlab - Programacion en Matlabd: Método de la bisección

 
Vista:

Programacion en Matlabd: Método de la bisección

Publicado por Oier (3 intervenciones) el 15/02/2012 22:01:54
Buenas, he creado un script para aplicar el método de la bisección. El código que he creado sólo sirve para la función almacenada en la function f. Lo que quiero hacer es que el usuario pueda introducir cualquier función f y el programa lo calcule, pero no sé como hacer este paso. El código que he creado es éste:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
clear
format short;
a=input('Introduzca el valor de a');
b=input('Introduzca el valor de b');
cont=input('Introduzca el número de iteraciones');
for k=1:1:cont
c=(a+b)/2;
e=abs((b-a)/2);
A(k,:)=[k a b c f(c) e];
if f(a)*f(c)<0
    b=c;
else
    a=c;
end
end
fprintf('\n k a b c f(c) error \n')
disp(A)
fprintf('Solución: c='), disp(c)
fprintf('f(c)='), disp(f(c))
fprintf('error'), disp(e)

Saludos y gracias de antemano
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
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

Programacion en Matlabd: Método de la bisección

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 15/02/2012 23:45:51
hola Oier.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
clear all
format short;
a=input('Introduzca el valor de a: ');
b=input('Introduzca el valor de b: ');
cont=input('Introduzca el número de iteraciones cont: ');
fun=input('Introduzcal a funcion f(x)=','s');
f=inline(fun);
for k=1:cont
    c=(a+b)/2;
    e=abs((b-a)/2);
    A(k,:)=[k a b c f(c) e];
    if f(a)*f(c)<0
        b=c;
    else
        a=c;
    end
end
fprintf('\n \tk \ta \tb \tc \tf(c) \terror \n')
disp(A)
fprintf('Solución:\n c=%8.5f\n',c)
fprintf('f(c)=%8.5f\n',f(c))
fprintf('error=%8.5f\n',e)


EJECUCION
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
>> biseccion_ayuda
Introduzca el valor de a: 0
Introduzca el valor de b: 2
Introduzca el número de iteraciones cont: 10
Introduzcal a funcion f(x)=exp(x)-2
 
 k 	a 	b 	c 	f(c) 	error
    1.0000         0    2.0000    1.0000    0.7183    1.0000
    2.0000         0    1.0000    0.5000   -0.3513    0.5000
    3.0000    0.5000    1.0000    0.7500    0.1170    0.2500
    4.0000    0.5000    0.7500    0.6250   -0.1318    0.1250
    5.0000    0.6250    0.7500    0.6875   -0.0113    0.0625
    6.0000    0.6875    0.7500    0.7188    0.0519    0.0313
    7.0000    0.6875    0.7188    0.7031    0.0201    0.0156
    8.0000    0.6875    0.7031    0.6953    0.0043    0.0078
    9.0000    0.6875    0.6953    0.6914   -0.0035    0.0039
   10.0000    0.6914    0.6953    0.6934    0.0004    0.0020
 
Solución:
 c= 0.69336
f(c)= 0.00042
error= 0.00195


Saludos.
JOSE JEREMIAS CABALLERO

Servicios de programacion matlab


Asesor de Proyectos con Matlab
programador en matlab
"Detalladar sus preguntas, para recibir respuestas acertadas"
[email protected]
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

Programacion en Matlabd: Método de la bisección

Publicado por Oier (3 intervenciones) el 16/02/2012 18:16:08
Muchísimas gracias José
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

Programacion en Matlabd: Método de la bisección

Publicado por carlos (1 intervención) el 09/04/2019 04:46:07
cual es la funcion de esta parte
A(k,:)=[k a b c f(c) e];
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

Programacion en Matlabd: Método de la bisección

Publicado por moises1 (1 intervención) el 14/03/2012 01:04:41
buenas vi tu codigo esta muy completo pero qusiera saber por que no puedo meter una ecuacion de esta forma 3x^2+3x ??? por favor me haria de mucha ayuda gracias
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

Programacion en Matlabd: Método de la bisección

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 14/03/2012 01:36:53
Hola Moises.
Trata de hacer tu mismo tus codigos.
Al parecer solo haz copiado de otro usario su codigo y lo quieres ejecutar y no puedes ejecutarlos. Asi no vas a aprender matlab, en el mundo de la programacion cada usuario tiene su propio lógica.
Ademas estudia matlab basico.
Bueno te digo esto, porque tu pregunta sencilla. Tu error es: que estas introduciendo mal los datos a matlab por el teclado.
la forma correcta es:
1
3*x^2+3*x



Saludos
JOSE JEREMIAS CABALLERO
Servicios de programacion matlab
Asesor de Proyectos con Matlab
programador en matlab
[email protected]


http://matlabcaballero.blogspot.com/
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

Programacion en Matlabd: Método de la bisección

Publicado por josh (1 intervención) el 27/09/2013 04:02:50
disculpes como hago para correr estos codigos en matlab
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

Programacion en Matlabd: Método de la bisección

Publicado por JOSE (1 intervención) el 01/12/2015 16:27:06
jose muchas gracias por tu aporte disculpa me puedes poner una explicaciond de como funciona el programa porfavor, es para un trabajo porfavor te lo agrdeceria mucho
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

Programacion en Matlabd: Método de la bisección

Publicado por ervin adrian duran aguilar (1 intervención) el 21/04/2019 01:28:26
Hola, por mi parte me base en el pseudocodigo del libro chapra...antes utilizada el comando inline...para que el usuario introduzca la funcion...pero cual seria otra forma de lograr los mismo...?? Dado que inline ya no esta disponible
Gracias
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

Programacion en Matlabd: Método de la bisección

Publicado por Stiv (1 intervención) el 22/04/2019 17:56:41
Puedes intentar:
syms x;
fx = input('Ingrese función a evaluar: ');
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 15 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Programacion en Matlabd: Método de la bisección

Publicado por Claudia (3 intervenciones) el 17/04/2021 16:21:56
Buenas tengo varias dudas sobre el script.
Tengo que entregar un trabajo sobre el teorema de bolzano, y quiero que me salgan todas las iteraciones posibles, sin tener que poner yo el número de iteraciones, además quiero tambien que salga en la columna de la n, que pertenece al número de iteraciones, números enteros. Ojalá me sirvas de ayuda, muchas gracias de antemano!!!!
Copio el script:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
%================================================================
% Método de bipartición usando el Teorema de Bolzano
%================================================================
clear
clc
syms x
 
% Pedir f y el intervalo donde se encuentra la raiz
% --------------------------------------------------
fun=input('Introduzca la funcion f(x)=','s');
a=input('Entrar extremo izquierdo del intervalo : ');
b=input('Entrar extremo derecho del intervalo : ');
error=input('Error máximo permitido a la solución aproximada : ');
cont=input('Introduzca el número de iteraciones cont: ');
 
f=inline(fun);
for n=1:cont
    c=(a+b)/2;
    error=abs((b-a)/2);
    A(n,:)=[n a b c f(c) error];
    if f(a)*f(c)<0
        b=c;
    else
        a=c;
    end
end
disp ('--------------------------------------------------------------')
c1='n';c2='a  ';c3='b';c4='c';c5='f(c)';c6='error';
fprintf('\n%6s%12s%9s%10s%11s%12s\n',c1,c2,c3,c4,c5,c6);
disp ('--------------------------------------------------------------')
disp(A)
disp ('--------------------------------------------------------------')
fprintf('Aproximación pedida:\n c=%8.6f\n',c)
disp('Fin del proceso');disp(' ');
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

Programacion en Matlabd: Método de la bisección

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 17/04/2021 16:47:51
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
%================================================================
% Método de bipartición usando el Teorema de Bolzano
%================================================================
clear
clc
syms x
% Pedir f y el intervalo donde se encuentra la raiz
% --------------------------------------------------
fun=input('Introduzca la funcion f(x)=','s');
a=input('Entrar extremo izquierdo del intervalo : ');
b=input('Entrar extremo derecho del intervalo : ');
error=input('Error máximo permitido a la solución aproximada : ');
 
f=inline(fun);
error1=100;
n=1;
while error1>error
c=(a+b)/2;
error1=abs((b-a)/2);
 
A(n,:)=[n a b c f(c) error];
if f(a)*f(c)<0
b=c;
else
a=c;
end
n=n+1;
end
disp ('--------------------------------------------------------------')
c1='n';c2='a ';c3='b';c4='c';c5='f(c)';c6='error';
fprintf('\n%6s%12s%9s%10s%11s%12s\n',c1,c2,c3,c4,c5,c6);
disp ('--------------------------------------------------------------')
disp(A)
disp ('--------------------------------------------------------------')
fprintf('Aproximación pedida:\n c=%8.6f\n',c)
disp('Fin del proceso');disp(' ');

Para que salga entero que usar para impresion de valores el formato de fprintf
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 10
Ha aumentado su posición en 15 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Programacion en Matlabd: Método de la bisección

Publicado por Claudia (3 intervenciones) el 17/04/2021 17:30:30
Ahora mi problema es que me da el mismo error en todas las iteraciones,¿como lo puedo hacer?
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
sin imagen de perfil
Val: 10
Ha aumentado su posición en 15 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Programacion en Matlabd: Método de la bisección

Publicado por Claudia (3 intervenciones) el 18/04/2021 20:04:28
Buenas!!
Tengo que modificar este script con códigos similares para que me quede en una tabla que tenga como columnas n, a, b, c, f(c), error y no consigo entender como hacerlo. A su vez me debe de dar todas las iteraciones posibles. Muchísimas gracias de antemano sois de gran ayuda!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
%================================================================
% Método de bipartición usando el Teorema de Bolzano
%================================================================
clear
clc
syms x
 
% Pedir f y el intervalo donde se encuentra la raiz
% --------------------------------------------------
f=input('Dame la función a tratar (variable x) : ');
a=input('Entrar extremo izquierdo del intervalo : ');
b=input('Entrar extremo derecho del intervalo : ');
error=input('Error máximo permitido a la solución aproximada : ');
disp(' ');
fprintf('%s\n','------------------------------------');
 
% Evaluar si el signo es diferente en los extremos
%--------------------------------------------------
fa=subs(f,x,a);
fb=subs(f,x,b);
if fa*fb > 0
	fprintf('%s %f %s %f \n \n',...
        'El intervalo proporcionado no sirve pues f(a)=',fa,' y  f(b)=',fb);
	salir=true; % No llegará a comenzar el proceso iterativo
elseif fa==0 || fb == 0
	fprintf('%s %f %s %f \n \n',...
        'La solución ya viene dada pues f(a)=',fa,' y  f(b)=',fb);
	salir=true;
else
	salir=false; % Comenzará el proceso iterativo
end
 
% Comienza iteración; se mantiene en el bucle mientras salir==false
%------------------------------------------------------------------
pasos=0;         % Iteraciones necesarias
while ~salir
	amplitud=(b-a)/2;
	c=(a+b)/2;
    fc=subs(f,x,c);
	pasos=pasos+1;
	fprintf('%s %u %s \n','Iteración            : ',pasos,'  ');
	fprintf('%s %f %s %f %s \n','Raíz en el intervalo : (',a,' , ',b,')')
	fprintf('%s %f \n','Punto medio ~ c      : ',c);
    fprintf('%s %f \n','f(c)                 : ',fc);
	fprintf('%s %f \n','Error máximo actual  : ',amplitud);
	tecla=input('------------------------------------','s');
	if fc==0
        salir=true;
		fprintf('%s %f %s \n','Encontrado valor exacto : ',pmedio,'  ');
    elseif amplitud < error
		salir=true;
        fprintf('%s %f %s \n','Aproximación pedida  : ',c,'  ');
	elseif fa*fc > 0
		a=c;
    else
		b=c;
	end
end
disp('Fin del proceso');disp(' ');
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