Advertisement
jukaukor

janojenkeskipituus.jl

Aug 2nd, 2023
19
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.92 KB | None | 0 0
  1.  
  2. using Statistics, Plots
  3. function janojenkeskipituus(l,n)
  4. # arvotaan n kpl janoja, joiden pituus välillä 0 - l
  5. # lasketaan janojen keskipituus
  6. janat = l .* rand(Float64,n) # n kpl l-pituisia janoja
  7. return mean(janat)
  8. end
  9. function twopointdistance(n)
  10. # yksikköjanan kahden satunnaispisteen etäisyys
  11. return mean(abs.(rand(n)-rand(n)))
  12. end
  13.  
  14. function yksikkonelion_jana(n)
  15. # arvotaan yksikköneliön sisältä janoja
  16. # siis pistepareja (x1,y1) ja (x2,y2)
  17. # lasketaan pisteparin etäisyys, toistetaan n kertaa
  18. d = 0
  19. for i = 1 : n
  20. x1,y1 = rand(1,2)
  21. x2,y2 = rand(1,2)
  22. d += sqrt((x1-x2)^2+(y1-y2)^2)
  23. end
  24. return d/n
  25. end
  26.  
  27. function circlechord(n)
  28. # yksikköympyrän jänteen oletusarvo
  29. angle1 = 2*pi*rand(Float64,n)
  30. x1 = cos.(angle1)
  31. y1 = sin.(angle1)
  32. angle2 = 2*pi*rand(Float64,n)
  33. x2 = cos.(angle2)
  34. y2 = sin.(angle2)
  35. return mean(sqrt.((x2 .- x1).^2 .+ (y2 .- y1).^2))
  36. end
  37.  
  38.  
  39. function spheremeandistances(n)
  40. # arvotaan pallonkuorelta n kpl pistepareja
  41. # lasketaan pisteparien etäisyyksien keskiarvo
  42. # laskee oikein
  43. θ1 = 2*pi*rand(n)
  44. ϕ1 = acos.(2*rand(n) .- 1)
  45. x1 = cos.(θ1).* sin.(ϕ1)
  46. y1 = sin.(θ1).* sin.(ϕ1)
  47. z1 = cos.(ϕ1)
  48. θ2 = 2*pi*rand(n)
  49. ϕ2 = acos.(2*rand(n) .- 1)
  50. x2 = cos.(θ2).* sin.(ϕ2)
  51. y2 = sin.(θ2).* sin.(ϕ2)
  52. z2 = cos.(ϕ2)
  53. return mean(sqrt.((x2 .- x1).^2 .+ (y2 .- y1).^2 .+ (z2 .- z1).^2))
  54. end
  55.  
  56.  
  57. function disklinedistances(n)
  58. # toimii oikein
  59. θ1 = 2*pi*rand(n) #ekapiste
  60. r1 = sqrt.(rand(n)) # neliöjuurikorjaus
  61. x1 = r1 .* cos.(θ1)
  62. y1 = r1 .* sin.(θ1)
  63. θ2 = 2*pi*rand(n) #tokapiste
  64. r2 = sqrt.(rand(n)) #neliöjuurikorjaus
  65. x2 = r2 .* cos.(θ2)
  66. y2 = r2 .* sin.(θ2)
  67. return mean(sqrt.((x2 .- x1).^2 .+ (y2 .- y1).^2))
  68. end
  69.  
  70. function ballpoints(n)
  71. # tuottaa tasaisen pistejakauman
  72. # 3Dpallon sisällle r,θ,ϕ muuttujien avulla
  73. # ottamalla kuutiojuuren uniform-jakaumasta
  74. θ = 2*π*rand(n) # 0 <= θ <= 2π, uniform
  75. ϕ =π*rand(n) # 0 <= ϕ <= π, uniform
  76. R = cbrt.(rand(n)) # kuutiojuuri uniform-jakaumasta
  77. x = R .* cos.(θ) .* sin.(ϕ)
  78. y = R .* sin.(θ) .* sin.(ϕ)
  79. z = R .* cos.(ϕ)
  80. # plotataan pisteet 3D
  81. scatter(x,y,z,markersize=1,legend=false)
  82. end
  83.  
  84. function ballpoints_korjaamaton(n)
  85. # arvotaan pisteet pallon sisälle
  86. # 3Dpallon sisällle r,θ,ϕ muuttujien avulla
  87. # ei korjata jakaumaa
  88. θ = 2*π*rand(n) # 0 <= θ <= 2π, uniform
  89. ϕ =π*rand(n) # 0 <= ϕ <= π, uniform
  90. R = rand(n)
  91. x = R .* cos.(θ) .* sin.(ϕ)
  92. y = R .* sin.(θ) .* sin.(ϕ)
  93. z = R .* cos.(ϕ)
  94. # plotataan pisteet 3D
  95. scatter(x,y,z,markersize=1,legend=false)
  96. end
  97.  
  98. function ballpointsxyz(n)
  99. # tuottaa tasaisen pistejakauman
  100. # 3D-pallon yksikköpallo sisällle
  101. # ottamalla kuutiojuuren uniform-jakaumasta
  102. x = randn(n) # normaalijakautuneet välillä 0,1
  103. y = randn(n)
  104. z = randn(n)
  105. normi = sqrt.(sum(x.^2 .+ y.^2 .+ z.^2))
  106. u = rand(n) # uniform-jakauma 0,1
  107. R = cbrt.(u) # kuutiojuuri uniform-jakaumasta
  108. x = R .* x ./ normi # pistejakauma korjattu tasaiseksi
  109. y = R .* y ./ normi
  110. z = R .* z ./ normi
  111. # plotataan pisteet 3D
  112. scatter(x,y,z,markersize=1,legend=false)
  113. end
  114.  
  115. function avglines(n,m)
  116. # n arvontojen lukumäärä, m=ulotteisuus
  117. # ensin otetaan tasakauma hyperkuutiossa
  118. # sitten valitaan ne pisteet, jotka ovat hyperpallon sisällä
  119. # laskee oikein
  120. x1 = 2*rand(n,m) # hyperkuution janan alkupisteet
  121. x2 = 2*rand(n,m) # hyperkuution janan päätepisteet
  122. circle1 = sum(((x1 .- 1.0).^2),dims=2) .<= 1.0 #alkupisteet hyperpallon sisällä
  123. circle2 = sum(((x2 .- 1.0).^2),dims=2) .<= 1.0 #päätepisteet hyperpallon sisällä
  124. circle = circle1 .* circle2 # alku- ja päätepisteet hyperpallon sisällä
  125. x1circle = x1 .* circle # janan alkupisteet hyperpallon sisällä
  126. x2circle = x2 .* circle # janan päätepisteet hyperpallon sisällä
  127. d = sqrt.(sum(((x1circle - x2circle).^2),dims=2))
  128. janatlkm = sum(d.>0) # janojen lukumäärä
  129. keskipituus = sum(d)/janatlkm
  130. println("janojen keskipituus = ",keskipituus)
  131. println("janoja hyperpallon sisällä = ",janatlkm)
  132. println("arvontoja ",n, ", hyperpallon ulottuvuus ",m)
  133. end
  134.  
  135. function mDhyperballpoints(n,m)
  136. # hyperpallon sisälle mahtuvien janojen keskipituus
  137. # n = arvontojen lukumäärä
  138. # m = hyperpallon dimensio (ulottuvuus)
  139. radius = 1.0 # pallon koko, jos 1 ei tarvita kertoimissa
  140. x1 = randn(n,m)
  141. x2 = randn(n,m) # janan päätepisteitä varten
  142. norm1 = sqrt.(sum((x1 .^2),dims=2)) # vaakarivit summataan
  143. norm2 = sqrt.(sum((x2 .^2),dims=2))
  144. x1 = radius .* rand(n).^(1/m) .* x1 ./ norm1
  145. x2 = radius .* rand(n).^(1/m) .* x2 ./ norm2
  146. d = sqrt.(sum(((x2 .- x1).^2),dims=2)) # janojen pituudet
  147. keskipituus = sum(d)/n
  148. println("janojen keskipituus = ",keskipituus)
  149. println("janojen lukumäärä = ",n)
  150. println("arvontoja ",n, ", hyperpallon ulottuvuus ",m)
  151. end
  152.  
  153. function plotballpoints(n)
  154. # pallon sisälle tasajakauma päätepisteitä
  155. # plotataan 3D jakaumaa
  156. # n = arvontojen lukumäärä
  157. m = 3 # dimensio (ulottuvuus)
  158. radius = 1.0 # pallon koko, jos 1 ei tarvita kertoimissa
  159. p = randn(n,m) # pisteet (x,y,z) normaalijakaumana
  160. norm = sqrt.(sum((p .^2),dims=2)) # summaus m-suunnassa
  161. # lasketaan siis sqrt(x²+y²+z²) joka pisteelle (x,y,z)
  162. p = radius .* rand(n).^(1/m) .* p ./ norm
  163. x,y,z = p[:,1] , p[:,2] , p[:,3]
  164. # pisteet (x,y,z) tasajakaumana pallon sisälle
  165. scatter(x,y,z,markersize=1,title="tasajakauma pallon sisällä",legend=false)
  166. end
  167.  
  168. function plotcirclepoints(n)
  169. m = 2 # dimensio (ulottuvuus)
  170. radius = 1.0 # koko, jos 1 ei tarvita kertoimissa
  171. p = randn(n,m) # pisteet (x,y,z) normaalijakaumana
  172. norm = sqrt.(sum((p .^2),dims=2)) # summaus m-suunnassa
  173. # lasketaan siis sqrt(x²+y²) joka pisteelle (x,y)
  174. p = radius .* rand(n).^(1/m) .* p ./ norm
  175. x,y = p[:,1],p[:,2]
  176. # pisteet (x,y) tasajakaumana ympyrän sisälle
  177. scatter(x,y,markersize=1,title="tasajakauma ympyrässä",aspect_ratio=:equal,legend=false)
  178. end
  179.  
  180.  
  181.  
  182. function mDhyperballSphere_line_segments(n,m)
  183. # hyperpallon pinnalla jänteiden keskipituus
  184. radius = 1.0 # yksikköhyperpallo, ei tarvita kertoimissa
  185. x1 = randn(n,m) # janojen alkupisteitä varten
  186. x2 = randn(n,m) # janojen päätepisteitä varten
  187. norm1 = sqrt.(sum((x1 .^2),dims=2))
  188. norm2 = sqrt.(sum((x2 .^2),dims=2))
  189. x1 = x1 ./ norm1 # alkupisteet
  190. x2 = x2 ./ norm2 # päätepisteet
  191. d = sqrt.(sum(((x2 .- x1).^2),dims=2)) # janojen pituudet
  192. keskipituus = sum(d)/n
  193. println("pinnan janojen keskipituus = ",keskipituus)
  194. println("pinnan janojen lukumäärä = ",n)
  195. println("arvontoja ",n, ", hyperpallon ulottuvuus ",m)
  196. end
  197.  
  198.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement