My Bisection method in c++ -
i'm study computer science in 4 degree , i'm trouble bisection method implementation in c++. error code run 1 time , end, tried changes result :( if can me, please it. saw alternative done codes, not helped me because different.
my code following:
#include <iostream> #include <math.h> using namespace std; double funcao(double x) { double resultado; resultado = x*log10(x)-1; return resultado; } double e(double xk,double xkant) { double resultado =0; resultado= fabs((xk-(xkant))/xk); cout<<"o resultado de e é: "<<resultado<<"\n\n"; return resultado; } // 1)metodo da bissecção: // este programa implementa o método da bissecção para obter raíz int main() { setlocale(lc_all,"portuguese"); double a,b,xk,xkant,erro; xkant=0; a=2.0; b=3.0; //cout<<"digite o valor(double) para o erro \n"<<"erro: "; erro=0.005; while(e(xk,xkant)>erro) { xk= (a+b)/2; if((funcao(a)*funcao(xk))<0) { b=xk; xkant=xk; cout<<"multiplicação das func. <0 b = xk \n\n"; } else { a=xk; xkant=xk; cout<<"multiplicação das func. >0 = xk \n\n"; } if(xkant==0) { cout<<"a: "<<a<<endl<<"b: "<<b<<endl<<"xk: "<<xk<<endl<<"fun(xk): "<<funcao(xk)<<endl<<"erro: *"<<endl<<endl; } else { cout<<"a: "<<a<<endl<<"b: "<<b<<endl<<"xk: "<<xk<<endl<<"fun(xk): "<<funcao(xk)<<endl<<"erro: "<<e(xk,xkant)<<endl<<endl; } } return 0; }
i've reading more , solution these consist in add int variable call k(iteration numbers) , if statement, wich ignore when k equals 0, after xkanterior=xk , program runs shine. thomas matthews me thinking.
#include <iostream> #include <math.h> using namespace std; double funcao(double x){ double resultado; resultado = x*log10(x)-1; return resultado; } double calculaerro(double xk,double xkanterior){ double resultado; resultado= fabs((xk-xkanterior)/xk); return resultado; cout<<"o resultado de e é: "<<resultado; } // 1)metodo da bissecção: // este programa implementa o método da bissecção para obter raíz int main() { setlocale(lc_all,"portuguese"); double a,b,xk,xkanterior,k=0,e; a=2.0; b=3.0; cout<<"digite o valor(double) para o erro \n"<<"e: "; cin>>e; { if(k==0) { xkanterior=1; } else { xkanterior=xk; } xk= (a+b)/2; cout<<"a: "<<a<<endl<<"b: "<<b<<endl<<"xk: "<<xk<<endl<<"fun(xk): "<<funcao(xk)<<endl<<"erro: "<<calculaerro(xk,xkanterior); cout<<endl<<"xk: "<<xk<<endl<<"xk_anterior: "<<xkanterior<<endl; if((funcao(a)*funcao(xk))<0) { b=xk; cout<<"multiplicação das func. <0 b = xk \n\n"; } else { a=xk; cout<<"multiplicação das func. >0 = xk \n\n"; } k++; }while(calculaerro(xk,xkanterior)>e); return 0; }
Comments
Post a Comment