Advertisement
Guest User

Untitled

a guest
Dec 30th, 2018
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. program mira
  2.  
  3. real(kind=8) :: a,b,Xmax,Ymax,eps,M
  4. real(kind=8), allocatable, dimension(:) :: x,y,gridX,gridY
  5. integer :: N,KX,KY,L,i,j,k,z
  6.  
  7.  
  8. print *,'Donnez des valeurs aux coefficients a et b : '
  9. read(*,*) a
  10. read(*,*) b
  11. print *,"Saisir le nombre d'iterations"
  12. read(*,*) N
  13.  
  14. !print *,"Nombre de epsilons à considérer"
  15. !read(*,*) L
  16.  
  17.  
  18. ALLOCATE(x(N))
  19. ALLOCATE(y(N))
  20.  
  21.  
  22. print *,"Saisir les conditions initiales "
  23. print *,"X0=? "
  24. read(*,*) x(1)
  25. print *,"YO=?"
  26. read(*,*) y(1)
  27.  
  28. !print *,"Saisirilon"
  29. !print *,"Epsilon=?"
  30. !read(*,*) eps
  31.  
  32.  
  33. open (unit = 1, file = "xy.txt")
  34. write (1,*) '********************'
  35. write (1,*) 'Conditions initiales'
  36. write (1,*) 'a=',a
  37. write (1,*) 'b=',b
  38. write (1,*) 'N=',N
  39. write (1,*) 'X0=',x(1)
  40. write (1,*) 'Y0=',y(1)
  41. write (1,*) '********************'
  42. write (1,*) ' '
  43. write (1,*) 'x                              Y'
  44.  
  45. do i=1,N
  46.  
  47. x(i+1) = b*y(i)+a*x(i)+((2*x(i)*x(i)*(1-a))/(1+(x(i)*x(i))))
  48. y(i+1) = -x(i) + a*x(i+1) + ((2*x(i+1)*x(i+1)*(1-a))/(1+(x(i+1)*x(i+1))))
  49. open (unit = 1, file = "xy.txt")
  50. write (1,*) x(i),y(i)
  51. !open (unit = 2, file = "x.txt")
  52. !write (2,*) x(i)
  53. !open (unit = 3, file = "y.txt")
  54. !write (3,*) y(i)
  55. end do
  56.  
  57.  
  58.  
  59. L=10
  60. eps=0.1
  61.  
  62.  
  63. do z=1,10!L
  64. Xmax=int(2*MAXVAL(abs(x))) !max en X
  65. Ymax=int(2*MAXVAL(abs(y))) !max en Y
  66.  
  67.  
  68. KX=0
  69. KY=0
  70. eps=eps+0.01
  71.  
  72.  
  73. print *, 'Epsilon=',eps
  74.  
  75. M=0
  76.  
  77. KX=int(2*Xmax/eps) ! NB de CARRES COTE X (taille eps)
  78. KY=int(2*Ymax/eps) ! NB de CARRES COTE Y (taille eps)
  79.  
  80. ALLOCATE(gridX(KX))
  81. ALLOCATE(gridY(KX))
  82. gridX(1)=-Xmax
  83. gridY(1)=-Ymax
  84.  
  85. do i=1,KX !compute gridX
  86. gridX(i+1)=gridX(i)+eps
  87. end do
  88.  
  89. do i=1,KY !compute gridY
  90. gridY(i+1)=gridY(i)+eps
  91. end do
  92.  
  93. !do i=1,KX !print gridY.txt
  94. !open (unit = 4, file = "gridx.txt")
  95. !write (4,*) gridX(i)
  96. !end do
  97.  
  98. !do i=1,KY !print gridY.txt
  99. !open (unit = 5, file = "gridy.txt")
  100. !write (5,*) gridY(i)
  101. !end do
  102.  
  103. !à ce stade, nous avons une figure fractale décrite par N couples (x,y), ainsi qu'un cadrillage autour de la fractale.
  104. !maintenant, l'idée est de chercher à savoir combien de carrés de taille eps sont nécessaire pour recouvrir la fractale,
  105. !pour ce faire, on fait tendre eps vers 0, et on compte le nombre de carrés qui contiennent au moins un des couples (x,y).
  106. !Si aucun point ne passe dans le carré, ce dernier ne compte pas.
  107. !On va donc parcourir tous le cadrillage, carré par carré, et tester chaque couple (x,y).
  108.  
  109. do i=1,KX
  110.     do j=1,KY
  111.         do k=1,N
  112.             if (x(k)>gridX(i) .AND. x(k)<gridX(i+1) .AND. y(k)>gridY(j) .AND. y(k)<gridY(j+1)) then
  113.                 M=M+1
  114.                
  115.            
  116.             exit
  117.             end if
  118.  
  119.         end do
  120.     end do
  121. end do
  122.  
  123. print *, 'M=',M
  124.  
  125.  
  126.  
  127. DEALLOCATE(gridX)
  128. DEALLOCATE(gridY)
  129. end do
  130. DEALLOCATE(x)
  131. DEALLOCATE(y)
  132. end program mira
  133.  
  134. !///////////////////////////////////////////////////////////////////////!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement