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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
HarleyKing
0 / 0 / 0
Регистрация: 20.06.2014
Сообщений: 2
#1

Вычисление функции разложением в ряд - C++

20.06.2014, 15:33. Просмотров 233. Ответов 0
Метки нет (Все метки)

Помогите пожалуйста, не могу добиться корректной работы проги.

Задание: Для динамического одномерного массива X из N (0<N≤20) элементов составить алгоритм и программу (консольное приложение на Си) нахождения суммы ряда с заданной точностью E (0<E<0.1) для каждого из элементов X. Использовать рекуррентные соотношения при вычислении очередного члена ряда.
Вычисление суммы Sum(Xi) заканчивается, если модуль очередного слагаемого оказывается меньше заданного значения точности (E), причем для этих рядов (при fabs(x)<1) абсолютная величина суммы всех отброшенных членов ряда при этом оказывается меньше E.
Для оценки правильности результата предусмотреть вычисление по контрольной формуле F(Xi).
Слагаемое следует считать составным (a(b±c)) и выводить рекуррентные соотношения для каждой составляющей отдельно:
ai+1 = ai * Coef1(x); bi+1 = bi * Coef2(x); ci+1 = ci * Coef3(x);
Вычисление функции разложением в ряд
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
//---------------------------------------------------------------------------
#include <stdio.h>  // printf, scanf
#include <conio.h>  // getch
#include <math.h>   // fabs, pow, ceil\floor, log, log10, exp, sqrt
#include <stdlib.h>  // randomize, rand
#include <windows.h> // SetConsoleOutputCP(1251); SetConsoleCP(1251);
 
//---------------------------------------------------------------------------
const double xx[7] = {0.00001, -0.99, -1, -0.1, 0.1, 1, 0.99};
 
#pragma argsused
void main()
{
    int n,i,k,z;
    double e, m,a,b,c,sum,f, *x;
    SetConsoleOutputCP(1251);
    randomize();
 
    printf("Enter e=? "); // приглашение – шрифт Lucida Console нужен
    scanf("%lf", &e);  // ввод десятичного(%d) n
    if (e<1e-13 || e>0.11)
    {
        printf("Invalid e (0..0.1] \nPress any key");
        getch(); // ожидание нажатия клавиши
        return;  // выход из функции main
    }
    fflush(stdin);
 
    printf("Enter n=? "); // приглашение
    scanf("%d", &n);  // ввод десятичного(%d) n
    if (n<1 || n>20) {
        printf("Invalid n [1..20]! \nPress any key");
        getch(); // ожидание нажатия клавиши
        return;  // выход из функции main
    }
    fflush(stdin);
 
    x = new double [n];  // выделяем память для n элементов массива
 
    printf("Enter n=%d value X from (-1,+1):\n", n); // приглашение
    for (i = 0; i < n; i++)
    {     // ввод x[0]...x[n-1]
        scanf("%lf", &x[i]);       // типа long float (%lf)
 
        if (fabs(x[i])>=1)
        {
            x[i]=xx[rand() % 7];
            if (fabs(x[i])==1)
            {
                x[i]=x[i]*(rand()%100) /100;
                if (x[i]==0) x[i]=e; // ддя некоторых вариантов x=/=0
            }
            printf("invaid value transform in %15.10lf\n", x[i]);
        }
    }
 
    z = ceil(fabs(log(e)/log(10)))+1;
 
    printf("e = %*.*lf\n", z+2, z, e); // вывод e:(z+2):z
    printf("N |        X        |      Sum(X)     | K|       F(X)      |  |Sum(X)-F(X)|\n");
    for (i=1; i < 80; i++) printf("="); printf("\n");
    for (i = 0; i < n; i++)
    {
 
    // поиск суммы ряда
        a=pow(x[i],2);
        b=1;
        c=1;
        m=a*(b+c);
        sum =m;
        k=1;
        while ((fabs(m)>=e) && (k!=100))
        {
 
        a*=a*(-pow(x[i],2));
        b*=b*1/(k+1);
        c*=c*1/(2*k*(2*k+1));
        m*=a*(b+c);
            sum+=m;
            k++;
        };
 
        f= x[i]*sin(x[i])-exp(-pow(x[i],2))+1;
 
        printf("%2d|%17.*lf|%17.*lf|%2d|%17.*lf|%17.*lf\n",
            i+1, z, x[i],  z, sum,  k,    z, f,   z+2, fabs(sum-f));
    }
 
    delete [] x;
 
    printf("Press any key");
    getch();
    return;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2014, 15:33     Вычисление функции разложением в ряд
Посмотрите здесь:

C++ Вычисление функции с разложением в ряд Тейлора
C++ Вычисление функции разложением в ряд
Вычисление функции,разложением ее в ряд C++
Вычисление функции разложением её в ряд C++
Вычисление функции разложением в ряд C++
C++ 1.5 Вычисление функции разложением её в ряд
Вычисление функции cos(x) разложением в ряд C++
Вычисление функции разложением в ряд C++
Вычисление значения функции разложением ее в ряд C++
Вычисление функции разложением в ряд Тейлора C++
C++ Вычисление функции разложением в ряд Тейлора
Вычисление функции разложением в ряд Тейлора C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru