Metodo bisección para cualquier funcion dada

Iniciado por rob1104, 5 Mayo 2009, 04:29 AM

0 Miembros y 1 Visitante están viendo este tema.

rob1104

Hola, tengo un programa en C que resuelve una función mediante el metodo de bisección, el problema es que es una ecación fija, la cual es retornada mediante una función de C, por ejemplo: double f(double x)
{
    return (pow(x,2)+x);
}

Ahi me devolveria las raices de la ecuación X^2+x, el algoritmo funciona perfecto, pero quisiera que fuera para una ecuacion escrita por el usuario, es decir que me pida la ecuación la evalue y si es correcta aplicar el algoritmo y si es incorrecta devolver un error.
Alguna idea?

Saludos
Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.

Eliptico

Buenas!!!!

Esos metodos numericos, jeje.

Igual algun otro te lo explicara mejor que yo. Cuando me toco hacer el programilla tambien me encontre en la misma situacion que tu. estuve mirando popr ahi que era lo que se podia hacer y encontre algo de informacion, pero con la ide de programacion que tenia por aquel entonces desisti.

No se si sera la idea correcta, pero una funa es un conjunto de composiciones de funciones y operaciones con estas.

Lo que tengo leido sobre el tema es que tendrias que pasar de la notacion algebraica a la notacion prefija

por ejemplo

cos(x+2) + log(x^5*cos(x))-> +( cos( +(x,2) ) , log( *( ^(x,5) , cos(x) ) ) )

guardando operadores (considera las funciones elementales como operadores) y a continuacion los operandos sobre los que actuan, y me parece que esto se hace con pilas, recorriendo la cadena y  utilizando una pila cuando aparecen funciones o parentesis para ir acumulando los operandos. (vaya lio, en la cabeza lo tengo to enguarrao y no se muy bien como explicarlo, no se si te aclarare o te liare  :-[ )

Si alguien no te lo resuelve antes le voy a echar un ojo que es una espina que tengo clavada desde hace tiempo, y si lo resuelven pues parendemos todos a base de copiar.  :silbar:

Hasta luego!!!!!

Eliptico

¿funa? ¿parendemos? ¿que tengo yo en los dedos? (menos mal que deje el piano) me referia a "funcion" y "aprendemos".

Lo siento, cosas del sueño.

rob1104

Gracias por el dato, estaba pensando en algo mas o menos asi:
Código (cpp) [Seleccionar]
double coe[10], expo[10];
int i, n;
void CapturaFuncion(void)
{
     cout<<"\n\t\t\t ||Capturando Funcion||";
     cout<<"\n\n\nIntroduce el numero de Terminos del Polinomio: ";
     cin>>n;
     for (i=1; i<=n; i++)
     {
         cout<<"\t\t Coeficiente "<<i <<"= "; cin>>coe[i];
         cout<<"\t\t Exponente "<<i <<"= "; cin>>expo[i];
     }
     cout<<"\n\n\t El polinomio es:\n\n";
     cout<<"f(x) = ";
     for (i=1; i<=n; i++)
         {
               cout<< coe[i]<<"x^"<<expo[i];
               if (i<n) cout <<" + ";
         }
}
Pero no serviria para log() sin() cos() entre otras como que solo puedo sumar  :-(

Saludos
Sin análisis de requisitos o sin diseño, programar es el arte de crear errores en un documento de texto vacío.

Eliptico

Buenas!!!

Que no he podido resistirme a empezar ya con el problema. Jejejeje.

Si solo lo quieres con polinomios es bien sencillo, si lo quieres para composicion y operaciones algebraicas de funciones... estoy intentandolo.

Ya diras.

Hasta pronto!!!!

yorfrank

Ey no tengo mucha experiencia programando y me pidieron esto en la escuela, podrías ayudarme con el código o el ejecutable? Que pida la función y de el resultado con la raíz y el numero de iteraciones que se hicieron...

Gracias