Aufgabe 1


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


Bei 100 Durchlaeufen mit 100 Zufallszahlen ist der durchschnittliche Wert des Integrals 0.55585+/-0.02365
Bei 100 Durchlaeufen mit 1000 Zufallszahlen ist der durchschnittliche Wert des Integrals 0.56223+/-0.00799
Bei 100 Durchlaeufen mit 10000 Zufallszahlen ist der durchschnittliche Wert des Integrals 0.56187+/-0.00223

In [ ]: