Metoda połowienia w C++. Wyznaczanie miejsca zerowego funkcji.
Problem:
Napisz program, który metodą połowienia wyznaczy miejsce zerowe funkcji f(x)=2x3-x-5 w przedziale <0, 100> z zadaną dokładnością E
(przykładowo E=0.000001)
Koduj sam, ale film może Ci pomóc zrozumieć ....
W poniższym filmie:
- logika metody połowienia,
- założenia dla funkcji,
- pseudokod,
- kodowanie w C++,
- przykłady obliczeń.
Do obejrzenia i przećwiczenia:
Kod w C++
#include <iostream> #include <iostream> #include <iomanip> #include <cmath> using namespace std; double f(double x) { return 2*pow(x,3)-x-5; } double miejsceZerowe(double E){ double a=0,//początek przedziału b=100,//koniec przedziału c;//środek przedziału while(fabs(b-a)>E){ c=(a+b)/2; if(f(c)>0) b=c; else a=c; } return c; } int main() { double eps, x; cout << "podaj dokladnosc obliczen: "; cin >> eps; x=miejsceZerowe(eps); cout << "miejsce zerowe: " << fixed << setprecision(10) << x << endl; cout << "f(" << x << ")=" << fixed << setprecision(10) << f(x); return 0; }
W powyższym kodzie korzystamy z tego, że f(x) jest rosnąca w otoczeniu miejsca zerowego.
Wykres funkcji f(x)=2x3-x-5 i przykładowy wynik otrzymany w programie:
Użycie kodu:
- Powyższy kod można wykorzystać w środowisku Dev C++ lub innym. Wystarczy utworzyć nowy projekt i wkleić ten kod zamiast istniejącego.
- Można też użyć kodu na jednej ze stron WWW z kompilatorami on-line, na przykład na stronie: www.cpp.sh
- UWAGA: Jeśli powyższy kompilator wyświetli ostrzeżenie: "c may be used uninitialized in this function", to wystarczy na pczątku funkcji przypisać wartość zmiennej c spoza przedziału <0, 100>, np: c=-1.