Comment utiliser sp.integrate pour calculer une intégrale définie ?
Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Comment utiliser sp.integrate pour calculer une intégrale définie ?



  1. #1
    Bertrand Anciaux

    Comment utiliser sp.integrate pour calculer une intégrale définie ?


    ------

    Bonjour,
    J'essaie d'obtenir le coefficient u (différent pour chaque m) avec l'expression que vous pouvez voir sur la Figure 1.

    Dans un premier temps, j'ai créé mon polynôme p(q) comme vous pouvez le voir sur la Figure 2. Les coefficients sont trouvés grâce à une interpolation avec 5 points stockés dans x_table (pour les abscisses) et result (pour les ordonnées). J'ai 5 points donc j'ai obtenu un polynôme du 4ème degré.

    Pour trouver le numérateur de chaque u_m, je dois intégrer p(q)*cos(b_res[m-1]*q) de 0 à L. Où b_res est une liste de valeurs calculées auparavant et L est connu et défini.

    J'ai décidé d'utiliser la fonction Integrate de scipy comme vous pouvez le voir sur la Figure 3. Mais j'obtiens l'erreur de la Figure 4 que je ne comprends pas...

    Pouvez-vous m'aider ?

    11.jpg
    2.jpg
    3.jpg
    4.jpg

    -----

  2. #2
    gts2

    Re : Comment utiliser sp.integrate pour calculer une intégrale définie ?

    Bonjour,

    Si vous pouviez fournir le code sous forme de texte (copier-coller), cela serait quand même plus simple et lisible.

  3. #3
    pm42

    Re : Comment utiliser sp.integrate pour calculer une intégrale définie ?

    Citation Envoyé par gts2 Voir le message
    Si vous pouviez fournir le code sous forme de texte (copier-coller), cela serait quand même plus simple et lisible.
    Oui, là c'est même carrément ridicule de ne pas faire un simple copier-coller : pas moyen d'essayer de faire tourner le code, obligé d'aller d'une image à l'autre pour le voir et l'erreur et bien sur un manque d'info typique vu qu'on n'a que quelques lignes et que donc on ne sait pas comment sont définies certaines variables.
    Et bien sur on n'a pas les imports et si par exemple il y a confusion entre scipy et sympy, pas moyen de le savoir.

  4. #4
    polo974

    Re : Comment utiliser sp.integrate pour calculer une intégrale définie ?

    Et je vous parle pas du poids d'une image comparé à quelques lignes de python...

    Ecolami va faire une crise...
    Jusqu'ici tout va bien...

  5. A voir en vidéo sur Futura
  6. #5
    Bertrand Anciaux

    Re : Comment utiliser sp.integrate pour calculer une intégrale définie ?

    Bonjour, désolé pour le manque de clarté. Je vais tenter de faire mieux !
    Mon objectif est de calculer le coefficient u_m suivant (de m = 1 à 5) :



    Les valeurs de lambda sont les solutions d'une équation non triviales et stockée dans la liste b_res (lambda_1 occupe la place 0 dans la liste, lambda_2 la place 1 etc...) grâce aux lignes de code suivantes :

    Code:
       
    from sympy import symbols, Poly, interpolate
    import sympy as sp
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.optimize import root_scalar, check_grad
    from scipy.interpolate import interp1d
    from numpy.polynomial.polynomial import Polynomia
    
    #PROP MAT
    k = 6.4
    rho = 2980
    c = 980
    h = 11.64 
    L = 0.3535
    T_0 = 288.15
    T_f = (425 + 273.15) - T_0
    lenght = 5
    alpha = k/(rho*c)
    
    def fun(x: float) -> float:
            return np.tan(L * x) - (h / (k * x))
        
        epsilon = 1e-6
        b_res = []
        
        for m in range(1,z):
            borne_inferieure = (m - 0.5) * np.pi / L + epsilon
            borne_superieure = (m + 0.5) * np.pi / L - epsilon
            
    
            if fun(borne_inferieure) * fun(borne_superieure) > 0:
                continue  
            res = root_scalar(fun, bracket=(borne_inferieure, borne_superieure), method='brentq')
            if res.converged:
                lam = res.root
                y = h / (k * lam)
                err = np.tan(L * lam) - y
                if np.isclose(err, 0, rtol=0, atol=1e-6):
                    b_res.append(lam)
    Concernant le polynôme p(q), celui-ci est calculée par interpolation d'une liste d'abscisses et d'ordonnées stockées x_tale et result respectivement. Je ne vais pas vous mettre les lignes de codes qui permettent de calculer ces listes car cela deviendrait lourd. Il s'agit des coordonnées de 5 points. Par interpolation de ces 5 points j'obtiens un polynôme de degrés 4 grâce aux lignes suivantes :

    Code:
    coefs = np.polynomial.polynomial.Polynomial.fit(x_table, result, len(x_table)-1).convert().coef
    q = symbols('q')
    p = Poly(coefs,q)
    Avec les valeurs des paramètres choisies ici j'obtiens le polynôme :
    Code HTML:
    [tex]698.15 q^4 - 1642.68 q^3 - 41.03 q^2 +8293.49 q -8762.10 [\tex]
    Il ne me reste "plus qu'à" trouver u_m pour chaque valeur de m. C'est là que je rencontre un problème comme détaillé en première ligne le numérateur de u_m est égal à l'intégrale de 0 à L du polynôme p(q) multiplié par un cosinus. C'est ce que j'ai essayé de calculer dans la boucle suivante:
    Code:
        for m in range (1,5):
            p_cos = p(q)*np.cos(b_res[m-1]*q)
            integral_p_cos = sp.integrate(p_cos, (q,0,L))
            num_res = integral_p_cos
            den_res = (2*b_res[m-1]*L + np.sin(2*b_res[m-1]*L))/(4*b_res[m-1])
            u_m = num_res/den_res
    Cependant, l'erreur suivante apparait et je ne parviens pas à l'interpréter ni à la corriger...
    Code:
    CoercionFailed: expected real number, got q
    
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
    
      File "C:\Users\bertr\OneDrive - UCL\Documents\Mémoire\Heat equation\temperature_field.py", line 153, in <module>
        p_cos = p(q)*np.cos(b_res[m-1]*q)
    
      File "C:\ProgramData\Anaconda3\lib\site-packages\sympy\polys\polytools.py", line 2492, in __call__
        return f.eval(values)
    
      File "C:\ProgramData\Anaconda3\lib\site-packages\sympy\polys\polytools.py", line 2445, in eval
        f = f.eval(gen, value)
    
      File "C:\ProgramData\Anaconda3\lib\site-packages\sympy\polys\polytools.py", line 2463, in eval
        new_domain = f.get_domain().unify_with_symbols(a_domain, f.gens)
    
      File "C:\ProgramData\Anaconda3\lib\site-packages\sympy\polys\domains\domain.py", line 679, in unify_with_symbols
        raise UnificationFailed("can't unify %s with %s, given %s generators" % (K0, K1, tuple(symbols)))
    
    UnificationFailed: can't unify RR with ZZ[q], given (q,) generators
    Avez-vous une idée de comment corriger cette erreur ?

    Merci d'avance !
    Dernière modification par JPL ; 26/05/2024 à 15h23. Motif: Correction de balise

  7. #6
    Bertrand Anciaux

    Re : Comment utiliser sp.integrate pour calculer une intégrale définie ?

    En prenant le temps d'à nouveau relire une énième fois mon code, je viens de réaliser l'erreur et c'est résolu ! Merci quand même

  8. #7
    polo974

    Re : Comment utiliser sp.integrate pour calculer une intégrale définie ?

    comme ça à blanc, j'aurai dit qu'il fallait déclarer p_cos comme une fonction de q... j'ai pas essayé.

    mais Bertrand Anciaux, ça aurait été cool de dire ce qui coinçait.


    sinon, si un modérateur (esthète) voulait bien virer les balises html en trop autour des balises tex, ce serait cool...
    Jusqu'ici tout va bien...

Discussions similaires

  1. Calculer une intégrale d'une fonction définie par f(o) et f(x)
    Par invite7fa3b928 dans le forum Mathématiques du collège et du lycée
    Réponses: 3
    Dernier message: 27/02/2013, 22h39
  2. Comment calculer cette intégrale?
    Par Bartolomeo dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 07/07/2010, 19h38
  3. Comment démarrer pour calculer une intégrale exponentielle
    Par invitec336fcef dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 19/03/2009, 10h25
  4. Comment calculer cet intégrale ?
    Par herman dans le forum Mathématiques du supérieur
    Réponses: 7
    Dernier message: 18/09/2008, 15h16
  5. Logiciel pour le calcul d'une intégrale définie
    Par Seirios dans le forum Mathématiques du collège et du lycée
    Réponses: 14
    Dernier message: 19/08/2008, 10h36