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

Программно-алгоритмический реализация расписания функции в ряд Тейлора - C++

Восстановить пароль Регистрация
 
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
11.06.2013, 21:12     Программно-алгоритмический реализация расписания функции в ряд Тейлора #1
Задания расчетно-графической работы «Программно-алгоритмический реализация расписания функции в ряд Тейлора» заключается в проведении программной реализации расчета приблизительного значения функции y, разложив функцию f (x) в ряд Тейлора, при этом необходимо вывести и применить рекуррентное отношение для расчета общей части для каждого слагаемого ряда или его части.
Исходными параметрами задач является аргумент функции, изменяется в диапазоне [Xbegin, Xend] с шагом Xdelta, и точность (допустимая погрешность) расчетов е, определяющая условие завершения рекурсивного расчета.
Само условие прикреплено в вордовском документе. Спасибо за помощь.
Миниатюры
Программно-алгоритмический реализация расписания функции в ряд Тейлора  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 21:12     Программно-алгоритмический реализация расписания функции в ряд Тейлора
Посмотрите здесь:

C++ Вычисление функции через разложение в ряд (Ряд Тейлора)
C++ Программно-алгоритмический реализация расписания функции в ряд Тейлора
C++ Програмно-алгоритмическая реализация розкладу функции в ряд Тейлора
C++ Программно-алгоритмическая реализация разложения функции в ряд Тейлора
Дано разложение функции в ряд Тейлора. Вычислить для значения x и точности Eps точное значение функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Yordl
Заблокирован
13.06.2013, 18:42     Программно-алгоритмический реализация расписания функции в ряд Тейлора #2
У меня такая же программа. Тоже интересно как ее писать.
mugen0202
1 / 1 / 0
Регистрация: 03.06.2013
Сообщений: 30
13.06.2013, 22:06  [ТС]     Программно-алгоритмический реализация расписания функции в ряд Тейлора #3
ап теме
UranFlex
131 / 129 / 21
Регистрация: 25.05.2013
Сообщений: 233
15.06.2013, 02:10     Программно-алгоритмический реализация расписания функции в ряд Тейлора #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
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
//============================================================================
// Name        : taylor.cpp
// Author      : UranFlex
// Version     : 0.1 alpha
// Copyright   : GNU GPL
// Description : Задания расчетно-графической работы «Программно-алгоритмическая реализация расписания функции в ряд Тейлора»
//               заключается в проведении программной реализации расчета приблизительного значения функции y, разложив функцию f (x) в ряд Тейлора,
//               при этом необходимо вывести и применить рекуррентное отношение для расчета общей части для каждого слагаемого ряда или его части.
//               Исходными параметрами задач является аргумент функции, изменяется в диапазоне [ xBegin, xEnd ] с шагом xDelta,
//               и точность (допустимая погрешность) расчетов epsilon, определяющая условие завершения рекурсивного расчета.
//               Примечание 1 : Функция cos^2( x ) и ряд Тейлора в графическом файле.
//               Примечание 2 : Вводимые xBegin и xEnd - это значения в радианной мере.
//               Примечание 3 : cos^2( pi / 2 ) == 0 - хоть это и так, все же если попытаться выполнить следующий оператор
//                  cout << cos( M_PI_2 ) * cos( M_PI_2 ) << endl; - то в выводе мы не увидим просто 0.
//                  А увидим мы очень маленькое число и очень близкое к 0. Т.е. почти 0.
//                  Это особенность иррациональных чисел вроде числа ПИ, а также особенность представления чисел в памяти компьютера.
//                  В связи с этими особенностями и использованы манипулятор потока setprecision и флаг форматирования fixed.
//               C++, Ansi-style
//============================================================================
 
#include <iostream>
#include <cmath>
#include <iomanip>
 
using namespace std;
// функция считает факториал целого числа
long double Fact( long n );
// функция считает приближенно cos^2( x ) при помощи ряда Тейлора
// - значение x
// - точность вычислений
// - флаг, который определяет рекурсивно ли вызвана функция или впервые для данного x
long double Calc( long double x, const long double e, bool flagNew = true);
 
int main() {
 
     double xBegin, xEnd; // начальное и конечное значения x
     unsigned count; // количество вычисляемых значений на отрезке от начального до конечного значения x [ xBegin, xEnd ]
     double epsilon; // точность вычисления
 
     // запрашиваем у пользователя исходные данные
     cout << "Введите начальное и конечное значения x ( в радианах )" << endl;
     cin >> xBegin >> xEnd;
 
     cout << "Введите количество вычисляемых значений" << endl;
     cin >> count;
 
     cout << "Введите точность вычислений" << endl;
     cin >> epsilon;
 
     const double xDelta = ( xEnd - xBegin ) / ( count - 1 ); // находим шаг для вычислений
     cout << "Шаг для вычислений " << xDelta << "( радиан )" << endl;
 
     // в цикле вызываем функцию для рассчета очередного значения начиная с xBegin и заканчивая xEnd - xDelta элементом
     for ( unsigned i = 0; i < count - 1; ++i )
     cout << "X" << i + 1 << " = " << setprecision( 3 ) << Calc( xBegin + xDelta * i, epsilon ) << endl;
 
     // значение функции Calc( xEnd ) я решил вычислить отдельно, так как работаю с плавающей точкой
     // и при суммировании в цикле может быть неточность при вычислении граничного значения xEnd.
     cout << "X" << count << " = " << setprecision( 3 ) << fixed << Calc( xEnd, epsilon ) << endl;
 
 
    return 0;
}
 
long double Calc( long double x, const long double e, bool flagNew ) {
    static long double p; // степень
    static int koef; // для знака + или -
    // если функцию вызвали в первый раз - т.е. нерекурсивно
    if ( flagNew ){ // то устанавливаем начальные значения степени и коэффициента
        koef = 1;
        p = 2.0;
    }
    // для того чтобы в следующем операторе в вычислениях с правой стороны от знака "="
    // поменять знак очереднго элемент ряда на противоположенный знаку, который был в пердыдущем вычислении
    koef *= -1;
 
    // вычисляем очередной элемент ряда
    long double res = ( pow( x, p ) * pow( 2.0L, p - 1 ) / Fact( p ) ) * koef;
 
    // проверка на окончание рекурсии
    if ( fabs( res ) <= e ) // если очередной элемент ряда по модулю менее или равен epsilon
        return 1 + res; // то возвращаем значение и прерываем рекурсию
    else { // а если не
        p += 2.0; // то увеличиваем степень
        // прибавляем к очередному элементу ряда следующий элемент ряда, который будет вычислен рекурсивно
        return res + Calc( x, e, false );
    }
 
}
 
long double Fact( long n ) {
    return n > 0 ? n * Fact( n - 1 ) : 1;
}
Примеры работы программы.
1.
Кликните здесь для просмотра всего текста
Введите начальное и конечное значения x ( в радианах )
0
1.57079632679
Введите количество вычисляемых значений
2
Введите точность вычислений
0.01
Шаг для вычислений 1.5708( радиан )
X1 = 1
X2 = 0.000


2.
Кликните здесь для просмотра всего текста
Введите начальное и конечное значения x ( в радианах )
0
6.28318530718
Введите количество вычисляемых значений
10
Введите точность вычислений
0.0001
Шаг для вычислений 0.698132( радиан )
X1 = 1
X2 = 0.587
X3 = 0.0302
X4 = 0.25
X5 = 0.883
X6 = 0.883
X7 = 0.25
X8 = 0.0302
X9 = 0.587
X10 = 1.000


3. ( с низкой точностью )
Кликните здесь для просмотра всего текста
Введите начальное и конечное значения x ( в радианах )
-3.14159265359
0
Введите количество вычисляемых значений
13
Введите точность вычислений
0.1
Шаг для вычислений 0.261799( радиан )
X1 = 0.998
X2 = 0.937
X3 = 0.743
X4 = 0.499
X5 = 0.253
X6 = 0.0613
X7 = -0.000915
X8 = 0.069
X9 = 0.246
X10 = 0.5
X11 = 0.751
X12 = 0.931
X13 = 1.000


Пояснение к примерам
Кликните здесь для просмотра всего текста
1.57079632679 = π / 2
6.28318530718 = 2 * π
3.14159265359 = π
Yandex
Объявления
15.06.2013, 02:10     Программно-алгоритмический реализация расписания функции в ряд Тейлора
Ответ Создать тему
Опции темы

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