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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.77
MikeEl
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 52
#1

Переделать код в рядах Тейлора - C++

11.06.2013, 22:39. Просмотров 1656. Ответов 56
Метки нет (Все метки)

есть код для этого задания:
Провести программную реализацию расчета приблизительного значения функции y, разложив функцию f (x) в ряд Тейлора, при этом необходимо вывести и применить рекуррентное отношение для расчета общей части для каждого слагаемого ряда или его части. Аргумент функции должен изменяться в диапазоне [Xbegin, Xend] с шагом Xdelta. Параметры Xbegin, Xend, Xdelta и точность (допустимая погрешность) расчетов е, определяющая условие завершения рекурсивного расчета задаются пользователем с клавиатуры. Предусмотреть ситуации, когда значение функции могу быть не определено для заданных аргументов.
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
#include <iostream>  
#include <conio.h> 
#include <math.h>
 
using namespace std;
 
double factorial (double p)
{
int n=1;
p=2*n+1;
if (p == 0) 
return 1; 
else 
return p*factorial(p - 1);
}
long double sin_kub(double p, double x, double e, long double y)
{
double fact=factorial(p);
y=((pow(3, p)-3)*pow(x, p)*pow(-1, p-1)/fact);
if (y>e)
return y=(y+sin_kub(p+1, x, e, y))*0.25;
else return y*0.25;
}
void main()
{
setlocale (0,"Russian");
double xbegin, xdelta, xend, e, x;
cout<<"Введите xbegin (начальное значение): ";
cin>>xbegin;
cout<<"Введите xend(конечное значение х): ";
cin>>xend;
while (xend<xbegin)
{
cout<<"Не корректно задано."<<endl;
cout<<"Введите xbegin (начальное значение): ";
cin>>xbegin;
cout<<"Введите xend(конечное значение х): ";
cin>>xend;
}
cout<<"Введите xdelta(шаг): ";
cin>>xdelta;
cout<<"Введите e(точность): ";
cin>>e;
while (e<0.01)
{
cout<<"Ваше \"е\" слишком маленькое. Введите другое: ";
cin>>e;
}
for (double x=xbegin; x<=xend; x+=xdelta)
{
long double f=sin_kub(3, x, e,0);
cout<<"x="<<x<<"      "<<"f(x)="<<f<<endl;
}
 
getch ();
}
но мне оченьочень нужно , чтобы считало эту формулу(второй снимок).
на днях сдавать, а сделать еще кучу работы нужно, помогите, пожалуйста.
0
Миниатюры
Переделать код в рядах Тейлора   Переделать код в рядах Тейлора  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.06.2013, 22:39
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Переделать код в рядах Тейлора (C++):

Ошибка в рядах Тейлора - C++
Помогите найти ошибку в этом задании: адача состоит в проведении программной реализации расчета приблизительного значения функции y,...

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

Код написан в Dev C. Не работает в Visual. Как нужно переделать код? - C++
Здравствуйте. Столкнулась с такой проблемой: код был написан в Dev C, но в Visual он выдаёт ошибку. ...

Ряд Тейлора - исправить код - C++
Я написал программу, а она вроде дает результат но не правильный. Программа высчитывает значение синуса по Ряду Тейлора. синус 1 ~...

Разложение ряд в ряд Тейлора.Переделать программу - C++
Написать программу вычисления и вывода на экран в виде таблицы значений функции, заданной с помощью ряда Тейлора, на интервале от Хзнач до...

Разложение в ряд Тейлора(код есть, но ошибочный) - C++
Передо мной стоит такая задача: http://imagepost.ru/?v=238/uBbB7Cp.png Я написала программу. Ввожу значения переменных, после чего...

56
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.06.2013, 17:03 #31
Знаю, там где синус кубический вычисляется я даже так и написал, что сначала сделал через рекуррентное соотношение, а потом потер. С логарифмом я лишь упростил задачу, фактически там используется лишь числитель прошлого элемента последовательности. Ну слава Богу, сейчас пришел Юра и всех спас.

Пролей свет на нас, невежд)
0
-=ЮрА=-
Заблокирован
Автор FAQ
12.06.2013, 17:06 #32
MikeEl, вот как это делается
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 <math.h>
#include <stdio.h>
 
double S(double x, double e)
{
    double   k = 1;
    double sum = 0;
    double ak  = x - 1;//Г°Г*ññ÷èòûâГ*ГҐГ¬ ëèøü Г±Г*ìûé ïåðâûé ñëåГ* Г°Г*çëîæåГ*ГЁГї
    while(e < fabs(ak))//Âîò Г®Г*Г® óñëîâèå îêîГ*Г·Г*Г*ГЁГї ГЁГІГҐГ°Г*öèîГ*Г*îãî ïðîöåññГ*
    {
        sum += ak;
        //âîò ðåêóððåГ*ГІГ*Г*Гї ôîðìóëГ* äëÿ ln
        ak  *=((-1)*(x - 1)*k/(k + 1));
        k   =  k + 1;
    }
    return sum;
}
 
int main()
{
    double e = 0, x = 0;
    while( 1 )//ÄåëГ*Гѕ ГЎГҐГ±ГЄГ®Г*ГҐГ·Г*ûé ââîä
        //äëÿ Г§Г*âåðøåГ*ГЁГї Г°Г*áîòû ïðîñòî Г§Г*êðûâГ*ГҐГ¬ îêГ*Г® ГЄГ®Г*ñîëè
    {
        printf("Enter x : ");scanf("%lf",&x);
        printf("Enter e : ");scanf("%lf",&e);
        printf("S(x) = %lf\n",S(x,e));
    }
    return 0;
}
2
Миниатюры
Переделать код в рядах Тейлора  
-=ЮрА=-
12.06.2013, 17:08
  #33

Не по теме:

MikeEl, чтобы в дальнейшем не было проблем с рядами прошу сюда
http://www.cyberforum.ru/faq/thread436065.html#post2449607
кроме рядов там расписывал ещё много очень нужного для математических апликаций на С/С++
На твой вопрос что не правильно отвечу -сама логика кодов построена не на рекуррентных выражениях.

1
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.06.2013, 17:09 #34
-=ЮрА=-,
Цитата Сообщение от MikeEl Посмотреть сообщение
определяющая условие завершения рекурсивного расчета
ты присаживайся к нам, неведующим и невнимательным
0
-=ЮрА=-
Заблокирован
Автор FAQ
12.06.2013, 17:11 #35
Итератор (рекуррентное соотношение) для логорифма натурального
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = {(-1)}^{n - 1}*\frac{{(x - 1)}^{n}}{n}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = {(-1)}^{n}*\frac{{(x - 1)}^{n + 1}}{n + 1}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{{(-1)}^{n}*\frac{{(x - 1)}^{n + 1}}{n + 1}}{{(-1)}^{n - 1}*\frac{{(x - 1)}^{n}}{n}} = (-1)*(x - 1)*\frac{n}{n + 1}
Последнее выражение и использовано
0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.06.2013, 17:15 #36
-=ЮрА=-, я не про то, я про
Цитата Сообщение от MrGluck Посмотреть сообщение
рекурсивного расчета
0
-=ЮрА=-
Заблокирован
Автор FAQ
12.06.2013, 17:20 #37
Добавлено через 4 минуты
Цитата Сообщение от MikeEl Посмотреть сообщение
- потому что во всех кодах кроме поста 2 величайшая глупость потому и другая...
а что там не так?
- цитирую тебе же тебя, верней твоё задание

Цитата Сообщение от MikeEl Посмотреть сообщение
вывести и применить рекуррентное отношение для расчета общей части для каждого слагаемого ряда или его части.
- рекурсией тут и не пахнет абсолютно.

Цитата Сообщение от MikeEl Посмотреть сообщение
double f (double x, double n)
{
return ((pow(-1.0,n++)*pow ((x-1.0), n) /n);
}
double fun (double e, double x, double n)
{
if (fabs((f(x,n)) - (f(x,n+1))) < e)
return 0;
else
return f(x,n) + fun (e, x, n+1);
}
- это ерунда (без обид для автора)

Цитата Сообщение от MikeEl Посмотреть сообщение
double calc(double sum, double nom, const int n, const double x, const double eps)
{
* * nom *= (1-x);
* * sum += nom / n;
* * if (fabs(nom/n) >= eps)
* * * * return calc(sum, nom, n+1, x, eps);
* * else
* * * * return sum;
}
- опять же рекурсия а не рекуррентное соотношение

рекуррентное соотношение и его вывод выше
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Итератор (рекуррентное соотношение) для логорифма натурального
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} = {(-1)}^{n - 1}*\frac{{(x - 1)}^{n}}{n}
http://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} = {(-1)}^{n}*\frac{{(x - 1)}^{n + 1}}{n + 1}
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{{(-1)}^{n}*\frac{{(x - 1)}^{n + 1}}{n + 1}}{{(-1)}^{n - 1}*\frac{{(x - 1)}^{n}}{n}} = (-1)*(x - 1)*\frac{n}{n + 1}
Последнее выражение и использовано

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
ты присаживайся к нам, неведующим и невнимательным
Пивка хлебну и убегаю заказчики снова пришли по мою душу с просьбами а можно ещё то а можно ещё это а можно и пз заказать, уффф

0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.06.2013, 17:46 #38
-=ЮрА=-, там требуется и рекурсия и рекуррентное отношение по ТЗ.

Не по теме:

Хех, а я только только заказ сдал, вот опять сюда вернулся)

0
-=ЮрА=-
12.06.2013, 17:51
  #39

Не по теме:

MrGluck, нет не требуется, это формулировка

Цитата Сообщение от MikeEl Посмотреть сообщение
завершения рекурсивного расчета
- для условия окончания процесса с рекуррентным соотношением, даже можно трактовать как очепятку либо недосмотрение. В любом случае ТС на днях сам увидит что скажет препод на его рекурсию вместо рекуррентного расчёта.

0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.06.2013, 17:53 #40
У меня лишь сокращено, вместо прошлого элемента передается лишь его числитель. Наверное, это уже не рекуррентное соотношение, хоть и сделать его уже легко. Я кстати точно также на бумажке у себя записывал, прежде чем решить.
Вот с синусом лучше бы помог кубическим, там на самом деле с рекуррентными соотношениями не совсем приятно получается. -1 * x^2 * (3^(2n+1) - 3) / (3^(2n-1) - 3) / ((2n+1)! / (2n-1)!)
Жесть вышла, сейчас попробую в редакторе формул набрать

Добавлено через 41 секунду
-=ЮрА=-, по моему, там должно быть и то и то, т.е. рекурсивно считать пока точность не стала больше, чем eps
0
-=ЮрА=-
12.06.2013, 17:58
  #41

Не по теме:

Цитата Сообщение от MrGluck Посмотреть сообщение
Вот с синусом лучше бы помог кубическим, там на самом деле с рекуррентными соотношениями не совсем приятно получается. -1 * x^2 * (3^(2n+1) - 3) / (3^(2n-1) - 3) / ((2n+1)! / (2n-1)!)
- автор полностью игнорит мои посты не вижу смысла в помощи, я помогаю когда есть фидбэк от автора + пример вывода итератора есть - поделил оно на другое и пошёл пить пиво.

Цитата Сообщение от MrGluck Посмотреть сообщение
по моему, там должно быть и то и то,
- настойчиво скажу нет,
втой логике задание что есть нет.

0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.06.2013, 18:00 #42
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n+1}}{{a}_{n}} = \frac{-1 * {x}^{2} * ({3}^{2n + 1} - 3)}{({3}^{2n - 1} - 3) * 2n * (2n+1)}
0
MikeEl
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 52
12.06.2013, 18:06  [ТС] #43
Цитата Сообщение от MrGluck Посмотреть сообщение
http://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n+1}}{{a}_{n}} = \frac{-1 * {x}^{2} * ({3}^{2n + 1} - 3)}{({3}^{2n - 1} - 3) * 2n * (2n+1)}
столько всего было сказанно, но что из этого всего для меня подойдет?
0
MrGluck
Модератор
Эксперт CЭксперт С++
7423 / 4538 / 673
Регистрация: 29.11.2010
Сообщений: 12,319
12.06.2013, 18:08 #44
MikeEl, если я не ошибся в расчетах, то это рекуррентная формула для расчета кубического синуса. Я решал просто с рекурсией, но без соотношения (выражение следующего ряда последовательности через предыдущий)
0
MikeEl
1 / 1 / 0
Регистрация: 27.03.2012
Сообщений: 52
12.06.2013, 18:17  [ТС] #45
Цитата Сообщение от MrGluck Посмотреть сообщение
MikeEl, если я не ошибся в расчетах, то это рекуррентная формула для расчета кубического синуса. Я решал просто с рекурсией, но без соотношения (выражение следующего ряда последовательности через предыдущий)
я вот совместилу Ваш код и код Юрия. естественно чтоб все работало. и все считает. так правильно будет? :
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
#include <iostream>
#include <math.h>
#include <conio.h>
#include <iomanip>
 #include <stdio.h>
using namespace std;
 
double S(double x, double e)
{
    double   k = 1;
    double sum = 0;
    double ak  = x - 1;//рассчитываем лишь самый первый слен разложения
    while(e < fabs(ak))//Вот оно условие окончания итерационного процесса
    {
        sum += ak;
        //вот рекуррентная формула для ln
        ak  *=((-1)*(x - 1)*k/(k + 1));
        k   =  k + 1;
    }
    return sum;
}
 
int main()
{
    {double xstart, xend, xdelta, e;
cout << "Начало (xstart):";
cin >> xstart;
cout << "Конец (xend): ";
cin >> xend;
cout << "Шаг(xdelta): ";
cin >> xdelta;
cout << "Точность(e, eps): ";
cin >> e;
if (xstart<=0)
{cout<<"Error!"<<endl;
return 0;
}
for(double x=xstart;x <= xend; x+=xdelta) 
{
if (x<=0)
continue;
else
cout << "f(" << x << ")="  << setw (9) << log(x) << endl;
}
system("pause");
return 0;
}
 
    
}
Добавлено через 1 минуту
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение

Не по теме:

- автор полностью игнорит мои посты не вижу смысла в помощи, я помогаю когда есть фидбэк от автора + пример вывода итератора есть - поделил оно на другое и пошёл пить пиво.

- настойчиво скажу нет,
втой логике задание что есть нет.

я не игнорю, я проверяю все и анализирую. огромное спасибо за Ваше содействие.
0
12.06.2013, 18:17
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.06.2013, 18:17
Привет! Вот еще темы с ответами:

Переделать код! - C++
Вот есть задача: Найти площадь шестиугольника, стороны которого равны a, b, c, d, е, f и диагонали, которые разбивают шестиугольник на...

Переделать код из С в С++ - C++
помогите переделать код из С в С++. до 11.03.14 надо #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;math.h&gt; float f(float...

Переделать код из C# в C++ - C++
Помогите переделать код из C# в C++ int matrix = new int; int number = Convert.ToInt32(Console.ReadLine()); ...

Переделать код с Си на C++ - C++
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; int main(int argc, char *argv) { size_t strLen, keyLen, i, k; ...


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

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

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