Se connecter / S'enregistrer
Votre question

Intégration de gauss

Tags :
  • Programme
  • Programmation
Dernière réponse : dans Programmation
10 Mai 2010 13:52:18

Bonjour,
je possède un algorithme qui calcule la triple intégrale à l'aide de la méthode de gauss,le programme fonctionne parfaitement, le voila:

  1. ! programme principal
  2. !-------------------------------------------------------------------
  3. !implicit none
  4. external quad3d,qtrapx,qtrapy,qtrapz,y1,y2,z1,z2,func
  5. double precision qtrapx,qtrapy,qtrapz,y1,y2,z1,z2,func
  6. !double precision x1,x2,ss,pk
  7.  
  8. x1=0.0
  9. x2=100.0
  10.  
  11. call quad3d(x1,x2,ss)
  12.  
  13. pk=ss
  14.  
  15. write(6,*)pk
  16.  
  17. end
  18.  
  19. ! subroutine qui calcul une integrale triple
  20. !-------------------------------------------------------------------
  21. subroutine quad3d(x1,x2,ss)
  22. real ss,x1,x2,h
  23. external h
  24. call qgausx(h,x1,x2,ss)
  25. return
  26. end
  27. function f(zz)
  28. real f,zz,func,x,y,z
  29. common /xyz/ x,y,z
  30. z=zz
  31. f=func(x,y,z)
  32. return
  33. end
  34.  
  35. function g(yy)
  36. real g,yy,x,y,z,f,z1,z2
  37. external f
  38. common /xyz/ x,y,z
  39. y=yy
  40. call qgausz(f,z1(x,y),z2(x,y),ss)
  41. g=ss
  42. return
  43. end
  44.  
  45. function h(xx)
  46. real h,xx,g,y1,y2,x,y,z
  47. external g
  48. common /xyz/ x,y,z
  49. real ss
  50. x=xx
  51. call qgausy(g,y1(x),y2(x),ss)
  52. h=ss
  53. return
  54. end
  55.  
  56.  
  57. ! LA fonction à integrer
  58. !---------------------------------------------------------------------
  59.  
  60. FUNCTION func(x,y,z)
  61.  
  62. !func= x*(x+3*y)
  63. func=1.0
  64.  
  65. RETURN
  66.  
  67. END
  68.  
  69. ! LA fonction z1(x)
  70. !---------------------------------------------------------------------
  71.  
  72. FUNCTION z1(x,y)
  73.  
  74. z1= 0.0
  75.  
  76. RETURN
  77.  
  78. END
  79.  
  80. ! LA fonction z2(x)
  81. !---------------------------------------------------------------------
  82.  
  83. FUNCTION z2(x,y)
  84.  
  85. z2=100.0-x-y
  86.  
  87. RETURN
  88.  
  89. END
  90.  
  91.  
  92. ! LA fonction y1(x)
  93. !---------------------------------------------------------------------
  94.  
  95. FUNCTION y1(x)
  96.  
  97. y1= 0.0
  98.  
  99. RETURN
  100.  
  101. END
  102.  
  103. ! LA fonction y2(x)
  104. !---------------------------------------------------------------------
  105.  
  106. FUNCTION y2(x)
  107.  
  108. y2= 100.0-x
  109.  
  110. RETURN
  111.  
  112. END
  113.  
  114. ! INTEGRATION PAR LA METHODE DE GAUSS
  115. !-----------------------------------------------------------------
  116. SUBROUTINE qgausx(func,a,b,ss)
  117. REAL a,b,ss,func
  118. EXTERNAL func
  119. INTEGER j
  120. REAL dx,xm,xr,w(5),x(5)
  121. SAVE W,x
  122. DATA w/.2955242247,.2692667193,.2190863625,.149451349,.0666713449/
  123. DATA x/.1488743389,.433395394,.6794095682,.8650633666,.9739065285/
  124. xm=0.5*(b+a)
  125. xr=0.5*(b-a)
  126. ss=0
  127. do 11 j=1,5
  128. dx=xr*x(j)
  129. ss=ss+w(j)*(func(xm+dx)+func(xm-dx))
  130. 11 continue
  131. ss=xr*ss
  132. return
  133. END
  134.  
  135.  
  136. ! INTEGRATION PAR LA METHODE DE GAUSS
  137.  
  138. SUBROUTINE qgausy(func,a,b,ss)
  139. REAL a,b,ss,func
  140. EXTERNAL func
  141. INTEGER j
  142. REAL dx,xm,xr,w(5),x(5)
  143. SAVE W,x
  144. DATA w/.2955242247,.2692667193,.2190863625,.149451349,.0666713449/
  145. DATA x/.1488743389,.433395394,.6794095682,.8650633666,.9739065285/
  146. xm=0.5*(b+a)
  147. xr=0.5*(b-a)
  148. ss=0
  149. do 11 j=1,5
  150. dx=xr*x(j)
  151. ss=ss+w(j)*(func(xm+dx)+func(xm-dx))
  152. 11 continue
  153. ss=xr*ss
  154. return
  155. END
  156.  
  157. ! INTEGRATION PAR LA METHODE DE GAUSS
  158.  
  159. SUBROUTINE qgausz(func,a,b,ss)
  160. REAL a,b,ss,func
  161. EXTERNAL func
  162. INTEGER j
  163. REAL dx,xm,xr,w(5),x(5)
  164. SAVE W,x
  165. DATA w/.2955242247,.2692667193,.2190863625,.149451349,.0666713449/
  166. DATA x/.1488743389,.433395394,.6794095682,.8650633666,.9739065285/
  167. xm=0.5*(b+a)
  168. xr=0.5*(b-a)
  169. ss=0
  170. do 11 j=1,5
  171. dx=xr*x(j)
  172. ss=ss+w(j)*(func(xm+dx)+func(xm-dx))
  173. 11 continue
  174. ss=xr*ss
  175. return
  176. END




