Wątek przeniesiony 2018-01-15 16:52 z C/C++ przez kq.

Równanie exp w pętli while - nieskończona pętla

0

Zadanie: napisz program rozwiązujący równanie exp(x)+(x)=0 metodą podziału połówkowego.
Język: C++.
Użyte dyrektywy: iostream, stddef.h, stdio.h, cmath.

int main(){

    cout<<"Szukam rozwiązania exp(x)+x=0 w przedziale -10 i 10."<<endl;

    double exp(double x);


    cout<<"e^(10)+10 ="<<exp(10)+(10)<<endl;
    cout<<"e^(-10)+(-10)="<<exp(-10)+(-10)<<endl<<endl;

    cout<<"Wynik w przedziale -10 i 0 jest bliższy 0."<<endl;

    double x=-10, a, wynik;
    a=exp(x)+(x);


    return 0;
}

Brakuje mi kodu pod a=exp(x)+(x);. Bez pętli wygląda to tak:

    cout<<"e^(10)+10 ="<<exp(10)+10<<endl;
    cout<<"e^(-10)+(-10)="<<exp(-10)+(-10)<<endl;
    cout<<"e^(-5)+(-5)="<<exp(-5)+(-5)<<endl;
    cout<<"e^(-2,5)+(-2,5)="<<exp(-2.5)+(-2.5)<<endl;
    cout<<"e^(-1,25)+(-1,25)="<<exp(-1.25)+(-1.25)<<endl;
    cout<<"e^(-0,625)+(-0,625)="<<exp(-0.625)+(-0.625)<<endl;
    cout<<"e^(-0,3125)+(-0,3125)="<<exp(-0.3125)+(-0.3125)<<endl;
    cout<<"e^(−0,9375)+(−0,9375)="<<exp(-0.9375)+(-0.9375)<<endl;
    cout<<"e^(-0,46875)+(-0,46875)="<<exp(-0.46875)+(-0.46875)<<endl;

Pętla, która działa:

        if(wynik!=a){
        x=x/2;
        wynik=exp(x)+(x);
        cout<<wynik;
    }

Pętla if nie jest właściwa, bo musiałabym ją powtórzyć określoną ilość razy. Teoretycznie nie wiem ile, praktycznie wiem, bo policzyłam. Potrzebuję pętli while, ale ta:

 while(a<=-0.3125){
        if(wynik!=a){
            x=x/2;
            wynik=exp(x)+(x);
	    cout<<a;
        }
    }

nie działa prawidłowo. Nie wiem dlaczego. Może ktoś wskazać mi błąd i podpowiedzieć jak go poprawić?

0

To Nie jest algorytm bisekcji, Przepisz sobie z wikipedii:
https://pl.m.wikipedia.org/wiki/Metoda_równego_podziału

0

Rozumiem. Dziękuję za odpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1