singlepost

очень нужна ваша помощь!!)С++ << На главную или назад  

вот задание ..(вычисление функции с помощью разложения в ряд)..Вычислить и вывести на экран в виде таблицы значения функции , заданной с помощью ряда Тейлора на интервале от Хнач до Хкон с шагом dx и с точностью E.КАждая строка таблицы должна содержать значение аргумента,значение функции и количество просуммированных членов ряда.
ФУНКЦИЯ: Ln(x)=(сумма по n от 0 до бесконечности)*((-1)^n*(x-1)^(n+1)/(n+1))=(x-1)-(((x-1)^2)/2)+(((x-1)^3)/3)+…. 0<x<=2

всё вроде бы работает,но какие-то проблемы с точностью вычисления..

9 ответов в теме “очень нужна ваша помощь!!)С++”

  1. 8
    Виталина Куц ответил:

    спасибо.

  2. 7
    Леонид Максимов ответил:

    это не скопление бреда. это один маленький кусочек бреда, который я вам показал. сами подумайте:

    S = 0;
    S1 = log(x);
    while (fabs(S1-S)>eps)
    {
    S1=(-x*n-x+n+1)/(n+2);
    n+=1;
    }

    ваша программа усиленно придумывает новые значения для S1, ожидая, пока S1 не станет отличаться от S (постоянно равного нулю) на непревышающую eps величину.

    да, и еще:
    (-x*n-x+n+1)/(n+2)=(-x*(n+1)+(n+1))/(n+2)=-(x-1)*(n+1)/(n+2)

    ваше реккурентное соотношение выглядит подозрительно с точки зрения накопления вычислительной ошибки (не считая того, что оно совсем не используется) и имеет неверное начальное значение, которое должно равняться нулевому члену с соответствующим знаком (т.е. просто x-1).

    далее, для следующего члена ваше соотношение должно дать -(x-1)*(x-1)/2, а дает -(x-1)*(x-1)*2/3. почему? учитывая, что отсчет n вами ведется от 1, ваше соотношение должно было бы принять вид -(x-1)*n/(n+1).

    в общем,
    S=0;
    S1=x-1;
    while(fabs(S1/2)>eps){
    S+=S1;
    S1*=-(x-1)*n/(n+1);
    n++;
    }

  3. 6
    Виталина Куц ответил:

    S1=(-x*n-x+n+1)/(n+2);–рекуррентное соотношение
    в общем эта прога-скорее скопление бреда))

  4. 5
    Леонид Максимов ответил:

    про мое сообщение о том, что с точностью в порядке – можете забыть. это не ваш случай.

  5. 4
    Леонид Максимов ответил:

    я не вижу "(сумма по n от 0 до бесконечности)*((-1)^n*(x-1)^(n+1)/(n+1))" в вашем коде.

    while (fabs(S1-S)>eps)
    {
    S1=(-x*n-x+n+1)/(n+2);
    n+=1;
    }

    что это?

  6. 3
    Виталина Куц ответил:

    ааа,я совсем))

    вот текст проги..

    #include <math.h>
    #include <iostream.h>
    void main()
    {
    double Xn, Xk, dX, eps;
    cout <<"Enter Xn" << endl;
    cin >> Xn;
    cout << "Enter Xk" << endl;
    cin >> Xk;
    cout << "Enter dX" << endl;
    cin >> dX ;
    cout << "Enter eps" << endl;
    cin >> eps ;
    cout << " __________________________________" << endl;
    cout << "| | ||" << endl;
    cout << "| X | Ln(x)|N| " << endl;
    cout << "|_________|_______________|________|" << endl;
    for (double x = Xn; x<= Xk; x += dX)
    {
    int n = 1;
    double S, S1;
    S = 0;
    S1 = log(x);
    while (fabs(S1-S)>eps)
    {
    S1=(-x*n-x+n+1)/(n+2);
    n+=1;
    }
    cout << "|" << x << "|" << S << " | " << n << "|" <<" "<<S1<< endl;
    cout << " ———————————–" << endl;
    }
    }

  7. 2
    Виталина Куц ответил:

    спасибо!))))щас посмотрю)

  8. 1
    Леонид Максимов ответил:

    все в порядке с точностью. просто логарифм в таком виде сходится очень медленно: //ru.wikipedia.org/wiki/Логарифм#.D0.9D.D0.B0.D...

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.