我在c ++中的Bisection方法

时间:2017-08-20 12:44:53

标签: c++ methods bisection

我在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;
}

1 个答案:

答案 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;
}