Zones d'ajust (2,5 punts) ========================= Es vol estudiar en quins punts enters una funció *f* queda prou ben ajustada al valor d'entrada. Per fer-ho, donada una funció *f* i una tolerància *tol*, definim la *puntuació* d'un punt ``x`` com: .. math:: \max\left(0,\ tol - \left|f(x)-x\right|\right) #. Donat un centre *c*, definim la *zona al voltant del centre c* com el conjunt d'enters que estan a l'interval :math:`[c-5,c+5]`. Per exemple, la zona al voltant del centre 4 estaria formada pels enters -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Dissenya la funció següent desa-la al fitxer ``zones.py``. .. function:: analitza_zona(f, c, tol) Analitza la zona al voltant del centre *c* per trobar quants valors tenen puntuació estrictament positiva i quina és la puntuació més alta. :param function f: funció que rep un enter i retorna un valor numèric :param int c: centre de la zona que es vol analitzar :param float tol: tolerància utilitzada per calcular la puntuació :rtype: tuple :return: una tupla formada per dos elements: * el nombre de punts dins la zona al voltant de *c* amb puntuació estrictament positiva i calculada amb tolerància *tol* y per la funció *f*. * la puntuació més alta entre tots els punts de la zona analitzada arrodonida a dos decimals. Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-analitza-zona.txt :language: python3 :lines: 3-9 Disposes de més tests al fitxer :download:`test-analitza-zona.txt` #. Dissenya la funció següent desa-la al fitxer ``zones.py``. .. function:: busca_zona(f, c, tol, min_accept) Busca la primera zona que tingui com a mínim *min_accept* punts amb puntuació estrictament positiva. La cerca analitza zones centrades al voltant dels centres :math:`c, c + 1, c + 2 \dots` fins que troba una amb com a mínim *min_accept* punts que compleixin la condició anterior. :param function f: funció que rep un enter i retorna un valor numèric :param int c: centre de la primera zona que es vol analitzar :param float tol: tolerància utilitzada per calcular la puntuació :param int min_accept: nombre mínim de punts amb puntuació estrictament positiva que ha de tenir la zona :rtype: tuple :return: una tupla de dos elements formada per: * el centre de la primera zona trobada amb un mínim de *min_accept* punts amb puntuació estrictament positiva * la millor puntuació entre els punts d'aquesta zona Es pot suposar que sempre existeix una zona amb almenys *min_accept* punts acceptables. Aquesta funció **ha de cridar** la funció :func:`analitza_zona`. Els següents doctests mostren exemples del que ha de fer la funció: .. literalinclude:: test-busca-zona.txt :language: python3 :lines: 3-14 Disposes de més tests al fitxer :download:`test-busca-zona.txt`. Disposes de solucions al fitxer :download:`zones.py`.