Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Statistics, Plots
- function janojenkeskipituus(l,n)
- # arvotaan n kpl janoja, joiden pituus välillä 0 - l
- # lasketaan janojen keskipituus
- janat = l .* rand(Float64,n) # n kpl l-pituisia janoja
- return mean(janat)
- end
- function twopointdistance(n)
- # yksikköjanan kahden satunnaispisteen etäisyys
- return mean(abs.(rand(n)-rand(n)))
- end
- function yksikkonelion_jana(n)
- # arvotaan yksikköneliön sisältä janoja
- # siis pistepareja (x1,y1) ja (x2,y2)
- # lasketaan pisteparin etäisyys, toistetaan n kertaa
- d = 0
- for i = 1 : n
- x1,y1 = rand(1,2)
- x2,y2 = rand(1,2)
- d += sqrt((x1-x2)^2+(y1-y2)^2)
- end
- return d/n
- end
- function circlechord(n)
- # yksikköympyrän jänteen oletusarvo
- angle1 = 2*pi*rand(Float64,n)
- x1 = cos.(angle1)
- y1 = sin.(angle1)
- angle2 = 2*pi*rand(Float64,n)
- x2 = cos.(angle2)
- y2 = sin.(angle2)
- return mean(sqrt.((x2 .- x1).^2 .+ (y2 .- y1).^2))
- end
- function spheremeandistances(n)
- # arvotaan pallonkuorelta n kpl pistepareja
- # lasketaan pisteparien etäisyyksien keskiarvo
- # laskee oikein
- θ1 = 2*pi*rand(n)
- ϕ1 = acos.(2*rand(n) .- 1)
- x1 = cos.(θ1).* sin.(ϕ1)
- y1 = sin.(θ1).* sin.(ϕ1)
- z1 = cos.(ϕ1)
- θ2 = 2*pi*rand(n)
- ϕ2 = acos.(2*rand(n) .- 1)
- x2 = cos.(θ2).* sin.(ϕ2)
- y2 = sin.(θ2).* sin.(ϕ2)
- z2 = cos.(ϕ2)
- return mean(sqrt.((x2 .- x1).^2 .+ (y2 .- y1).^2 .+ (z2 .- z1).^2))
- end
- function disklinedistances(n)
- # toimii oikein
- θ1 = 2*pi*rand(n) #ekapiste
- r1 = sqrt.(rand(n)) # neliöjuurikorjaus
- x1 = r1 .* cos.(θ1)
- y1 = r1 .* sin.(θ1)
- θ2 = 2*pi*rand(n) #tokapiste
- r2 = sqrt.(rand(n)) #neliöjuurikorjaus
- x2 = r2 .* cos.(θ2)
- y2 = r2 .* sin.(θ2)
- return mean(sqrt.((x2 .- x1).^2 .+ (y2 .- y1).^2))
- end
- function ballpoints(n)
- # tuottaa tasaisen pistejakauman
- # 3Dpallon sisällle r,θ,ϕ muuttujien avulla
- # ottamalla kuutiojuuren uniform-jakaumasta
- θ = 2*π*rand(n) # 0 <= θ <= 2π, uniform
- ϕ =π*rand(n) # 0 <= ϕ <= π, uniform
- R = cbrt.(rand(n)) # kuutiojuuri uniform-jakaumasta
- x = R .* cos.(θ) .* sin.(ϕ)
- y = R .* sin.(θ) .* sin.(ϕ)
- z = R .* cos.(ϕ)
- # plotataan pisteet 3D
- scatter(x,y,z,markersize=1,legend=false)
- end
- function ballpoints_korjaamaton(n)
- # arvotaan pisteet pallon sisälle
- # 3Dpallon sisällle r,θ,ϕ muuttujien avulla
- # ei korjata jakaumaa
- θ = 2*π*rand(n) # 0 <= θ <= 2π, uniform
- ϕ =π*rand(n) # 0 <= ϕ <= π, uniform
- R = rand(n)
- x = R .* cos.(θ) .* sin.(ϕ)
- y = R .* sin.(θ) .* sin.(ϕ)
- z = R .* cos.(ϕ)
- # plotataan pisteet 3D
- scatter(x,y,z,markersize=1,legend=false)
- end
- function ballpointsxyz(n)
- # tuottaa tasaisen pistejakauman
- # 3D-pallon yksikköpallo sisällle
- # ottamalla kuutiojuuren uniform-jakaumasta
- x = randn(n) # normaalijakautuneet välillä 0,1
- y = randn(n)
- z = randn(n)
- normi = sqrt.(sum(x.^2 .+ y.^2 .+ z.^2))
- u = rand(n) # uniform-jakauma 0,1
- R = cbrt.(u) # kuutiojuuri uniform-jakaumasta
- x = R .* x ./ normi # pistejakauma korjattu tasaiseksi
- y = R .* y ./ normi
- z = R .* z ./ normi
- # plotataan pisteet 3D
- scatter(x,y,z,markersize=1,legend=false)
- end
- function avglines(n,m)
- # n arvontojen lukumäärä, m=ulotteisuus
- # ensin otetaan tasakauma hyperkuutiossa
- # sitten valitaan ne pisteet, jotka ovat hyperpallon sisällä
- # laskee oikein
- x1 = 2*rand(n,m) # hyperkuution janan alkupisteet
- x2 = 2*rand(n,m) # hyperkuution janan päätepisteet
- circle1 = sum(((x1 .- 1.0).^2),dims=2) .<= 1.0 #alkupisteet hyperpallon sisällä
- circle2 = sum(((x2 .- 1.0).^2),dims=2) .<= 1.0 #päätepisteet hyperpallon sisällä
- circle = circle1 .* circle2 # alku- ja päätepisteet hyperpallon sisällä
- x1circle = x1 .* circle # janan alkupisteet hyperpallon sisällä
- x2circle = x2 .* circle # janan päätepisteet hyperpallon sisällä
- d = sqrt.(sum(((x1circle - x2circle).^2),dims=2))
- janatlkm = sum(d.>0) # janojen lukumäärä
- keskipituus = sum(d)/janatlkm
- println("janojen keskipituus = ",keskipituus)
- println("janoja hyperpallon sisällä = ",janatlkm)
- println("arvontoja ",n, ", hyperpallon ulottuvuus ",m)
- end
- function mDhyperballpoints(n,m)
- # hyperpallon sisälle mahtuvien janojen keskipituus
- # n = arvontojen lukumäärä
- # m = hyperpallon dimensio (ulottuvuus)
- radius = 1.0 # pallon koko, jos 1 ei tarvita kertoimissa
- x1 = randn(n,m)
- x2 = randn(n,m) # janan päätepisteitä varten
- norm1 = sqrt.(sum((x1 .^2),dims=2)) # vaakarivit summataan
- norm2 = sqrt.(sum((x2 .^2),dims=2))
- x1 = radius .* rand(n).^(1/m) .* x1 ./ norm1
- x2 = radius .* rand(n).^(1/m) .* x2 ./ norm2
- d = sqrt.(sum(((x2 .- x1).^2),dims=2)) # janojen pituudet
- keskipituus = sum(d)/n
- println("janojen keskipituus = ",keskipituus)
- println("janojen lukumäärä = ",n)
- println("arvontoja ",n, ", hyperpallon ulottuvuus ",m)
- end
- function plotballpoints(n)
- # pallon sisälle tasajakauma päätepisteitä
- # plotataan 3D jakaumaa
- # n = arvontojen lukumäärä
- m = 3 # dimensio (ulottuvuus)
- radius = 1.0 # pallon koko, jos 1 ei tarvita kertoimissa
- p = randn(n,m) # pisteet (x,y,z) normaalijakaumana
- norm = sqrt.(sum((p .^2),dims=2)) # summaus m-suunnassa
- # lasketaan siis sqrt(x²+y²+z²) joka pisteelle (x,y,z)
- p = radius .* rand(n).^(1/m) .* p ./ norm
- x,y,z = p[:,1] , p[:,2] , p[:,3]
- # pisteet (x,y,z) tasajakaumana pallon sisälle
- scatter(x,y,z,markersize=1,title="tasajakauma pallon sisällä",legend=false)
- end
- function plotcirclepoints(n)
- m = 2 # dimensio (ulottuvuus)
- radius = 1.0 # koko, jos 1 ei tarvita kertoimissa
- p = randn(n,m) # pisteet (x,y,z) normaalijakaumana
- norm = sqrt.(sum((p .^2),dims=2)) # summaus m-suunnassa
- # lasketaan siis sqrt(x²+y²) joka pisteelle (x,y)
- p = radius .* rand(n).^(1/m) .* p ./ norm
- x,y = p[:,1],p[:,2]
- # pisteet (x,y) tasajakaumana ympyrän sisälle
- scatter(x,y,markersize=1,title="tasajakauma ympyrässä",aspect_ratio=:equal,legend=false)
- end
- function mDhyperballSphere_line_segments(n,m)
- # hyperpallon pinnalla jänteiden keskipituus
- radius = 1.0 # yksikköhyperpallo, ei tarvita kertoimissa
- x1 = randn(n,m) # janojen alkupisteitä varten
- x2 = randn(n,m) # janojen päätepisteitä varten
- norm1 = sqrt.(sum((x1 .^2),dims=2))
- norm2 = sqrt.(sum((x2 .^2),dims=2))
- x1 = x1 ./ norm1 # alkupisteet
- x2 = x2 ./ norm2 # päätepisteet
- d = sqrt.(sum(((x2 .- x1).^2),dims=2)) # janojen pituudet
- keskipituus = sum(d)/n
- println("pinnan janojen keskipituus = ",keskipituus)
- println("pinnan janojen lukumäärä = ",n)
- println("arvontoja ",n, ", hyperpallon ulottuvuus ",m)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement