我在4年级学习计算机科学,我在c ++中用二分法实现了。 错误是关于代码运行一次和结束,我尝试了一些更改,但任何好结果:( 如果你可以帮助我,请这样做。 我看到了一些替代的完成代码,但没有帮助我,因为我是如此不同。
我的代码如下:
#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 a 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 A = 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;
}
答案 0 :(得分:0)
我阅读更多,我的解决方案包括添加int变量调用k(迭代次数)和if语句,当k等于0时忽略,之后xkAnterior = xk和程序像shine一样运行。感谢Thomas Matthews帮助我思考。
#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 a 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;
do
{
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 A = xk \n\n";
}
k++;
}while(calculaErro(xk,xkAnterior)>e);
return 0;
}