Aufgabe 3

Funktion zum berechnen der Kettenbruchkoeffizienten


In [1]:
function fractionize(x, n)
    base = Float64(x)
    fracs = Array(Int, n+1)
    for i = 1:n+1
        fracs[i] = Int(round(base, RoundDown))
        if abs(base-fracs[i]) < 1e-6
            return fracs[1:i]
        end
        base = 1/(base-fracs[i])
    end
    return fracs
end


Out[1]:
fractionize (generic function with 1 method)

Funktion zum Berechnen des Kettebruchs


In [2]:
function defractionize(arr)
    if length(arr) == 1
        return arr[1]
    else
        return arr[1]+1//defractionize(arr[2:length(arr)])
    end
end


Out[2]:
defractionize (generic function with 1 method)

Funktion zum Berechnen der Folge von rationalen Zahlen


In [3]:
function rational_sequence(arr)
    output = Array(Rational, length(arr))
    for i = 1:length(arr)
        output[i] = defractionize(arr[1:i])
    end

    return output
end


Out[3]:
rational_sequence (generic function with 1 method)

Teil a


In [4]:
x = rand()*10
n = 5
a = fractionize(x, n)
println(@sprintf("Die Kettenbruchkoeffizienten von %.10f sind: ", x), a)


Die Kettenbruchkoeffizienten von 3.1408892612 sind: [3,7,10,4,2,1]

Teil b


In [12]:
x = rand()*10
n = 6
a = fractionize(x, n)
x_new = defractionize(a)
relative_error = abs(x-x_new)/x
println(@sprintf("Die Kettenbruchkoeffizienten von %.10f sind: ", x), a)
println(@sprintf("Die relative Abweichung betraegt %.10f%%", relative_error*100))


Die Kettenbruchkoeffizienten von 8.7377974081 sind: [8,1,2,1,4,2,1]
Die relative Abweichung betraegt 0.0010585056%

Teil c


In [13]:
x = pi
n = 5
a = fractionize(x, n)
sequence = rational_sequence(a)
println("Die Kettenbruchkoeffizienten von pi sind: ", a)
println(@sprintf("Die ersten %i rationalen Näherungen sind: ", n+1), sequence)


Die Kettenbruchkoeffizienten von pi sind: [3,7,15,1,292,1]
Die ersten 6 rationalen Näherungen sind: Rational[3//1,22//7,333//106,355//113,103993//33102,104348//33215]

In [ ]: