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:
Código:
Alguna sugerencia?, gracias de antemano. #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; } //******************************************************************************