2016-09-28 1 views
1

Я пытаюсь создать программу для сравнения частичной суммы функции дзета Римана со встроенной функцией MatlaB (zeta). Я хочу, чтобы функция выводила минимальное количество терминов для достижения точности 0,1 процента. Я думал, что цикл while будет лучшим подходом, но моя программа работает так медленно; Мне еще предстоит получить от него результат.Самоопределяемая дзета-функция никогда не заканчивается

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 

Я называю это с:

riemannzeta(3) 

ответ

1

Основная проблема заключается в том, что ваше определение дзета-функции является неправильным, потому что вы инициализировать значение суммы в 1, а затем добавить 1 на первом этапе , Вам необходимо либо инициализировать значение 0 или запустить цикл 1/2^s. Вам также необходимо принять абсолютное значение ошибки.

Вот запуск на двойки версии:

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 

Если я бегу riemannzeta(3) я получаю значение 20.

+0

Спасибо! Это решило проблему! – Olivia

Смежные вопросы