[Matlab] Intégrale du produit de 2 fonctions

Résolu/Fermé
yacine - 17 mai 2009 à 13:23
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 - 19 mai 2009 à 13:43
Bonjour, a tous .....j suis un etudiant ing
j essai de ecrire programe pour calculé un integrale de deux fonction produites de la forme suivant (simplifier):

y=@(x) g(x)*h(x)

f(x)=quad(y,0,2)

sachant que:

g(x)=exp(2*x)

h(x)=(besselk (0,(5*x))+besselk (0,(2*x))).

mais le calcule me indique que il'ya un erreur (inegalité) de dimention de produit de deux matrice

j essai de calculé g(x) seul et h(x) seul et h(x)*exp(2) ...ca marche (matlab)

mais avec exp(2*x) ca march pas !!!

s'ilya des simplification ou notre resolution sur le l'integral de produit de deux fonction repond moi ... et merçi

(mon but est de calculé cette integral par un programme)
A voir également:

2 réponses

Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 375
17 mai 2009 à 15:37
Bonjour mon ami !

En fait, c'est très simple, mais encore faut-il le savoir :-D
C'est écrit dans l'aide (help quad ou doc quad), mais il est vrai qu'on y fait pas nécessairement attention, d'ailleurs je n'y avais pas fait attention moi-même la première fois :-(
>> help quad
[...]
Y=FUN(X) should accept a vector argument X and return a vector result
    Y, the integrand evaluated at each element of X.
[...]
Ta fonction y doit pouvoir accepter un vecteur comme argument et retourner un vecteur.
En fait c'est tout à fait logique si l'on considère la façon dont va procéder Matlab pour calculer numériquement l'intégrale d'une fonction y sur un intervalle [a,b].
Pour simplifier et pour résumer, Matlab va calculer y(x1), y(x2), ..., y(xn) pour une subdivision (xi) de [a,b] et évaluer l'intégrale par quadrature de Simpson. Et pour évaluer chaque y(xi), il le fera vectoriellement comme à son habitude : y(x)x=[x1,x2, ...,xn].

Il s'agissait de la partie explications ;-)
Pour la pratique donc, il faut calculer le produit de tes fonctions g et h pour qu'il puisse être évalué pour une variable vectorielle x, ceci se fait tout simplement en ajoutant un point pour le produit lorsque tu définis y :
g=@(x)(exp(2*x));
h=@(x)(besselk (0,5*x)+besselk (0,2*x));
y=@(x)(g(x).*h(x));
f=quad(y,0,2); % Sans le x ici
Cela dit, les fonctions de Bessel modifiées de seconde espèce ont une singularité en 0, par conséquent, il se peut que le calcul numérique de cette intégrale n'ait pas la précision qu'aurait celui qu'un intégrale régulière.
Mais avec quelques essais classiques, cela semble donner de bons résultats quand même ;-)
>> quad(@(x)(log(x)),0,1)+1

ans =

 -6.8696e-006

>> quad(@(x)(1./sqrt(x)),0,1)-2

ans =

  1.0609e-005
La précision est environ celle escomptée par la tolérance d'erreur absolue par défaut qui est de 1.0e-6. Par contre, Matlab commence a faire la tête pour la fonction y : x → 1/√x quand on demande une très grande précision.
>> quad(@(x)(log(x)),0,1,1e-12)+1

ans =

 -9.5619e-012

>> quad(@(x)(1./sqrt(x)),0,1,1e-12)-2
Warning: Minimum step size reached; singularity possible. 
> In quad at 103

ans =

 -2.0361e-010
Et la singularité des fonctions de Bessel modifiées de la seconde espèce est une singularité en 1/√x.

Je te souhaite une bien bonne journée !
1
yacine5 Messages postés 1 Date d'inscription dimanche 17 mai 2009 Statut Membre Dernière intervention 18 mai 2009
18 mai 2009 à 00:47
merçi beaucoup mon ami fee fay !! et merçi de me expliqué ...
0
Fee Fay Messages postés 635 Date d'inscription vendredi 17 octobre 2008 Statut Membre Dernière intervention 31 mai 2009 375
19 mai 2009 à 13:43
Il n'y a pas de quoi yacine5 ;-)
À la prochaine !
0