|
|
|
|
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)
Configuration: Windows XP Internet Explorer 8.0
Bonjour mon ami !
>> 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) où 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 iciCela 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-005La 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-010Et 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 ! Tous les animaux criaient bien haut Qu’il était le crapaud le plus beau, quand il jouait du banjo |