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

Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.85
сержи
6 / 6 / 0
Регистрация: 03.07.2010
Сообщений: 222
31.01.2012, 12:32     Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд #1
Всем доброго вечера!!!!
Тут задачка не из простых, не как не могу понять как ее решить)Уже 2 день ее долблю))
Может вы поможете, в ее решении!!Буду благодарен за вашу помощь!!!!

Само задание: Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях:
а) для заданного n;
б) для заданной точности е (е=0.0001).
Для сравнения найти точное значение функции.

Результаты расчетов отпечатать с следующем виде:

Вычисление функции
X=...... SN=...... SE=..... Y=......
X=...... SN=...... SE=..... Y=......
..........
X=...... SN=...... SE=..... Y=......
Здесь X- значение параметра; SN- значение суммы для заданного n; SE- значе-ние суммы для заданной точности; Y-точное значение функции.
http://i032.***********/1201/ee/c8b3a813fd9d.jpg
1)функция
2)n=50
3)диапазон изменения аргумента: 0.1<=x<=0.8
4)сумма

Вот точно у меня получилось!
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
30
#include <iostream.h>
#include <math.h>
#include <cstdlib>
#define A 0.1
#define B 0.8
#define E 0.0001
 
int main (int argc, char*argv[])
{
        float x,k=(B-A)/10,sn=0,se=0,t,y;
        int i,j,n=50;
        for (x=A;x<=B;x+=k)
        {
                sn=x;se=x;
                for (i=1;i<=n;i++)
                {
                        sn+=pow(cos(n*x/4),2)/(n*n-1)
;
                }
                j=1;
                do
                {
                        t=cos*2*n*x/4*pow(n,2)-1;
                        j++;se+=t;
                }
                while (t>E);
                y=1/2-pi/4*abs(sin(x));
                printf ("x%.2f SN=%f SE=%f Y=%f\n",x,sn,se,y);
        }
}
 Комментарий модератора 
Перенесено из Вычисление функций с использованием их разложения в степенной ряд
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.01.2012, 12:32     Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд
Посмотрите здесь:

C++ вычислить функцию f(x), используя ее разложение в степенной ряд в двух случаях
Используя разложение e^x в ряд. Вычислить e^5 C++
C++ вычислить функцию f(x), используя ее разложение в степенной ряд
C++ Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд
Вычислить функцию с определенным шагом, используя ее разложение в степенной ряд. C++
C++ Вычислить функцию f(x), используя ее разложение в степенной ряд (дорешать)
Вычисление функции, используя ее разложение в степенной ряд C++
Для X, изменяющегося от x0 до xk с шагом h, вычислить значения бесконечной суммы C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор FAQ
31.01.2012, 13:12     Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд #2
Цитата Сообщение от сержи Посмотреть сообщение
а) для заданного n;
- сержи, это как раз мой код в данном топике
[Вычисление функций с использованием их разложения в степенной ряд]

Добавлено через 12 минут
Цитата Сообщение от сержи Посмотреть сообщение
б) для заданной точности е (е=0.0001).
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <iomanip>
#include <cmath>
using namespace std;
 
//ГЌГ*ГёГ* ГЅГІГ*ëîГ*Г*Г*Гї ГґГіГ*êöèÿ
double f(double x)
{
    double pi = 2*asin(1.0);
    double y  = -log(1 - 2*x*cos(pi/3) + pow(x,2))/2;
    return y;
}
 
double S(double x, double err) 
//err - ГІГҐГЎГіГҐГ¬Г*Гї òî÷Г*îñòü âû÷èñëåГ*ГЁГї ñóììû ðÿäГ*
{
    double pi = 2*asin(1.0);
    double ak = x*cos(pi/3);
    double sum = 0;
    long k = 0;
    while(err <= fabs(ak))
    {
        sum += ak;
        ak  *= k*x*(cos(pi*(k + 1)/3.0)/cos(pi*k/3.0))/(k + 1);
    }
    return sum;
}
 
int main()
{
    double xn, xk, dx, e, s;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<"e  = ";cin>>e;
    int i = 0;
    int n = 1 + int((xk - xn)/dx);//×èñëî Г·ГЁГ±ГҐГ« Гў Г¬Г*Г±Г±ГЁГўГ*Гµ
    //ÄèГ*Г*ìè÷åñêГ*Гї ГЇГ*ìÿòü ïîä ýëåìåГ*ГІГ» Г¬Г*ññèâîâ
    double * x = new double[n];
    double * y = new double[n];
    cout<<"|  x  |  Sum  |  f(x)  | err, % |\n";
    x[i] = xn;
    while(x[i] <= xk)
    {
        y[i] = f(x[i]);
        s = S(x[i], e);
        cout<<setw(5)<<setprecision(3)<<x[i]<<" | "
            <<setw(5)<<setprecision(3)<<s<<" | "
            <<setw(5)<<setprecision(3)<<y[i]<<" | "
            <<100.0*fabs(y[i] - s)/y[i]
            <<endl;
        i    = i + 1;//Гџ ñïåöèГ*ëüГ*Г® ïîêГ*Г§Г*Г« ГЁГ*êðåìåГ*ГІ ïîëГ*îñòüþ äëÿ ëó÷øåãî ГЇГ®Г*ГЁГ¬Г*Г*ГЁГї
        x[i] = x[i - 1] + dx;
    }
    system("pause");//Äëÿ CodeBlocks äîáГ*ГўГЁГІГј Гў ГЁГ*êëóäû <cstdlib>
    //Г—ГЁГ±ГІГЁГ¬ ГЇГ*ìÿòü
    delete [] x;
    delete [] y;
    return 0;
}
Итератор для вашего ряда посчитайте сами - нужно разделить a[n + 1]/a[n] и всё...
Yandex
Объявления
31.01.2012, 13:12     Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x), используя ее разложение в степенной ряд
Ответ Создать тему
Опции темы

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