Título: Cómo hago que el usuario elija el tipo de función?
Publicado por: Antoniio en 17 Febrero 2016, 07:45 am
Hola, buenas. Tengo un código que se basa en el algoritmo de bisección el cual encuentra una raíz de una función dada, en mi caso usé "x^3 + 2x^2 + x - 2" pero quisiera saber cómo puedo hacer que el usuario elija qué tipo de función usar para la aproximación?, osea, que sean 4 las opciones: Polinomial: f(x) = a0 + a1 x + a2 x2 + ... + an xn Exponencial: f(x) = a e (k x + c) + b Logaritmica: f(x) = a Ω(k x + c) + b Ω = log, ln Trigonométrica: f(x) = a Ω(k x + c) + b Ω = sen, cos, etc mi código es el siguiente, sencillo pero útil: #include <iostream> #include <cstdlib> #include <cmath> #include <iomanip> //****************************************************************************** using namespace std; void bisetzion(long double,long double,int); long double f(long double); void impresion(long double,long double,long double,long double,int); long double Abs(long double); //****************************************************************************** int main(){ long double an,bn,pn,tol; int n; char resp; do{ system("cls"); cout<<"Programa que utiliza el proceso de bisecci\xA2n para aproximar la funci\xA2n \nx^3 + 2x^2 + x - 2\n\n"; do{ cout<<"introduzca la an: "; cin>>an; cout<<"introduzca la bn: "; cin>>bn; }while(f(an)*f(bn)>0); if(f(an) != 0 && f(bn) != 0){ do{ cout<<"Tolerancia(10^-n) n: "; cin>>n; }while(n<=0); bisetzion(an,bn,n); }else cout<<"La ra\xA1z es uno de los extremos"<<endl; cout<<"\xA8 \bDesea calcular de nuevo(s/n)\x3F"; cin>>resp; }while(resp == 's' || resp == 'S'); system("pause"); return 0; } //****************************************************************************** void bisetzion(long double an,long double bn,int n){//función que realiza la bisección long double pn=0,anterior,error=1000; cout<<"n"<<" "<<"an"<<" "<<"bn"<<" "<<"pn"<<" "<<"f(an)"<<" "<<"f(pn)"<<" "<<"error"<<endl; for(int i=0;error>pow(10.0,-n);++i){ anterior = pn; pn = (an+bn)/2; error = Abs((pn - anterior)/pn); impresion(an,bn,pn,anterior,i); f(an)*f(pn)<0 ? : an = pn; f(bn)*f(pn)<0 ? : bn = pn; } } //****************************************************************************** long double f(long double x){//función a aproximar long double Fx; Fx = pow(x,3) + 2*pow(x,2) + x -2; return Fx; } //****************************************************************************** void impresion(long double an,long double bn,long double pn,long double anterior,int i){//función para imprimir los valores long double error = Abs((pn - anterior)/pn); cout<<setiosflags(ios::left)<<setw(3)<<i+1<<setprecision(7)<<setw(12)<<an<<setw(12)<<bn<<setw(12)<<pn<<setprecision(6)<<setw(14)<<f(an)<<setw(14)<<f(pn); i == 0 ? cout<<" -"<<endl : cout<<error<<endl; } //****************************************************************************** long double Abs(long double numero){//función para valor absoluto if(numero < 0) return -numero; else return numero; } //****************************************************************************** Alguna sugerencia?, gracias de antemano.
Título: Re: Cómo hago que el usuario elija el tipo de función?
Publicado por: engel lex en 17 Febrero 2016, 15:10 pm
usa switch o if y coloca cada formula en una función diferente, según la opción que escoja, se llama a la respectiva función
Título: Re: Cómo hago que el usuario elija el tipo de función?
Publicado por: Antoniio en 17 Febrero 2016, 18:28 pm
Usaré case, pero no puedo definir las funciones en código :-\
Título: Re: Cómo hago que el usuario elija el tipo de función?
Publicado por: engel lex en 17 Febrero 2016, 18:36 pm
entonces coloca simplemente la operación dento del case y listo
Título: Re: Cómo hago que el usuario elija el tipo de función?
Publicado por: Antoniio en 17 Febrero 2016, 19:04 pm
Si, comprendo, una última cosa, que desde el principio no entendí, cómo declaro los símbolos?, por ejemplo: a Ω(k x + c) + b Ω = log, ln Realmente ese era mi problema desde un principio pero planteé mal la pregunta..
Título: Re: Cómo hago que el usuario elija el tipo de función?
Publicado por: engel lex en 17 Febrero 2016, 19:19 pm
a nivel de código, no importan los simbolos, normalmente si son constantes, se hace un define con el nombre en mayúsculas y el valor... ejemplo
Título: Re: Cómo hago que el usuario elija el tipo de función?
Publicado por: Antoniio en 21 Febrero 2016, 04:54 am
Perfecto, ya está :3 gracias ;D
|