1. Evitar la singularitat

Definim la funció \(f\) com segueix per tal d’evitar la singularitat en el punt \(x = 1\):

\[\begin{split}f(x) = \begin{cases} 0& \text{si } x = 1,\\ \frac{e^x - x^3}{\ln x}& \text{si } x \ne 1. \end{cases}\end{split}\]

Dissenya les funcions següents i desa-les al mòdul singular (fitxer singular.py).

singular.f(x)

Retorna \(f(x)\).

Per exemple:


>>> round(f(1e-3), 5)
-0.14491
>>> round(f(0.5), 5)
-2.19827
>>> round(f(0.9), 5)
-16.42554
>>> round(f(1), 5)
0
>>> round(f(1.1), 5)
17.55496

Trobaràs més tests al fitxer test-singular-f.txt


singular.aprop(x, eps, arr)

Retorna un string amb dues línies. A la primera hi ha els nombres x - eps, x i x + eps separats per un tabulador. A la segona els valors f(x - eps), f(x) i f(x + eps) arrodonits a arr decimals i separats per un tabulador.

Recorda que el tabulador s’escriu dins d’un string com \t i el salt de línia com \n.

Per exemple:


>>> a = aprop(0.02, 1e-3, 2)
>>> a
'0.019\t0.02\t0.021\n-0.26\t-0.26\t-0.26'
>>> print(a) 
0.019	0.02	0.021
-0.26	-0.26	-0.26

>>> a = aprop(0.02, 1e-3, 5)
>>> a
'0.019\t0.02\t0.021\n-0.25715\t-0.26078\t-0.26434'
>>> print(a) 
0.019	0.02	0.021
-0.25715	-0.26078	-0.26434

>>> a = aprop(0.02, 1e-5, 5)
>>> a
'0.01999\t0.02\t0.02001\n-0.26075\t-0.26078\t-0.26082'
>>> print(a) 
0.01999	0.02	0.02001
-0.26075	-0.26078	-0.26082

>>> a = aprop(1, 1e-5, 3)
>>> a
'0.99999\t1\t1.00001\n-171827.605\t0\t171828.76'
>>> print(a) 
0.99999	1	1.00001
-171827.605	0	171828.76

>>> a = aprop(1, 1e-3, 3)
>>> a
'0.999\t1\t1.001\n-1717.702\t0\t1718.857'
>>> print(a) 
0.999	1	1.001
-1717.702	0	1718.857

Trobaràs més tests al fitxer test-singular-aprop.txt