In [1]:
function mocaint(func, limits, N, args=[])
dim = size(limits)[1]
V = 1
random_numbers = rand(N, dim)
for i in 1:dim
V *= limits[i,2]-limits[i,1] # Volumen berechnen
# die Zufallszahlen muessen an das Intervall angepasst werden
random_numbers[:,i] = random_numbers[:,i]*(limits[i,2]-limits[i,1])+limits[i,1]
end
sum = 0.
for i in 1:N
sum += func(random_numbers[i,:]...,args...)
end
return V/N*sum
end
function custom_mean(array)
M = mean(array)
Delta_M = mean(abs.(array-M))
return [M Delta_M]
end
;
In [2]:
f(x,y,z) = sin(x*(y+2*z))
limits = [0 1;0 1; 0 1]
M = 100
for N in Int.([1e2 1e3 1e4])
calculations = Array{Float64}(M)
for i in 1:M
calculations[i] = mocaint(f, limits, N)
end
(MEAN, DMEAN) = custom_mean(calculations)
MEAN = round(MEAN, 5)
DMEAN = round(DMEAN, 5)
println("Bei $M Durchlaeufen mit $N Zufallszahlen ist der durchschnittliche Wert des Integrals $MEAN+/-$DMEAN")
end
In [ ]: