#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 10 15:14:46 2024

@author: sam
"""

import numpy as np
from scipy.special import p_roots

def f(x):
    return np.cos(x)*np.exp(-2*x)

def quadz(f,a,b,tol):
    Iold = 0
    for i in range(1,100):
        x,w = p_roots(i)
        I = (b-a)/2*sum(w*f((b-a)/2*x+(a+b)/2))
        if i > 3 and abs(I - Iold) < tol:
            return I
        Iold = I
    return I

print(quadz(f,1,3,1e-6))