Advertisement
jukaukor

Tetrahedrons_in_unitball.jl

Jan 22nd, 2023
22
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.15 KB | None | 0 0
  1. # tetrahedrons in dim-dimensional unitball
  2. # Juhani Kaukoranta 21.1.2023
  3. using LinearAlgebra,Random,Distributions
  4. function mDballtetrahedrons(dim,n)
  5. # dim = ulottuvuus, n = tetraedrien lukumäärä
  6. # lasketaan yksikköpallon tetraedrien keskitilavuus ja keskiala
  7.  
  8. Volume = 0 # kerää tetrahedrien tilavuuksien summaa
  9. kokonaisala = 0 # kerää kokonaispinta-alan summaa
  10. function tahko(a,b,c)
  11. # laskee tahkon pinta-alan
  12. p = (a+b+c)/2 # tahkon sivut
  13. return sqrt(p*(p-a)*(p-b)*(p-c))
  14. end
  15. function TetrahedronVolume(d12,d13,d14,d23,d24,d34)
  16. m = [0 1 1 1 1;
  17. 1 0 d12^2 d13^2 d14^2;
  18. 1 d12^2 0 d23^2 d24^2;
  19. 1 d13^2 d23^2 0 d34^2;
  20. 1 d14^2 d24^2 d34^2 0]
  21. return sqrt(1/288*det(m))
  22. end
  23.  
  24. for i = 1 : n
  25. d = Normal(0,1)
  26. r = rand(4) .^(1/dim) # uniformjakauman m-juuresta säteet
  27. u = rand(d,4,dim) # dim kpl muuttujia, kaikilla 4 arvoa
  28. norm1 = norm(u[1,:]) # kärki P1 normi
  29. norm2 = norm(u[2,:]) # kärki P2 normi
  30. norm3 = norm(u[3,:]) # kärki P3 normi
  31. norm4 = norm(u[4,:]) # kärki P4 normi
  32. normi = [norm1;norm2;norm3;norm4]
  33. x = @. r * u / normi # 4 normitettua m-ulotteista muuttujaa
  34. P1 = x[1,:] # tetraedrin kärkipiste (m kpl koordinaatteja)
  35. P2 = x[2,:] # tetraedrin kärkipiste
  36. P3 = x[3,:] # tetraedrin kärkipiste
  37. P4 = x[4,:] # teraedrin kärkipiste
  38. d12 = norm(P1-P2) # tetraedrit sivujen pituudet
  39. d13 = norm(P1-P3)
  40. d14 = norm(P1-P4)
  41. d23 = norm(P2-P3)
  42. d24 = norm(P2-P4)
  43. d34 = norm(P3-P4)
  44.  
  45.  
  46. Volume += TetrahedronVolume(d12,d13,d14,d23,d24,d34)
  47. tahkot = [tahko(d12,d13,d23) tahko(d12,d14,d24) tahko(d23,d24,d34) tahko(d13,d14,d34)]
  48. kokonaisala += sum(tahkot)
  49. #korkeudet = 3*Volume/tahkot
  50.  
  51.  
  52. end
  53.  
  54. println(n," tetraedria satunnaisesti arvottuna ",dim,"-ulotteisen yksikköpallon sisälle")
  55. println("Tedraedrien tilavuuksien keskiarvo = ", Volume/n)
  56. println("tetraedrien kokonaispinta-alan keskiarvo =",kokonaisala/n)
  57.  
  58. end
  59.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement