Форум программистов, компьютерный форум CyberForum.ru

разложение в ряд функции - C++

Восстановить пароль Регистрация
 
Chebattler
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 9
26.10.2012, 21:04     разложение в ряд функции #1
Прошу помощи, не могу разобраться где у меня ошибка.
http://www.picshare.ru/uploads/121026/gs931LH4x8.jpg
Нужно выполнить разложение в ряд функции. и что бы значения совпадали в случае функии (справа) и разложения (слева)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
double y(double x,double eps, int &k)
{
    return log(2*cos(x/2));
 
}
 
double s(double x, double eps, int &k)
{
    double a,c,sum;
    sum=a=c=x;
    k=1;
    while (fabs(c)>eps)
    {
        c=cos(k*x)/k;
        a*=pow(-c, k-1);
        sum+=a;
        k++;
    }
    return sum;
}
у меня выводит это, и никак не одинаковы они.
http://www.picshare.ru/uploads/12102...RdPz_thumb.jpg
Заранее спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.10.2012, 21:04     разложение в ряд функции
Посмотрите здесь:

C++ Разложение функции в ряд
Вычисление arcsin разложением в ряд C++
Разложение функции в ряд Тейлора C++
C++ Разложение функции в ряд
Разложение функции в ряд и С++ код C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
John Prick
754 / 687 / 123
Регистрация: 27.07.2012
Сообщений: 1,974
Завершенные тесты: 3
26.10.2012, 21:13     разложение в ряд функции #2
Сразу куча ошибок. См.комментарии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double s(double x, double eps, int &k)
{
    double a,c,sum;
    sum=a=c=x; // инициализации не было, начальное значение sum не определено
    k=1;
    while (fabs(c)>eps) // не понятно, почему по модулю сравниваете
    {
        c=cos(k*x)/k;
        a*=pow(-c, k-1); // pow(-1, k-1) должно быть судя по формуле.
        sum+=a; // ну и тут непонятно, что суммируем.
        k++;
    }
    return sum;
}
Проще сделать так, как мне кажется:
C++
1
2
3
4
5
6
7
8
9
10
11
double s(double x, double eps, int &k)
{
    double sum = 0;
    k=1;
    while (fabs(sum)>eps)
    {
        sum += pow(-1, k - 1) * cos(k * x) / k;
        k++;
    }
    return sum;
}
Chebattler
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 9
26.10.2012, 21:19  [ТС]     разложение в ряд функции #3
Цитата Сообщение от John Prick Посмотреть сообщение
Сразу куча ошибок. См.комментарии.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double s(double x, double eps, int &k)
{
    double a,c,sum;
    sum=a=c=x; // инициализации не было, начальное значение sum не определено
    k=1;
    while (fabs(c)>eps) // не понятно, почему по модулю сравниваете
    {
        c=cos(k*x)/k;
        a*=pow(-c, k-1); // pow(-1, k-1) должно быть судя по формуле.
        sum+=a; // ну и тут непонятно, что суммируем.
        k++;
    }
    return sum;
}
Проще сделать так, как мне кажется:
C++
1
2
3
4
5
6
7
8
9
10
11
double s(double x, double eps, int &k)
{
    double sum = 0;
    k=1;
    while (fabs(sum)>eps)
    {
        sum += pow(-1, k - 1) * cos(k * x) / k;
        k++;
    }
    return sum;
}
Спасибо за замечание. Я попробовал, но , к сожалению , выводит нулевые значения s(x)
http://www.picshare.ru/uploads/12102...nE5l_thumb.jpg
doctor_lecter
 Аватар для doctor_lecter
279 / 152 / 8
Регистрация: 22.09.2012
Сообщений: 283
26.10.2012, 21:31     разложение в ряд функции #4
Цитата Сообщение от John Prick Посмотреть сообщение
инициализации не было, начальное значение sum не определено
Там была инициализация: x - параметр функции, потом sum=a=c=x
while (fabs(sum)>eps) тут у вас ошибка, сумма не должна стремиться к нулю, к нулю стремиться разность двух слагаемых ряда.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <cmath>
#include <iostream>
 
using namespace std;
 
int main() {
    double eps = 1.0e-4;
    double x;
    cout << "x = ";
    cin >> x;
    int k = 1;
    double a0, a = cos(x);
    double sum = a;
    cout << "k = " << k << " a = " << a << " sum = " << sum << endl;
    double d = 0.0;
    do {
        ++k;
        a0 = a;
        a = pow(-1.0, k-1)*cos(k*x)/k;
        d = fabs(a - a0);
        sum += a;
        cout << "k = " << k << " a = " << a << " sum = " << sum << " |a-a0| = " << d << endl;
    } while (d > eps);
    cout << endl;
    double f = log(2.0*cos(x/2.0));
    cout << "sum = " << sum << " func(" << x << ") = " << f << endl;
    cout << "|sum - f(" << x << ")| = " << abs(sum - f) << endl;
    system("pause");
}
Chebattler
0 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 9
26.10.2012, 21:42  [ТС]     разложение в ряд функции #5
doctor_lecter, большое спасибо за помощь! буду разбираться
Yandex
Объявления
26.10.2012, 21:42     разложение в ряд функции
Ответ Создать тему
Опции темы

Текущее время: 03:18. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru