Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
1

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

05.10.2016, 19:18. Показов 1250. Ответов 32
Метки нет (Все метки)

Сумма ряда с факториалом.
Дали лабораторную работу, не понимая того, что мы даже близко к данному по математики не подошли. Пришлось читать не совсем понятные теории суммы ряда и факториала. Общие сведения получил, но они явно недостаточные. А срока изучать это углубленно нет, крайне ограниченные сроки выполнения задания. Понял весьма немного ,а условие привело в общий шок. Но нужно справляться. Часть программы написал, а вот с основным блоком затрудняюсь. Условие ниже. Просьба большая помочь.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
void __fastcall TForm1::Button1Click(TObject *Sender)
{   if (Edit1->Text=="") ShowMessage("Перед получением результата необходимо ввести данные");
     else
           {  if (StrToInt(Edit1->Text)<=0)
                 {  ShowMessage("Перед получением результата необходимо ввести данные");
                     Close();
                 }
               int S=1;
               for(int k=1; k<=StrToInt(Edit1->Text); k++)
                   {  
                      S*=k;
                      S += (pow(-1,k) * pow(x,2*k)) / 2*k; //// Затруднения 
                      
 
                      Memo1->Lines->Add(IntToStr(P));
                   }
  }
}
Миниатюры
Вычислить значения функции разложением в ряд Тейлора  
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.10.2016, 19:18
Ответы с готовыми решениями:

Вычислить значения функции заданной разложением в ряд Тейлора
Для каждого х, изменяющегося от а до b с шагом h, найти значения функции Y(x), суммы S(x) и...

Вычислить значения функции, заданной разложением в ряд Тейлора
Формулы и задачу надо ПЕРЕПИСЫВАТЬ! Редактор формул внизу страницы

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

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

32
Helper C/C++
286 / 163 / 122
Регистрация: 22.09.2016
Сообщений: 518
05.10.2016, 19:20 2
По моему, насколько я помню, в мат. анализе перед тем как искать значение бесконечного ряда, его следует преобразовать с использованием определённых критериев.
0
252 / 158 / 118
Регистрация: 26.11.2012
Сообщений: 384
05.10.2016, 19:27 3
C++
1
2
3
4
5
6
7
8
    double x = 1.75, sum = 0, s = 0;
    for(int k = 1; k <= 8; k++){
        s = 1;
        for(int i = 1; i <= 2*k; i++) s *= 1.0/i;
        
        sum += pow(-1.0, k) * pow(x, 2*k) * s;
        
    }
1
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,244
05.10.2016, 19:52 4
C++
1
2
3
4
5
6
7
double a = 1;
int n = StrToInt(Edit1->Text);
for(k=1; sum=0; k<=n; k++) {
  a = -a;
  a *= x*x/((2*k-1)*2*k);
  sum += a;
}
Добавлено через 2 минуты
slavek777, и никого (из выступивших здесь) не слушайте.
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
06.10.2016, 16:38  [ТС] 5
cпасибо вам!

Добавлено через 20 часов 29 минут
То есть вы имели в виду такое?

C++
1
2
3
4
5
6
7
double a = 1;
int x = StrToInt(Edit1->Text);
for(k=1; k<=8; k++) {
  a = -a;
  a *= x*x/((2*k-1)*2*k);
  sum += a;
}
0
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,244
06.10.2016, 16:50 6
Цитата Сообщение от slavek777 Посмотреть сообщение
вы имели в виду такое
Почти. Только у тебя sum = 0 пропало. А у меня ошибка. В заголовке оператора for. Там запятая должна быть, а получилась точка с запятой. Прошу прощения. Чтоб не мудрствовать, напиши так:
C++
1
2
3
4
5
6
7
double a = 1, sum=0;
int x = StrToInt(Edit1->Text);
for(k=1; k<=8; k++) {
  a = -a;
  a *= x*x/((2*k-1)*2*k);
  sum += a;
}
1
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
06.10.2016, 17:26  [ТС] 7
Спасибо еще раз, прописал код, запустил, опять какая-то гадость с этим уравнением.


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 
 
   double a = 1, sum=0;
int x = StrToInt(Edit1->Text);
for(  int k=1; k<=8; k++) {
  a = -a;
  a *= x*x/((2*k-1)*2*k);
  sum += a;
   Memo1->Lines->Add(FloatToStr(  sum  ))  ;
  }
 
 
 
 
}
По условию дан x=1.75
Ввожу в поле вода целое число x , работает. Ввожу дробное - не работает. Крах идет, ошибку выдает с конвертацией, не могу приложить голову, где я ошибся с типом данных.
Миниатюры
Вычислить значения функции разложением в ряд Тейлора   Вычислить значения функции разложением в ряд Тейлора  
0
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,244
06.10.2016, 18:04 8
Цитата Сообщение от slavek777 Посмотреть сообщение
Ввожу дробное - не работает.
Цитата Сообщение от slavek777 Посмотреть сообщение
StrToInt
.....
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
06.10.2016, 18:44  [ТС] 9
Все, теперь работает! Спасибо вам еще раз огромное, хотел бы спросить, так как плохо понимаю строки ваши, ведь я думал, что они должны выглядить, как уравнение выше.А вы как-то его интересно переделали, моожете пожалуйста обьяснить, если нет - пойму, а то уже надоел вам..

C++
1
2
3
a = -a;
  a *= x*x/((2*k-1)*2*k);
  sum += a;
0
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,244
06.10.2016, 18:57 10
Цитата Сообщение от slavek777 Посмотреть сообщение
вы как-то его интересно переделали,
Попробуй разделить очередной член на предыдущий. Если это сделаешь аккуратно, то все станет ясно.

Добавлено через 3 минуты
Это, кстати, стандартный прием при вычислении рядов. Смотришь, чем очередной член отличается от предыдущего, и именно из него (уже посчитанного) делаешь очередной.
У этого приема следующие преимущества (по сравнению с лобовым)
- сокращается количество вычислений (не повторяется бессмысленно уже подсчитанное)
- факториалы не улетают в поднебесье
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
06.10.2016, 19:05  [ТС] 11
Так нолики получаются. При значении в 1.75. Делить нечего. При вводе других значений правда ответы не равные нули.Попытался вручную считать, совсем не сходится ничего. Теоретическую базу прочитал, но весьма плохо понял взаимосвязь.
Миниатюры
Вычислить значения функции разложением в ряд Тейлора  
0
Модератор
Эксперт С++
11484 / 9401 / 5650
Регистрация: 18.12.2011
Сообщений: 25,114
06.10.2016, 19:13 12
C++
1
2
3
4
5
6
7
8
    double a = 1, sum=0;
    double x = StrToFloat(Edit1->Text); // уточните, какая ф-я преобразует строку в double
    for(  int k=1; fabs(a)>1e-10; k++)  // 1e-10 - точность суммирования ряда
    {
       a *= -x*x/((2.0*k-1.0)*2.*k);
       sum += a;
    }
    Memo1->Lines->Add(FloatToStr(  sum  ))  ;
1
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
06.10.2016, 19:21  [ТС] 13
1. Не совсем понял , что уточнить?
2.
C++
1
fabs(a)>1e-10; //Что за a ?
Миниатюры
Вычислить значения функции разложением в ряд Тейлора  
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
06.10.2016, 19:25  [ТС] 14
Просто не знаком с рядами еще, поэтому и не знал, а вот насчет функций, что-то недопонял суть вопроса. Извлекается переменная с Едита.
0
Модератор
Эксперт С++
11484 / 9401 / 5650
Регистрация: 18.12.2011
Сообщений: 25,114
06.10.2016, 19:28 15
Цитата Сообщение от slavek777 Посмотреть сообщение
что уточнить
Я не знаю, какая функция преобразует строку в double
Цитата Сообщение от slavek777 Посмотреть сообщение
Что за a
"a" у Вас значение очередного члена ряда.
Когда оно станет достаточно малым, то суммирование прекращаем.

Советую посмотреть
Вычисление функций разложением в ряд Тейлора
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
06.10.2016, 19:42  [ТС] 16
Я попытался представить код в таком виде.
C++
1
2
3
4
5
6
int P=1,n=8; 
double x = StrToFloat(Edit1->Text); 
for(int i=1;i<=n; i++) 
{ P*=pow(-1, i)*pow(x,2*i)/(2*i); 
Memo1->Lines->Add(IntToStr(P));
}
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
07.10.2016, 20:38  [ТС] 17
Здравствуйте!
Дана уравнение(приложенное ниже) и дано задание:

1.Используя оператор цикла While для х=0,5 вычислять сумму до тех пор, пока она не станет больше по модулю величины Е=0,125.

2.Вывод получаемых результатов на каждом шаге цикла на форму выполнятся в компонент Memo. Добавление строк в окно редактора Memo осуществляется с помощью метода (процедуры) Memo1->Lines->Add(S); , где S – строка, которая выводится.

----------------------------------------------------------------------------------------------------------
Был дан пример до этого, со схожей задачей(ниже ее недокод), правда был написан отвратительным образом,с кучей синтаксических ошибок. По нему исправленному я написал свою программу. Но ошибку выдает : Memo1->Lines->Clear; // Выбивает ошибку:
Е2235 Member function must be called ... Не совсем понятно.

Но дело даже не только в ошибке,а самом задании.



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
//---------------------------------------------------------------------------
 #include <Classes.hpp> //?!
#include <vcl.h>
#pragma hdrstop
 #include <math.h>
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
 
void __fastcall TForm1::Button1Click(TObject *Sender)
{
   double  E, y ;
  double x=0.5;
  double S=0;  
  int k=1;   
  Memo1->Lines->Clear; // Выбивает ошибку.
  while (fabs(S)<E)
    {
      y=(pow(-1,k)* pow(x, 2*k-1) )/ 2*k;
      S+=y;
      k++;
      Memo1->Lines->Add(FloatToStr(S)); 
      }
 
 
}
-----------------------------------------------------
Пример недозадачи по которому мы должны делать данную задачу приложил ниже. Но такое "обьяснение" не дает мне ни то что бы написать правильно, а просто и решить данную задачу.
Миниатюры
Вычислить значения функции разложением в ряд Тейлора  
Изображения
 
0
59 / 59 / 53
Регистрация: 05.05.2013
Сообщений: 150
07.10.2016, 20:44 18
а если так
C++
1
Memo1->Lines->Clear();
0
1466 / 1174 / 551
Регистрация: 08.01.2012
Сообщений: 4,527
07.10.2016, 20:48 19
Цитата Сообщение от slavek777 Посмотреть сообщение
y=(pow(-1,k)* pow(x, 2*k-1) )/ 2/k;
....
0
5 / 5 / 1
Регистрация: 15.09.2016
Сообщений: 410
07.10.2016, 22:08  [ТС] 20
А почему / ?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2016, 22:08

Вычисление значения функции разложением в ряд Тейлора
Помогите пожалуйста написать программу на C++. От неё зависит мой зачёт. Нарушение правил форума...

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

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

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


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

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

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