Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
1

Уравнение в цикле

04.03.2011, 19:13. Показов 2543. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Подскажите как правильно написать эту формулу, без факториала можно.
Уравнение в цикле

А то что у меня получается не как не работает:
C++
1
2
3
4
5
for (n = 0; y > EPS && n < 100; n ++)
{
    y = pow ((-1), n) * pow (x, (2 * n)) / n; //последнее n вместо факториала
    sum += y;
}
Вот еще для Борланд Турбо 4.5 С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <math.h>
#include <stdio.h>
#define EPS 1.e-6
 
void main ()
{
    float y = 0, x, sum = 0;
    int n;
    scanf ("%f", &x);
    for (n = 0; y > EPS && n < 100; n ++)
    {
        y = pow ((-1), n) * pow (x, (2 * n)) / n;
        sum += y;
    }
    printf ("n=%f\nx=%f\ny=%f\nsum=%f\n\n", n, x, y, sum);
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2011, 19:13
Ответы с готовыми решениями:

Уравнение авторегрессии в цикле
Здравствуйте! Хочу, чтобы порядок авторегрессии автоматически менялся в цикле. Например, N- длина...

Как програмно в цикле не доходя до конца, пропустить шаг в цикле?
Как програмно в цикле не доходя до конца, пропустить шаг в цикле?

При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти
При склеивании строк в цикле, уже на пятом цикле возникает переполнение памяти. Что не так и как...

Переменная, которая только что использовалась в цикле в качестве счётчика в следующем цикле не используется
Помогите, пожалуйста. Вот отрывок программы (программа целиком- в архиве): procedure...

20
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
04.03.2011, 19:32  [ТС] 2
Для Визуал Студии 2010 С++:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <math.h>
#define EPS 1.e-6
 
double teylor (long double x)
{
    long double y = 0, sum = 0;
    long double n;
    for (n = 0; y > EPS && n < 100; n ++)
    {
        y = pow ((-1), n) * (x, (2 * n)) / n;
        sum += y;
    }
    return sum;
}
Должно передавать значение sum главному модулю... но результат 0.000000
0
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 20:36 3
Тебе не нужно пользоваться функцией pow, в таких заданиях жто неприпустимо!!!!
Обрати внимание, что у тебя каждый следущий елемент отличется от предадущего умноженого на икс в квадрате и поделеное на факториал, тоесть : сначала у тебя x^2, потом (x^2 * x^2)*1/2; потом (x^2 * x^2*(1/2 )) * x^2 * (1/3) ... тебе для вычисления сумы достаточн6о задать первый елемент, а потом умножить на икс квадрат и 1/n .
1
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
04.03.2011, 21:29  [ТС] 4
Что то вроде этого?? y = 1 * (x * x) * (1 / Modules::factorial (n)); Не совсем понимаю как это написать в коде.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <math.h>
#define EPS 1.e-6
namespace Modules
{   
    double factorial (long double n)
    {
        if (n == 1)
        return n;
        else return factorial (n - 1) * n;
    }
    double teylor (long double x)
    {
        long double y = 0, sum = 0;
        long double n;
        for (n = 0; y > EPS && n < 100; n ++)
        {
            y = 1 * (x * x) * (1 / Modules::factorial (n)); //pow ((-1), n) * (x, (2 * n)) / Modules::factorial (n);
            sum += y;
        }
        return sum;
    }
}
Добавлено через 12 минут
C++
1
2
3
4
5
6
7
8
9
float y = 0, x, sum = 0, pr = (x * x);
int n;
scanf ("%f", &x);
for (n = 0; y > EPS && n < 100; n ++)
{
    y = (x * x) * (1 / n);
    pr *= y;
    sum += pr;
}
Так??
0
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 23:13 5
Да, только вначале тебе нужно в суму записать единицу и икс квадрат, ведь ты их не учитываешь в цикле!!!!!
И еще тебе на -1 надо множить, ведь у тебя знаки чередуются!
1
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
04.03.2011, 23:33  [ТС] 6
C++
1
2
3
4
5
6
7
8
9
10
11
12
double teylor (int x, double sum)
{
    double y = 0, pr = 1;
    long int n;
    for (n = 0; fabs (y) > EPS && n < 50; n ++)
    {
        y = (((-1) * x) ^ 2) * (1 / Modules::factorial (n));
        pr *= y;
        sum += pr;
    }
    return sum;
}
Ну вот, последняя версия нерабочая)) Что тут еще сделать? Только напиши плс код. А то я че то не понимаю куды записать.
-1 это я учел уже, что с суммой сделать?

Добавлено через 16 минут
sum = 1 && (x ^ 2); //в буквальном смысле?)) или 1 или x^2, вписать в цикл? или дополнительно объявить присвоение значения в функции?
0
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
04.03.2011, 23:43 7
Ща напишу код.
0
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
04.03.2011, 23:55  [ТС] 8
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
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    double factorial (long double n)
    {
        if (n == 1)
        return n;
        else return (n - 1) * n;
    }
    double teylor (double x, double sum)
    {
        sum = 1 + (x * x);
        double y = 0, pr = 1;
        long double n;
        for (n = 0; fabs (y) > EPS && n < 100; n ++)
        {
            y = (-1) * (x * 2) * (1 / Modules::factorial (n));
            pr *= y;
            sum += pr;
        }
        return sum;
    }
}
Ну вот результат наконец то показался, спасибо timchuchok, посмотри правильно?
0
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:21 9
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
#include <iostream>
#include <cmath>
 
