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

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

Восстановить пароль Регистрация
 
 
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 01:02     Вычисление функции разложением в ряд Тейлора #1
Помогите записать рекурсивную функцию для квадрата синуса представленого рядом Тейлора.
Задается начальное значение, конечное, шаг и точность.
Вот я пыталась сделать, но сама рекурсия, к сожелению не правильно записана (
Помогите пожалуйста.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double sin_function(double res, double x, double sum, double e, double n)
{
    double pi=3.14159265359/2;
    res=((pow(-1,n)*pow((x-pi/2),2*n))/factorial(n))*res;
    if(fabs(res)>=e)
        sum+=sin_function (res,x,res,e,n+1);
    return sum;
}
 
double factorial(int n)
{
    double rez;
    for (int i=0; i<n; i++)
        rez*=(2*i);
    return rez;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
15.05.2016, 10:53     Вычисление функции разложением в ряд Тейлора #2
См. Вычисление функций разложением в ряд Тейлора
и ссылки внизу страницы
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 11:14  [ТС]     Вычисление функции разложением в ряд Тейлора #3
Я смотрела это все, но все равно что то не так получается, мне просто помочь правильно записать рекурсивную формулу ряда Тейлора и усп.
Буду благодарна за помощь.
мановар
 Аватар для мановар
250 / 79 / 19
Регистрация: 12.03.2016
Сообщений: 301
Завершенные тесты: 1
15.05.2016, 16:51     Вычисление функции разложением в ряд Тейлора #4
Вы производите разложение в ряд Тейлора по степени? Если да, то по какой, вышлите. Напишите так же формулу по которой вычисляется ряд
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 17:15  [ТС]     Вычисление функции разложением в ряд Тейлора #5
Вот сам ряд Тейлора для http://www.cyberforum.ru/cgi-bin/latex.cgi?{sin(x)}^{2}=http://www.cyberforum.ru/cgi-bin/latex.cgi?({2}^{1}*{x}^{2})/2!-({2}^{3}*{x}^{4})/4!+({2}^{5}*{x}^{6})/6!-({2}^{7}*{x}^{8})/8!+...

И формула по которой я пыталась записать рекурсию http://www.cyberforum.ru/cgi-bin/latex.cgi?\sum {(\frac{{(-1)}^{n}*({\frac{(-pi)}{2}+n})^{2n}}{2n!}})^{2}

Добавлено через 3 минуты
Только там (-рі/2+n) все подносится к степени 2n, и вся сумма в квадрате
Не получается написать формулу нормально, простите
мановар
 Аватар для мановар
250 / 79 / 19
Регистрация: 12.03.2016
Сообщений: 301
Завершенные тесты: 1
15.05.2016, 17:34     Вычисление функции разложением в ряд Тейлора #6
Степень разложения какая x-pi/4 или x+pi/2 или другая
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 17:36  [ТС]     Вычисление функции разложением в ряд Тейлора #7
Там (х-рі/2) в степени 2n
мановар
 Аватар для мановар
250 / 79 / 19
Регистрация: 12.03.2016
Сообщений: 301
Завершенные тесты: 1
15.05.2016, 17:40     Вычисление функции разложением в ряд Тейлора #8
что же у вас все таки квадрат синуса (sin x) ^2 или синус квадрата sin (x^2)
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 17:43  [ТС]     Вычисление функции разложением в ряд Тейлора #9
Нужно разложить функцию синус квардарб с помощью вольфрама я розлажила на ряд Тейлора, точнее записала формулу н-го члена вот сылочка http://www.wolframalpha.com/input/?i...%29^2+at+x%3D0
zss
Модератор
Эксперт С++
 Аватар для zss
5942 / 5547 / 1783
Регистрация: 18.12.2011
Сообщений: 14,155
Завершенные тесты: 1
15.05.2016, 17:45     Вычисление функции разложением в ряд Тейлора #10
Вот разложение (sin(x))^2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
double mysin2(double x,double eps)
{
    double s,an;
    int n;
    n=1;
    x=x*x;
    an=x;
    s=0;
    while(fabs(an)>eps)
    {
         s+=an;
         n++;
         an*=-x*x/(2.*n-1.0)/(2.0*n-2.0); 
    }
    return s*s;
}
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 17:53  [ТС]     Вычисление функции разложением в ряд Тейлора #11
А как реализовать данный код через рекурсию?

Добавлено через 2 минуты
И взять во внимание то, что мы должны учитывать шаг с которым мы считаем синус
мановар
 Аватар для мановар
250 / 79 / 19
Регистрация: 12.03.2016
Сообщений: 301
Завершенные тесты: 1
15.05.2016, 18:16     Вычисление функции разложением в ряд Тейлора #12
Вышлите, пожалуйста, задание полностью, как оно было Вам задано
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 21:17  [ТС]     Вычисление функции разложением в ряд Тейлора #13
Вот задание, но помощь нужна только с рекурсией ряда Тейлора
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
15.05.2016, 21:22  [ТС]     Вычисление функции разложением в ряд Тейлора #14
Вот задание
Миниатюры
Вычисление функции разложением в ряд Тейлора   Вычисление функции разложением в ряд Тейлора  
мановар
 Аватар для мановар
250 / 79 / 19
Регистрация: 12.03.2016
Сообщений: 301
Завершенные тесты: 1
16.05.2016, 01:00     Вычисление функции разложением в ряд Тейлора #15
Высылаю работающюю программу под Visual Studio 2010 Professional аж с двумя рекурсиями
Формулу по которой производятся вычисления взял другую, она легко выводится из других уравнений

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
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <locale.h>
#include <Windows.h>
 
using namespace std;
float factor(float x, int n);
float fact (int i);
int main()
{
    setlocale (0,"");
    system ("color 80");
 
    float teilor,x,summ;
    int n;
    cout << "\nВведите х: ";
    cin >>x;
    cout << "\nВведите n: ";
    cin >> n;
    
    summ=factor(x,n);
    
    teilor =(1.0 - summ) / 2.0; 
    cout << "\nЗначение (sin(x))^2 при х = " << x << "  составляет" << teilor << endl;
    _getch();
    return 0;
}
 float factor(float x,int n)
 { 
     if (n>=0)
     return ( (pow(-1.0,n)* pow(2*x,2*n))/fact(2*n) + factor(x,n-1));   
 }
 
 float fact(int i)
 {
     if (i==0 || i==1)
         return 1;
    return  i*fact(i - 1);
 }
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
16.05.2016, 01:06  [ТС]     Вычисление функции разложением в ряд Тейлора #16
Спасибо большое )
Я тоже сделала, правда немного по другому, вот код, может кому то пригодиться)
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
95
96
97
98
99
100
101
102
103
104
105
#include <stdio.h>
#include <conio.h>
#include <math.h>
#include <iostream>
 
using namespace std;
void concole();
void file();
void output(double start, double end, double delta, double e);
double sin_function(double x, double e, int n);
 
void main()
{
    int a;
    do
    {
        cout<<"For using concole press 1, for using file -2 \n";
        cin>>a;
    }
    while ((a!=1) && (a!=2));
    if (a==1)
        concole();
    else
        file();
    _getch();
}
 
void concole()
{
    double start, end, delta,e;
    cout<<"x start= ";
    cin>>start;
    while ((start>0) && (start<1))
    {
        cout<<"Enter x start again, x start= ";
        cin>>start;
    }
    cout<<"x end= ";
    cin>>end;
    while ((end>0) && (end<1))
    {
        cout<<"Enter x end again, x end= ";
        cin>>end;
    }
    cout<<"x delta= ";
    cin>>delta;
    while (fabs(end-start)<=delta)
    {
        cout<<"Enter x start again, x delta= ";
        cin>>delta;
    }
    cout<<"e= ";
    cin>>e;
    while (e>=delta )
    {
        cout<<"Enter e again, e= ";
        cin>>e;
    }
    output(start,end,delta,e);
}
 
void file()
{
    double start, end, delta,e;
    FILE *f;
    fopen_s(&f, "C:\\Users\\Admin\\Desktop\\Марина\\С++\\RGR.txt","r");
    if (f!=NULL)
    {
        fscanf_s(f,"%if %if %if %if", &start, &end, &delta, &e);
        cout<<"x start= "<<start<<endl;
        cout<<"x end= "<<end<<endl;
        cout<<"x delta= "<<delta<<endl;
        cout<<"e= "<<e<<endl;
        output(start,end,delta,e);
    }
    else
    {
        cout<<"Incorrect file name, pleas enter a value with keyboard"<<endl;
        concole();
    }
    fclose(f);
}
 
void output(double start, double end, double delta, double e)
{
    double tab,sum;
    FILE *f;
    fopen_s(&f, "C:\\Users\\Admin\\Desktop\\Марина\\С++\\RGR.txt","w");
    for (double i=start; i<end; i+=delta)
    {
        tab=pow(sin(i),2);
        sum=i*i*sin_function(i,e,2);
        cout<<"Step\t"<<i<<"\t| table sin(x) \t"<<tab<<"\t| taylor sin(x) "<<sum<<endl;
        fprintf_s(f,"From counting %f; from table %f \n",sum, tab);
    }
    fclose(f);
}
double sin_function(double x, double e, int n)
{
    double rez = 1;
    double r=4*x*x/((2*n-1)*2*n);
    if(fabs(r)>=e)
        rez=1 - r*sin_function (x,e,n+1);
    return rez;
}
мановар
 Аватар для мановар
250 / 79 / 19
Регистрация: 12.03.2016
Сообщений: 301
Завершенные тесты: 1
16.05.2016, 01:28     Вычисление функции разложением в ряд Тейлора #17
Пожалуйста, а что имеется ввиду х(нач) и х(конечн), дельта. Если не сложно вышлите числа для проверки которые использовали.
У меня надо задать только значение х, в котором нужно вычислть значение, и количество итераций (шагов по формуле, чем их больше тем точнее вычисление) не понимаю смысла х(конечн)
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
16.05.2016, 01:34  [ТС]     Вычисление функции разложением в ряд Тейлора #18
Вот что у нас получиться после выполнения программы.
Мы задаем х начальное, тоесть значение с какого мы начинаем считать, х окончательное, значение при котором у нас программа завершит свое виполнение (мы еще используем х окончательное в цыклах), и х дельта, это шаг с которым мы считаем наше значение.
Миниатюры
Вычисление функции разложением в ряд Тейлора  
Torotorkina
1 / 1 / 0
Регистрация: 10.04.2016
Сообщений: 29
16.05.2016, 01:54  [ТС]     Вычисление функции разложением в ряд Тейлора #19
мановар, теперь понятно для чего нужно х конечное ?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.05.2016, 01:55     Вычисление функции разложением в ряд Тейлора
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
мановар
 Аватар для мановар
250 / 79 / 19
Регистрация: 12.03.2016
Сообщений: 301
Завершенные тесты: 1
16.05.2016, 01:55     Вычисление функции разложением в ряд Тейлора #20
Теперь все понятно. У меня программа для вычисления только одного значения, у Вас для нескольких на интервале. Но у меня она не пошла комп. ругается, а судя по Вашим значениям считает правильно
Yandex
Объявления
16.05.2016, 01:55     Вычисление функции разложением в ряд Тейлора
Ответ Создать тему

Метки
sin, рекурсия, ряд тейлора c++
Опции темы

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