# -*- coding: utf-8 -*- ####ID 30-root #### Άσκηση: #### Σε αυτή την άσκηση θα πρέπει να γράψετε μια συνάρτηση root(f, a, b, eps) η οποία θα βρίσκει τη ρίζα της #### συνάρτησης f στο διάστημα [a,b] με ακρίβεια το πολύ eps. #### #### Η συνάρτηση f υποθέτουμε ότι είναι μια γνησίως αύξουσα και συνεχής συνάρτηση στο διάστημα [a,b] με αρνητική τιμή στο a #### και θετική τιμή στο b, άρα έχει ακριβώς μια ρίζα, έστω r, στο διάστημα αυτό. Η συνάρτησή σας θα πρέπει να επιστρέφει #### ένα αριθμό στο [a,b] του οποίου η απόσταση από τη ρίζα r να είναι το πολύ eps (ένας μικρός θετικός αριθμός). #### #### Το πρόγραμμά σας θα πρέπει να δουλεύει για κάθε συνάρτηση f που ικανοποιεί τις παραπάνω προϋποθέσεις. #### #### Θα πρέπει επίσης να μην υπολογίζει τη συνάρτηση f περισσότερες φορές απ' όσο χρειάζεται. Γι' αυτό η συνάρτηση f #### είναι γραμμένη με τέτοιο τρόπο ώστε αν την καλέσετε περισσότερες φορές απ' ό,τι έχετε δικαίωμα τότε να σταματάει #### να δουλεύει (επιστρέφει πάντα 0 από τότε και πέρα). #### #### Αν L=b-a είναι το μήκος του διαστήματος τότε έχετε δικαίωμα να καλέσετε τη συνάρτηση f το πολύ #### #### log_2(L/eps)+2 #### #### φορές (log_2 σημαίνει λογάριθμο με βάση το 2). #### #### Γράφετε τον κώδικά σας αποκλειστικά ανάμεσα στις γραμμές START και STOP παρακάτω. #### Δεν πρέπει να πειράξετε καθόλου τις υπόλοιπες γραμμές #### #### Για να τρέξετε το πρόγραμμά σας (αποθηκευμένο στο αρχείο user.py) δίνετε την εντολή #### #### python user.py import math def fnc(x): """ Αυτή είναι η συνάρτηση της οποίας τη ρίζα ψάχνουμε """ global a, b, eps if not hasattr(fnc, "counter"): fnc.counter = 0 fnc.maxtimes = (int)(0.1+math.ceil(math.log((b-a)/eps, 2.0)+2)) if fnc.counter