Загрузка данных


from math import *
import matplotlib.pyplot as p
T = [
(lambda x:x-1.25*log(x)-1.25,lambda x:1-1.25/x,2.2,2.4),(lambda x:x*x-5*sin(x),lambda x:2*x-5*cos(x),1.57,3.14),
(lambda x:exp(x)-10*x,lambda x:exp(x)-10,0,1),(lambda x:.1*x*x-x*log(x),lambda x:.2*x-log(x)-1,1,2),
(lambda x:.1*sin(x)+x**3-1,lambda x:.1*cos(x)+3*x*x,.8,1),(lambda x:exp(x)-x-1.25,lambda x:exp(x)-1,.618,.667),
(lambda x:x*x*cos(2*x)+1,lambda x:2*x*cos(2*x)-2*x*x*sin(2*x),0,pi/2),(lambda x:x**3+x*x+x+1,lambda x:3*x*x+2*x+1,-2,1),
(lambda x:2*x-cos(x),lambda x:2+sin(x),0,pi/2),(lambda x:tan(x)-(x+1)/2,lambda x:1/cos(x)**2-.5,0,pi/4)]
def root(f,d,a,b,newton):
    x=(a+b)/2
    for n in range(1,1001):
        y=x-f(x)/d(x) if newton else (a*f(b)-b*f(a))/(f(b)-f(a))
        if abs(y-x)<1e-6 and abs(f(y))<1e-7:return y,n
        if newton:x=y
        elif f(a)*f(y)>0:a=y
        else:b=y
        x=y
    raise ValueError('Нет сходимости')
k=int(input('Номер 1–10, 0 — все: '))
for i in (range(1,11) if k==0 else [k]):
    f,d,a,b=T[i-1];x,n=root(f,d,a,b,1);y,m=root(f,d,a,b,0)
    print(f'{i}: касательные {x:.8f} ({n}), хорды {y:.8f} ({m})')
    if k:
        t=[a+(b-a)*j/300 for j in range(301)]
        p.plot(t,[f(z) for z in t]);p.axhline(0);p.scatter([x,y],[f(x),f(y)]);p.grid();p.show()