C/Visual C - Metodo de biseccion en c

 
Vista:
sin imagen de perfil

Metodo de biseccion en c

Publicado por Ian (1 intervención) el 12/09/2016 02:05:47
Alguien me puede ayuda con el metodo de biseccion, no me sale la tabla de cada iteracion y no se que estoy haciendo mal
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
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
float f(float);
 
int main(){
	double a,b,c,tolerancia;
	int iteraciones;
	printf("introduzca el valor inicial: ");
	scanf("%f",&a);
	printf("introduzca el valor final: ");
	scanf("%f",&b);
	printf("Introduzca la tolerancia: ");
	scanf("%f",&tolerancia);
	printf("\n	a	b	f(a)	f(b)	c	f(c) \n");
	iteraciones=0;
	do{
	c=(a+b)/2;
	if(f(a)*f(b)<0){
		b=c;
	}
	else{
		a=c;
	}
	printf("%f	%f	%f	%f	%f	%f",a,b,f(a),f(b),c,f(c));
}while(fabs(a-b)<tolerancia);
 
}
float f(float x){
	return (x*exp(x))-5;
 
}
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

Metodo de biseccion en c

Publicado por Tom (619 intervenciones) el 12/09/2016 15:11:37
Pon un '\n' en el printf dentro del bucle.
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

Metodo de biseccion en c

Publicado por Capitan Kirk (97 intervenciones) el 29/09/2016 09:34:33
En primer lugar, tus variables para el cálculo son de tipo double, pero tanto el tipo de la función como el de su parámetro de tipo float. Convendría que tanto la función como su parámetro fuesen también de tipo double.

En segundo lugar, creo que el algoritmo de cálculo que utilizas no es correcto. El método se basa en que, si f(a) y f(b) son de distinto signo, entonces, entre a y b debe haber un punto C en el que f(C) sea cero. Por tanto, en primer lugar debes comprobar que f(a) y f(b) son de distinto signo, en cuyo caso obtienes el punto medio c=(a+b)/2, y el valor de f(c). Si el valor absoluto de f(c) es menor que la tolerancia que pides, ya tienes la solución. Si no, compara el signo de f(c) con el de f(a) y el de f(b) para tomar el nuevo intervalo, y vuelta a empezar.

Conviene también que utilices el número de iteraciones como control de finalización del cálculo. Pide al principio el número máximo de iteraciones, y que te de un mensaje de que no hay convergencia cuando cumpla ese número de iteraciones sin llegar a una solución. Ten en cuenta que este método, además de encontrar los ceros de una función, te puede encontrar también aquellos puntos en que la función tenga discontinuidad.

Saludos,
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