2016-09-28 4 views
1

Ich versuche ein Programm zu erstellen, um die Teilsumme der Riemann-Zeta-Funktion mit der integrierten Matlab-Funktion Zeta (s) zu vergleichen. Ich möchte, dass die Funktion die minimale Anzahl von Begriffen ausgibt, um eine Genauigkeit von 0,1 Prozent zu erreichen. Ich dachte, eine While-Schleife wäre der beste Ansatz, aber mein Programm läuft so langsam; Ich habe noch kein Ergebnis daraus.Selbstdefinierte Zeta-Funktion beendet nie

function[n] = riemannzeta(s) 
error = 1; n = 1; an = 1; S = an; 
while error >= 0.1 
    an = 1/n^s; 
    S = S + an; 
    n = n + 1; 
    z = zeta(s); 
    error = ((S - z)/z)*100; 
end 
end 

Ich nenne es mit:

riemannzeta(3) 

Antwort

1

Das Hauptproblem ist, dass Ihre Definition der Zeta-Funktion falsch ist, weil der Wert der Summe auf 1 initialisieren und fügen Sie dann 1 im ersten Schritt . Sie müssen entweder bei 0 initialisieren oder die Schleife bei 1/2^s starten. Sie müssen auch den absoluten Wert des Fehlers nehmen. Hier

ist der Start-at-Version zwei:

function n = riemannzeta(s) 
error = 1; n = 1; an = 1; S = 1; 
z = zeta(s); 
while error >= 0.001 
    n = n + 1; 
    an = 1/n^s; 
    S = S + an; 
    error = abs(S - z)/z; 
end 
end 

Wenn ich riemannzeta(3) laufen bekomme ich einen Wert von 20.

+0

Thank you! Das hat das Problem gelöst! – Olivia

Verwandte Themen