Re[2]: Вычисление функции в Mathcad 14
От: vadimcher  
Дата: 11.04.08 20:10
Оценка: 2 (1)
Здравствуйте, vadimcher, Вы писали:

V>Здравствуйте, insanekoder, Вы писали:


I>>Имеется следующая функция:


I>>


I>>Необходимо вычислить ее значение при n = 1..500.


V>Можно, конечно, просто представить логарифмы произведений в виде суммы логарифмов, а можно пойти другой дорогой.


V>x(n+1)-x(n)

V> = [2(n+1) + ld(1)+...+ld(n+1) — (n+1)*ld(n+1)] — [2n + ld(1)+...+ld(n) — n*ld(n)]
V> = 2 — n*ld(n+1) + n*ld(n)
V> = 2 — n * ld(1 + 1/n)

V>Начинаем с x(1)=2, а далее для каждого n=1,2,... высчитываем x(n+1) = x(n) + 2 — n * ld(1 + 1/n).


V>Кстати, разница x(n+1)-x(n) очень быстро сойдется к числу < 1, а потому посчитать так можно для ОЧЕНЬ больших n.


Вот программка:
#include <iostream>
#include <math.h>
#include <fstream>

using namespace std;

void main(void) {
    double x = 2;
    int n = 1;
    ofstream ofil("abc.txt");
    while (n <= 100000) {
        ofil << "n: " << n << ", x: " << x << '\n';
        x += 2 - n * log(1 + 1 / (double)n) / log(2.);
        n++;
    }
    ofil.close();
}

Для всех n от 1 до n=100,000 просчитала где-то за секунду. При этом "n: 133, x: 78.9759" -- все правильно.

А вот зайца кому, зайца-выбегайца?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.