C/Visual C - Ayuda con metodo de biseccion

 
Vista:

Ayuda con metodo de biseccion

Publicado por Angel (1 intervención) el 26/03/2013 07:27:51
Hola a todos:

Estoy haciendo un programa que calcula raices usando el metodo de bisecion. Actualmente el programa realiza bien el calculo si la funcion esta en el codigo, pero necesito que el usuario introduzca la funcion por teclado y que el programa la calcule.

¿Hay alguna forma de que lo que inserte el usuario reemplace al x*x*x-x-2 del codigo?

Gracias.
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
#include <iostream>
#include <cmath>
#include <stdlib.h>
using namespace std;
double f(double x);
double biseccion(double a, double b, double tolerancia, int maxiter);
int main()
{
    double a, b, raiz;
    double tolerancia=0.00000;
    int maxiter=25;
    cout << "Ingrese inicio del intervalo: ";
    cin >> a;
    cout << "Ingrese final del intervalo: ";
    cin >> b;
    cout << "\n";
    cout << "  # de"<<"\n"<<"Iteracion"<<"\t"<<"   A"<<"\t"<<"   B"<<"\t"<<"   C"<<"\t"<<"   f(c)"<<endl;
    raiz=biseccion(a,b,tolerancia,maxiter);
    cout << "\n";
    cout << "La raiz es: "<< raiz <<endl;
    return 0;
}
 
 double f(double x)
 {
        return x*x*x-x-2;
 }
 double biseccion(double a, double b, double tolerancia, int maxiter)
 {
        double c;
        int numiter=1;
        do
        {
            c=(a+b)/2;
            if(f(a)*f(c)<0)
            {
               b=c;
            }
            else
            {
               a=c;
            }
            cout<<"     "<<numiter<<"\t"<<"\t"<<a<<"\t"<<b<<"\t"<<c<<"\t"<<f(c)<<endl;
            numiter++;
         }
         while((abs(f(c))>tolerancia)&&(numiter<maxiter));
         return c;
}
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

Ayuda con metodo de biseccion

Publicado por Capitan Kirk (97 intervenciones) el 26/03/2013 12:41:42
Para poder hacerlo, tendrías que leer la expresión de tu función como cadena de caracteres, descomponer esa cadena en sus partes: Nombre(s) de la(s) funcion(es) implicadas (seno, coseno, logaritmo, etc), variable independiente, coeficientes constantes, operadores aritméticos, orden correcto de paréntesis, puedes tener función de función, operaciones entre funciones, etc. En resumen, lo que hace un compilador con una línea de código. En Internet puedes encontrar código fuente de compiladores y ver cómo lo hacen, pero lo más fácil es...

... editar el programa y volver a compilar cada vez que necesites una función nueva.

(A no ser que quieras crear una versión simplificada de Matlab).

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