using namespace std;
 
double Teylor( double );
 
int main()
{
    double x;
    cout<<"Enter x =";
    cin>>x;
    cout<<endl<<exp(-x*x)<<endl<<Teylor(x);
    system("pause");
    return 0;
}
 
double Teylor( double x)
{
       double a , sum, eps = 0.0000001, i = 1.0, x2;
       x2 = x*x;
       a = 1;
       sum = 1 ;
       while ( fabs (a) >= eps ) 
       {
             a *= -1.0*x2*(1.0/i);
             sum +=a;
             i++;
       }
       return sum;
}
В главной функции написал проверку с помощью библиотечніх средств и с помощью "нашей" функции, резльтат один в один!

Добавлено через 20 минут
Leningradeс, у тебя в коде функция факториала используется, тут не рационально ее использівать!!!!
1
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.03.2011, 00:25 10
timchuchok, С чего не рационально-то?
0
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:29 11
По той причине, что в моем коде умножение использівается один раз в каждом цикле, а при віполнении єтого же цикла с функцией факториала - n .
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
05.03.2011, 00:33 12
timchuchok, Не использовать факториал, не использовать pow... Преждевременная оптимизация как бэ наносит вред. Хотя здесь возможно и действительно проще не использовать всего этого. Не всматривался.
0
Jupiter
05.03.2011, 00:37
  #13

Не по теме:

хи) если на то пошло, то для подсчета суммы знакочередующегося ряда с заданой точностью нужно использовать следствие теоремы Лейбница, а так ваша программа суммирует на один член ряда больше чем необходимо:)

0
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 00:40 14
Дельное замечание))
0
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
05.03.2011, 02:48  [ТС] 15
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
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    double teylor (float x, float sum)
    {
        sum = 1 + (1 - (x * x));
        float y = 0, pr = 1;
        int n;
        for (n = 2; fabs (y) >= EPS && n < 100; n ++)
        {
            if (n <= 1)
            {
                y = (-1) * (x * x) * (1 / n);
                pr *= y;
                sum += pr;
            }
            if (n > 1)
            {
                y = (-1) * (x * x) * (1 / (n - 1) * n);
                pr *= y;
                sum += pr;
            }
        }
        return sum;
    }
}
А так? Результаты такие же... правда не особо вдохновляет результат... Если начать с n = 2 то первые добавленные элементы в sum не будут вновь записаны туда же?


Уравнение в цикле
0
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
05.03.2011, 03:11  [ТС] 16
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    double teylor (float x, float sum)
    {
        sum = 1 + (1 - (x * x));
        float y = 0;
        int n;
        for (n = 2; fabs (y) >= EPS && n < 100; n ++)
        {
            y = (-1) * (x * x) * (1 / (n - 1) * n);
            sum += y;
        }
        return sum;
    }
}
Тогда код совсем упрощается... только правильно ли? Результаты вроде те же...
0
15 / 15 / 1
Регистрация: 21.12.2010
Сообщений: 55
05.03.2011, 11:48 17
Тебе сума в параметрах функции не нужна!
А так если, если правильно все считает - значит все верно!
1
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
05.03.2011, 19:43  [ТС] 18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <math.h>
#define EPS 1.e-6
 
namespace Modules
{   
    int factorial (int n)
    {
        if(n == 1)
        return n;
        else return factorial (n - 1) * n;
    } 
    double teylor (float x)
    {
        float y = 1, n = 1.0, x2 = x * x, sum = 1;
        while ( fabs (y) >= EPS ) 
        {
            y *= -1.0 * x2 * (1.0 / factorial (n));
            sum += y;
            n ++;
        }
        return sum;
    }
}
Убрал сумму, вроде как все верно. Еще раз спасибо timchuchok
0
14 / 14 / 3
Регистрация: 03.03.2011
Сообщений: 435
07.03.2011, 18:25  [ТС] 19
Кстате зачем у функции типы? Как по теории правильно расставлять типы перед функцией и внутри?
0
В астрале
Эксперт С++
8049 / 4806 / 655
Регистрация: 24.06.2010
Сообщений: 10,562
07.03.2011, 18:37 20
Leningradeс, У функции - тип возвращаемого значения и типы параметров... Ну а как расставлять. Ну это уже вам решать)
1
07.03.2011, 18:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.03.2011, 18:37
Помогаю со студенческими работами здесь

Оптимизирует ли компилятор выражения в цикле типа 90*M_PI или каждую итерацию в цикле считает заново?
Занялся сабжем по проекту. IDE Builder 2010 1) Оптимизирует ли компилятор выражения в цикле типа...

Написать уравнение прямой и уравнение медианы при заданных вершинах треугольника.
Привет всем! Помогите пожалуйста с векторами: есть точки с координатами:...

Составить уравнение параболы с вершиной в начале координат, если уравнение ее директрисы x = -5
Составить уравнение параболы с вершиной в начале координат, если уравнение ее директрисы x = -5 .

Подставить в уравнение такие десятичные цифры, чтобы уравнение стало верным
В уравнении вида A + B = C, где A, B и C — неотрицательные целые числа, некоторые цифры заменены на...


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

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