j'ai voulu comprendre le mode de fonctionnement et ce que j'ai compris c'est que cette méthode s'approche à la méthode de quadrature de gauss legendre qui est applicable seulement sur un intervalle d'intégration de -1 à 1, par contre mon programme fonctionne pour des intervalles beaucoup plus grands à l'aide d'un changement de variable je suppose mais je n'ai pas compris comment cela s'est fait.
svp aidez moi à comprendre comment fonctionne cet algorithme

Autres pages sur : integration gauss

10 Mai 2010 15:36:16

Bonjour,

Beau copier/coller de code fortran, t'as trouvé ça où ?
En fait, j'ai déduis le copier/coller du fait que tu ne comprennes pas son fonctionnement... Désolé si je me trompe, mais dans ce cas, comment tu code un truc que tu comprends pas :??: 

Bon, revenons à nos moutons. Il s'agit en effet d'une généralisation [a,b] de la méthode de Gauss-Legendre, tu auras quelques informations sur Wikipedia ou autres.

Après, bien que comprenant un peu le langage Fortran, j'avoue mon incapacité à te détailler le fonctionnement de ce programme. Pourquoi ? 1, j'ai pas le temps ni l'envie de faire un reverse engineering la-dessus; 2, mes capacités en Fortran reste limité... Je le comprend dans les grandes lignes, mais ce que tu demandes c'est du minutieux.

J'espère que tu trouveras quelqu'un pour t'aider.
m
0
l
10 Mai 2010 15:47:15

ce code marche à la perfection pour plusieurs cas d'intégrale triple et ce n'est pas évident de faire un algorithme qui calcule la triple intégrale surtout que je suis novice en fortran c'est pour cela que j'ai copié collé cet algorithme et j'essaie maintenant de comprendre comment il marche
j'espère quelqu'un peut m'aider :cry: 
m
0
l
10 Mai 2010 16:10:17

Je pense qu'il n'y aura rien de mieux pour toi que d'analyser toi même le code.
Fait ça étape par étape, tu commence par le début du programme (le MAIN quoi), et ligne par ligne t'essaye de comprendre.
Lorsque tu ne comprends pas, une petite recherche sur google de la méthode/procédure en cause, exemple DATA, si tu sais pas à quoi ça sert cherche dans google "fortran DATA statement" et tu trouveras ton bonheur.
(En l'occurrence il est utilisé ici pour initialiser les tableaux 'w' et 'x' dans les différentes méthodes)

Allez, un peu de courage, ce sera très formateur !
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS