0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 42
1

Значения функции, заданной рядом Тейлора

02.10.2016, 21:00. Показов 1437. Ответов 10
Метки нет (Все метки)

Помогите доработать код.
Вот задание:
Вложение 740920
Вложение 740921

Вот мой код:
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
#include <iostream> 
#include <cmath> 
#include <iomanip>
using namespace std;
 
double function1(double x, double eps, int n);
 
int main()
 
{
    setlocale(LC_ALL, "rus");
 
    int n = 0;
 
    double Xn, Xk, dX, eps;
 
    cin >> Xn >> Xk >> dX >> eps;
 
    for (double x = Xn; x < Xk + dX; x += dX)
    {
        double y = function1(x, eps, n);
        cout << setw(6) << fixed << setprecision(1) << x << setw(20) << setprecision(4) << y << setw(15) << setprecision(4) << asin(x)<< setw(14) << n + 1 << endl;
    }
    system("pause");
 
    return 0;
 
}
 
double function1(double x, double eps, int n)
{
 
    const int MaxIter = 500; // максимальное количество итераций 
    double ch = 1, y; // первый член ряда и нач. значение суммы 
    ch = x + x * x * x / 6;
    y = ch;
    for (n = 0; fabs(ch) > eps; n++)
    {
 
        ch *= (((2 * n + 1) * ((2 * n + 1)) * x * x) / ((2 * n + 2) * (2 * n + 3))); // член ряда 
        y += ch; // добавление члена ряда к сумме 
 
        if (n > MaxIter)
        {
            cout << setw(6)<< fixed << setprecision(2) << x << setw(37) << "Ряд расходится" << endl;
            return 0;
        }
 
    }
    n = n + 1;
    return y;
}
Вот что выводить должно
Пример входных данных:

0.2 0.9 0.1 0.0001

Пример выходных данных:

0.2 0.2013 3 0.2014

0.3 0.3000 2 0.3047

0.4 0.4000 2 0.4115

0.5 0.5000 2 0.5236

0.6 0.6000 2 0.6435

0.7 0.7000 2 0.7754

0.8 0.8000 2 0.9273

0.9 0.9000 2 1.1198
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.10.2016, 21:00
Ответы с готовыми решениями:

Вычисление значения функции, заданной рядом Тейлора (рекурсия)
Требуется написать 2 варианта программы, выполненные по этому заданию: Вычислить и вывести на...

Вычислить и вывести в виде таблицы значения функции, заданной рядом Тейлора
Добрый день, прошу помощи, ибо у самого курс данного языка был давно и всего не вспомню. Вычислить...

Вычислить и вывести в виде таблицы значения функции, заданной рядом Тейлора
Добрый день. Помогите решить задачу Вычислить и вывести на экран в виде таблицы значения функции,...

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

10
504 / 316 / 236
Регистрация: 18.02.2013
Сообщений: 754
02.10.2016, 22:27 2
Лучший ответ Сообщение было отмечено Дриддерс как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
double function1(double x, double eps, int n)
{
 
    const int MaxIter = 500; // максимальное количество итераций
    double ch , y; // первый член ряда и нач. значение суммы
    ch = x*x*x/6  ;
    y = x + x*x*x/6 ;
    for (n = 2; fabs(ch) > eps; n++)
    {
        ch*=(2*n-1)*x*x*(2*n-1)/(2*n*(2*n+1));
       // ch *= (((2 * n + 1) * ((2 * n + 1)) * x * x) / ((2 * n + 2) * (2 * n + 3))); // член ряда
        y += ch; // добавление члена ряда к сумме
 
        if (n > MaxIter)
        {
            cout << setw(6)<< fixed << setprecision(2) << x << setw(37) << "Ряд расходится" << endl;
            return 0;
        }
    }
    n = n + 1;//для чего?
    return y;
}
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 42
02.10.2016, 23:31  [ТС] 3
Ответ все равно не совпадает с образцом

Добавлено через 9 минут
Насчет n = n + 1;
Нужно также ведь указать количество итераций, но у меня для все значений выводит: 1. При вашем коде тоже самое
0
504 / 316 / 236
Регистрация: 18.02.2013
Сообщений: 754
03.10.2016, 07:23 4
с каким образцом?
после отработки этой функции выводится следующее
Миниатюры
Значения функции, заданной рядом Тейлора  
1
Модератор
Эксперт С++
12397 / 9978 / 6005
Регистрация: 18.12.2011
Сообщений: 26,704
03.10.2016, 07:30 5
Цитата Сообщение от Дриддерс Посмотреть сообщение
у меня для все значений выводит: 1
В функцию передаете n по ЗНАЧЕНИЮ (т.е. копию переменной).
Поэтому внутри функции меняется эта копия, а не сама n.
Передайте ее по ссылке:
double function1(double x, double eps, int& n)
1
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 42
03.10.2016, 13:38  [ТС] 6
Цитата Сообщение от olya7 Посмотреть сообщение
с каким образцом?
Который я продемонстрировал в первом сообщение, где показывается пример входных данных и выходных данных

Добавлено через 27 секунд
Цитата Сообщение от zss Посмотреть сообщение
В функцию передаете n по ЗНАЧЕНИЮ (т.е. копию переменной).
Поэтому внутри функции меняется эта копия, а не сама n.
Передайте ее по ссылке:
double function1(double x, double eps, int& n)
Да, я вчера это понял)

Добавлено через 6 минут
Так хорошо, вот немного измененный код
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
#include <iostream> 
#include <cmath> 
#include <iomanip>
using namespace std;
 
double function1(double x, double eps, int& n);
 
int main()
 
{
    setlocale(LC_ALL, "rus");
 
    int n = 0;
 
    double Xn, Xk, dX, eps;
 
    cin >> Xn >> Xk >> dX >> eps;
 
    for (double x = Xn; x < Xk; x += dX) // было x < Xk + dX и оставил просто x < Xk, т.е. теперь
// показывать будет от 0.2 до 0.9(до этого было 0.2 - 1.0)
    {
        double y = function1(x, eps, n);
        cout << setw(6) << fixed << setprecision(1) << x << setw(20) << setprecision(4) << y << setw(14) << n << setw(15) << setprecision(4) << asin(x) << endl;
    }
    system("pause");
 
    return 0;
 
}
 
double function1(double x, double eps, int& n) //добавил знак &
{
 
    const int MaxIter = 500; // максимальное количество итераций
    double ch, y; // первый член ряда и нач. значение суммы
    ch = x*x*x / 6;
    y = x + x*x*x / 6;
    for (n = 2; fabs(ch) > eps; n++)
    {
        ch *= (2 * n - 1)*x*x*(2 * n - 1) / (2 * n*(2 * n + 1));
        //ch *= (((2 * n + 1) * ((2 * n + 1)) * x * x) / ((2 * n + 2) * (2 * n + 3))); // член ряда
        y += ch; // добавление члена ряда к сумме
 
        if (n > MaxIter)
        {
            cout << setw(6) << fixed << setprecision(2) << x << setw(37) << "Ряд расходится" << endl;
            return 0;
        }
    }
    return y;
    //Здесь убрал n = n + 1
}
olya7, у меня также как у вас получается и у меня возникает ощущение, что образец неправилен...
0
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
03.10.2016, 18:43 7
Код не смотрел, но ощущение тоже возникло из за порядка цифр. Решил проверить дедовским способом при x=0.2 получаем 0.2 + pow(0.2,3)/(2*3) +3* pow(0.2,5)/(2*4*5) = 0.2 + 0.008/6 + 3*0.00032/40 = 0.2 + 0.00133 + 0.000024 = 2.001354 если ничего не напутал, то образец неправильный.
1
504 / 316 / 236
Регистрация: 18.02.2013
Сообщений: 754
03.10.2016, 19:27 8
если, всеже, опираться на математику, логично предположить, что при достаточно большом значении n, значение ряда Тейлора должно максимально приблизится к значению функции, что, собственно говоря, и происходит при правильно запрогаммированном алгоритме
1
1718 / 567 / 187
Регистрация: 12.03.2016
Сообщений: 2,169
03.10.2016, 19:59 9
Конечно же напутал, все правильно.
1
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 42
04.10.2016, 01:18  [ТС] 10
Как я понимаю, с количеством итераций они тоже муть наделали?

Добавлено через 5 минут
Просто там идет 3 2 2 2 2 2 2 2, а получается то, что скинули в #4 сообщении
0
504 / 316 / 236
Регистрация: 18.02.2013
Сообщений: 754
04.10.2016, 07:04 11
именно, так, очень странный образец Вам предложили
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.10.2016, 07:04
Помогаю со студенческими работами здесь

Вычислить и вывести на экран в виде таблицы значения функции, заданной рядом Тейлора
Дан пример: // Итерационный цикл // по схеме цикла с постусловием (цикл «ДО») #include...

Вычислить и вывести на экран в виде таблицы значения функции, заданной с рядом Тейлора
Ребят, помогите пожалуйста, мучаюсь уже более недели, не могу никак понять. Буду вам очень...

Вычислить и вывести на экран в виде таблицы значения функции, заданной рядом Тейлора
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на...

Вычислить и вывести на экран в виде таблицы значения функции, заданной рядом Тейлора
Помогите, пожалуйста, написать код программы!!! Вычислить и вывести на экран в виде таблицы...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru