13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
1

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

06.12.2013, 09:59. Показов 1829. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день. Дана лабораторная работа, (см. ниже 2 скриншота) по заданию нужно вычислить функции с использованием их разложения в степенной ряд (функции с передачей параметров по значению).

Я вроде бы выполнил условия, результаты видны, но не у верен в правильности, т.к. читал немного литературы и смотрел примеры. Результат - мой код внизу. А главное, не пойму как внедрить перегрузку функций.

Пожалуйста дайте совет как лучше сделать и правильно ли я сделал.
До этого без проблем выполнил 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
#include <cstdlib>
#include <iostream>
#include <math.h>
#include <iomanip>
using namespace std;
 
unsigned long long factorial(unsigned long long i) //вычисление факториала
{
    if (i == 0) 
        return 1;
    else 
        return i * factorial (i - 1);
}
 
int main()
{ 
setlocale(LC_ALL, "Russian"); // функция локализации вызывается только один раз
double  a, b, e;
int N;
    cout<<" Данные по варианту:"<< endl;
    cout<<" Разложение в ряд функций f(x): S=1+(x/1!)+(x^2/2!)+...+(xn/n!)"<< endl;
    cout<<" Диапазон изменения аргумента: a=1 b=2"<< endl;
    cout<<" N = 15: "<< endl;
    cout<<" Функций f(x) - сумма ряда (для проверки): S=e^x"<< endl;
    cout<<" eps близкое к нулю положительное число, например, 0.1, 0.01, 0.001, 0.0001"<< endl;
    cout<<" Введите Данные:"<< endl;
do
    {
        cout<<" Введитеи интервал а:"<< endl; cin>>a;// интервал
        cout<<" Введите интервал b:"<< endl; cin>>b;// интервал
    }while(a>=b);//проверка условий 
do
    {
        cout<<" Введите N:"<< endl; cin>>N;// диапазон изменения аргумента
 
    }while(N<1);//проверка условий 
do
    {
        cout<<"Введите eps: "; //точность 
        cin>>e;
    } while(e>0.1 || e<0.0001); //0.0001 < e < 0.1
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"x"; // таблица
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"Sn";
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"Se";
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<"S"<<endl;
float x,h=(b-a)/10,sn=0,se=0,t,y; //вычисление шага
int i,j;
for(x=a;x<=b;x+=h)//вычисление x
{
    sn=x;se=x; //вычисление присваиваем значение х
    for(i=1;i<=N;i++)
{
    sn+=pow(x,i)/factorial(i);//правельное ли вычисление по формуле и факториала?
};
    j=1;
do 
{
    t=pow(x,j)/factorial(j);
    j++;se+=t;
} while(t>e);
    y=exp(x);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<sn;
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<se;
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<y<<endl;
}
system("PAUSE"); 
return 0;
}

Благодарю всяк входящего сюда, особенно тех кто не оставил без внимания данный пост. Вдруг кому то моя тема поможет в решение подобной задачи.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.12.2013, 09:59
Ответы с готовыми решениями:

Вычисление функций с использованием их разложения в степенной ряд
Здраствуйте, форумчане!!! У меня такая задачка!!!! Для х изменяющегося от a до b с шагом...

Вычисление функций с использованием их разложения в степенной ряд
Здравствуйте!Бьюсь над задачей который день, подскажите что не так Для х изменяющегося от a до b с...

Вычисление функций с использованием их разложения в степенной ряд!
Условие: Для х изменяющегося от a до b с шагом (b-a)/k, где (k=10), вычислить функцию f(x),...

Вычисление функций с использованием их разложения в степенной ряд
Помогите пожалуйста исправить прогрограмму (С++) Для х изменяющегося от a до b с шагом (b-a)/k,...

8
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
06.12.2013, 19:18  [ТС] 2
Не кому подсказать?(

Добавлено через 3 часа 27 минут
Прошу Совета!
0
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
08.12.2013, 01:11  [ТС] 3
ап?
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
08.12.2013, 01:37 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
double My_exp(double x, int N)
{
   double total = 1. + x, sum = x;
 
   for (int i = 2; i <= N; i++)
   {
      sum *= x / i;
      total += sum;
   }
 
   return total;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double My_exp(double x, double eps)
{
   double total = 1. + x, sum = x;
   int i = 2;
 
   while (sum > eps)
   {
      sum *= x / i;
      total += sum;
      i++;
    }
 
   return total;
}
1
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
08.12.2013, 15:14  [ТС] 5
Цитата Сообщение от kazak Посмотреть сообщение
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
double My_exp(double x, int N)
{
   double total = 1. + x, sum = x;
 
   for (int i = 2; i <= N; i++)
   {
      sum *= x / i;
      total += sum;
   }
 
   return total;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
double My_exp(double x, double eps)
{
   double total = 1. + x, sum = x;
   int i = 2;
 
   while (sum > eps)
   {
      sum *= x / i;
      total += sum;
      i++;
    }
 
   return total;
}


Спасибо за ответ, пока правда не понял как внедрить. Что-то голова не варит, или недостаточно теории. Сижу ломаю голову. Понял, только то, что pow(x,1) должен вроде складывать значения pow(x,n) и факториал кажется так же.
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
08.12.2013, 20:55 6
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
float x,h=(b-a)/10,sn=0,se=0,t,y; //вычисление шага
int i,j;
for(x=a;x<=b;x+=h)//вычисление x
{
* * sn=x;se=x; //вычисление присваиваем значение х
* * for(i=1;i<=N;i++)
{
* * sn+=pow(x,i)/factorial(i);//правельное ли вычисление по формуле и факториала?
};
* * j=1;
do 
{
* * t=pow(x,j)/factorial(j);
* * j++;se+=t;
} while(t>e);
* * y=exp(x);
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<sn;
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<se;
* * cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<y<<endl;
}
C++
1
2
3
4
5
6
7
8
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 1;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
}
Не забудьте добавить описание функций Myexp.
1
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
08.12.2013, 21:45  [ТС] 7
Цитата Сообщение от kazak Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 1;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
}
Не забудьте добавить описание функций Myexp.
Огромная благодарность Вам! Более менее моя голова чему то набирается благодаря Вам!

Только, вроде, вот тут
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 1;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
}
Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций


Должно быть так?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
h=(b-a)/10; //вычисление шага
for(x=a;x<=b;x+=h)//вычисление x
    {
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<My_exp(x, N);
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<My_exp(x, e);
        cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
    }
Вычислить функции с использованием их разложения в степенной ряд. Функции и Перегрузка функций


иначе он присвоит х=а и далее не увеличивает х на шаг.
Надеюсь я ничего не путаю. Еще раз спасибо за отклик.
0
3528 / 2686 / 334
Регистрация: 11.03.2009
Сообщений: 6,167
08.12.2013, 23:03 8
Я там забыл дописать
C++
1
2
3
4
5
6
7
8
9
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 0;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
    x += h;
}
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
Должно быть так?
Так лучше не делать, так как из-за специфичного формата чисел с плавающей точкой их нельзя напрямую сравнивать на равенство. Если Вы присмотритесь к своему варианту, то можете заметить, что в таблице отсутствует результат для значения b. Более подробно узнать можно тут http://habrahabr.ru/post/112953/
1
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
08.12.2013, 23:39  [ТС] 9
Цитата Сообщение от kazak Посмотреть сообщение
Я там забыл дописать
C++
1
2
3
4
5
6
7
8
9
float x=a,h=(b-a)/10; //вычисление шага
for(int i = 0;i<=10;i++)//вычисление x
{
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<x; // заполнение таблицы
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, N);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<Myexp(x, e);
    cout<<setw(15)<<setprecision(6)<<setiosflags(ios:: fixed)<<exp(x)<<endl;
    x += h;
}
Так лучше не делать, так как из-за специфичного формата чисел с плавающей точкой их нельзя напрямую сравнивать на равенство. Если Вы присмотритесь к своему варианту, то можете заметить, что в таблице отсутствует результат для значения b. Более подробно узнать можно тут http://habrahabr.ru/post/112953/
И правда. Спасибо еще раз за совет. Ссылку взял на изучение.
0
08.12.2013, 23:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.12.2013, 23:39
Помогаю со студенческими работами здесь

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

Вычисление функций с использованием их разложения в степенной ряд
Для х, изменяющегося от a до b (интервал целиком лежит внутри интервала, указанного в третьей...

Вычисление функций с использованием их разложения в степенной ряд
Помогите пожалуйста с задачей: Постановка задачи: Для х изменяющегося от a до b с шагом (b-a)/k,...

Вычисление функций с использованием их разложения в степенной ряд
Вычисление функций с использованием их разложения в степенной ряд. Вычислить функцию S= f(x),...


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

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

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