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

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

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

Расчет значения многочленов и их степень - C++

15.06.2012, 22:17. Просмотров 1756. Ответов 36
Метки нет (Все метки)

Уважаемые эксперты, подскажите пожалуйсто, как по ряду Тейлора : 2*х+х3/3+x5/5+...+x2n+1/(2n+1)+... расчитать значение многочленов и их степень, при x пренадлежащей [0;1), с точностью 2-23. Если, невозможно при каком-то х достичь заданной точности, то составить ТЗ на изменения. Сам, студент, пробовал сдавать не получалось, помогите. Спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2012, 22:17
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расчет значения многочленов и их степень (C++):

расчет значения e^x(x это степень) - C++
есть задача,в котором нужно рассчитать значение e^x. Проблема в том что я даже понятие не имею что это такое это экспоненто в степени x....

Расчет значения экспоненты - C++
Есть задача, где требуется вычислить мат. константу е, по формуле е = 1 + 1/0! + 1/1! + 1/2! + 1/3! + ..., и тут в форуме я нашел что-то...

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

Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень - отрицательные - C++
Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень - отрицательные.

Вычислить 10-ю степень двойки сложением, умножением и просто возведением в степень. - C++
Написать код на С++ или С# или на Java Вычислить 10-ю степень двойки 1 - сложением, умножением и просто возведением в степень.

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

36
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
16.06.2012, 20:28 #2
Т.е., вам надо вычислить значение ряда Тейлора с заданной точностью? Вам надо написать цикл с предусловием (в С++ это цикл while) с условием выхода, когда текущий член будет меньше необходимой точности.
0
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
16.06.2012, 20:56  [ТС] #3
нет мне не надо прогу пиать, только расчитать аргументы и их степень при х пренадлежащий [0;1)
и написать ТЗ, если на данном интервале невозможно достичь заданной точьности.
например [0;Х граничное) и (Х граничное;1].
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
16.06.2012, 22:47 #4
Если так, то это уже даже ближе к матану. Ряд расписывается так: ряд=x+сумма(x^(2n+1)/(2n+1))=x+ln(1+x)+сумма(x^(2n)/2n)=x+ln(1+x)+0.5 ln(1-x^2), потому при таких иксах ряд везде будет сходиться, и точность достижима. Как дальше -- точно не знаю. Например, вы писали: расчитать значение многочленов и их степень. О каких многочленах идет речь? Ну, и если я вас понял правильно, и многочлен -- это "обрезаный" ряд Тейлора, то надо написать условие, общий член меньше точности, и найти оттуда n. Тогда на члены больше n можно смело забить
0
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
17.06.2012, 22:15  [ТС] #5
помогите пожалуйсто. Нужно добавить в прогу, нахождения х : (кусок кода)
C++ (Qt)
1
2
3
4
5
for (step(<-степень)= 1 ; step<=200; step++) 
{
   err(<-переменная)= maxerr(step; 0.0, 0.7);
       if (minerr> err) {  minerr=err; minstep=step;  }
}
Прогу написал, а с этим проблема, говорят можно написать за 30 минут с 5-10 минутами ожидания работы проги.
0
Вложения
Тип файла: 7z VPV.7Z (3.99 Мб, 6 просмотров)
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
18.06.2012, 12:46 #6
Стоп. Еще раз. Тебе нужно что? Вычислить ряд с заданной точностью? Тогда я тебе уже писал, как это делается, и цикл for здесь не уместен.
P.S.: Лучше код кидайте, а не проэкт.
0
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
18.06.2012, 14:39  [ТС] #7
C++ (Qt)
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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include "FIX.h"
#include <Windows.h>
 
#include <intrin.h>
#pragma intrinsic(__rdtsc)
 
#define f(x) (logf((1 + x) / (1 - x)))
 
//Коэффициэнты f6
float f6koef[] = {0.420000f, 0.391429f, 0.200000f, 0.048387f, 0.009695f, 0.011065f, 0.001784f};
 
//Коэффициенты f6 для фикс точки
FIX f6koefFx[] = {FLTOFIX(0.420000f), FLTOFIX(0.391429f), FLTOFIX(0.200000f), FLTOFIX(0.048387f), FLTOFIX(0.009695f), FLTOFIX(0.011065f), FLTOFIX(0.001784f)};
typedef float (*MPFLOAT)(float);
 
//Степень ряда
#define SOMEDEGREE 19
#define NITER ((SOMEDEGREE - 1) / 2)
 
//Степень ряда с фиксированной точкой
#define SOMEDEGREEFIX 19
#define NITERFIX ((SOMEDEGREEFIX - 1) / 2)
 
//Погрешность
float dres;
 
//Количество точек для оценки времени
const int countPoint = 10;
 
//Количество циклов для оценки времени
const int countCycle = 100000;
 
//Количество функций для оценки
const int countFunc = 7;
 
//Количество функций с фиксированной точкой
const int countFuncFix = 4;
 
// Размер таблицы
const int sizeTable = 2 << 12;
// Кол-во младших разрядов у фиксированной точки
const int YONGPOINTFIX = CPINT - 13;
// &#152;*Шаг таблица
const float h = 1.0f / sizeTable;
// Таблица
float table[sizeTable][2];
FIX tableFix[sizeTable][2];
 
 
//Реализация с помощью стандартной библиотеки
float etalon(float x)
{
    float res = f(x);
    float powx = x;
    for(int i = 0; i < 7; i++)
    {
        res += f6koef[i] * powx;
        powx *= x;
    }
    return res;
}
 
//Пустая функция для измерения времени вызова
float emptyFunc(float x)
{
    return 1;
}
 
//Пустая функция для измерения времени с фикс точкой
FIX emptyFunc(FIX x)
{
    return 1;
}
//Измерение времени с фикс точкой
FIX metrTimeFix(double timer[countFuncFix][countPoint + 1], __int64 timerT[countFuncFix][countPoint + 1])
{
    FIX ret = 0;
    PFIX pfix[] =  {gornerCycleFix, gornerNoCycleFix, tableAlgoFix, emptyFunc};
 
    FIX args[10];
    int n = 0;
    for(float x = 0; x < 1; x += 0.1f)
    {
        args[n++] = FLTOFIX(x);
    }
 
    for(int n = 0; n < countFuncFix; n++)
    {
        PFIX p = pfix[n];
        double total = 0;
        __int64 totalT = 0;
        for(int i = 0; i < countPoint; i++)
        {
            DWORD start = GetTickCount();
            __int64 startT = __rdtsc();
            for(int k = 0; k < countCycle; k++)
            {
                for(int a = 0; a < 10; a++)
                {
                    ret = p(args[a]);
                }
            }
            __int64 endT = __rdtsc();
            DWORD finish = GetTickCount();
            timer[n][i] = (double)(finish - start) / 10 / countCycle;
            timerT[n][i] = (endT - startT) / 10 / countCycle;
            total += finish - start;
            totalT += endT - startT;
        }
        timer[n][countPoint] = total / countPoint  / 10 / countCycle;
        timerT[n][countPoint] = totalT / countPoint  / 10 / countCycle;
    }
 
    return ret;
}
 
//Вывод информации о времени вычесления функции 
void outMetrTime(char* descript[], int size, double timer[][countPoint + 1], __int64 timerT[][countPoint + 1])
{
    printf("Method\tTime\n");
    for(int i = 0; i < size; i++)
    {
        printf("%s\t%I64d(%d nc)\n", descript[i], timerT[i][countPoint], (int)(timer[i][countPoint] * 1000000));    
    }
 
    printf("\n\n");
 
    printf("n");
    for(int i = 0; i < size; i++)
        printf("\t%s", descript[i]);
    printf("\n");
 
    for(int i = 0; i < countPoint; i++)
    {
        printf("%d", i + 1);
        for(int n = 0; n < size; n++)
            printf("\t%I64d(%d nc)", timerT[n][countPoint], (int)(timer[n][countPoint] * 1000000)); 
        printf("\n");
    }
}
void main()
{
    initTable();
    
    
    char* descriptFix[] =  {"Empty Func Fix"};
    double timerFix[countFuncFix][countPoint + 1];
    __int64 timerTFix[countFuncFix][countPoint + 1];
    metrTimeFix(timerFix, timerTFix);
    printf("\n\nFIX\n");
    outMetrTime(descriptFix, countFuncFix, timerFix, timerTFix);
    getch ();
 
}
Добавить процедуру нахождения Хграничного, и его max степень.
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
18.06.2012, 19:03 #8
Блин... Нет, ну я, конечно, все понимаю... Но ЗАЧЕМ все переменные сделаны глобальными?
P.S.: Процедуру мб вечером напишу.
0
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
18.06.2012, 19:05  [ТС] #9
Там просто надо было не только для фиксированной точки высчитать, я сократил)
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
19.06.2012, 01:02 #10
Хотя надо подумать... Сходу непросто написать... Мы можем предположить, что знаем, что ряд расходится при x=w, и знаем, что w<q, где q -- какое-то известное число?
0
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
19.06.2012, 02:03  [ТС] #11
да, тоже на листочке расчитывал, при х=1 степень очень большая 6000000. препад сказал, нужно найти Х граничное скорей всего это 0.7 и с [0.8;1] точность n^22.
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
19.06.2012, 11:56 #12
При x=1 ряд просто расходится. Просто мне важно знать, знаем ли мы изначально, что он разойдется в какой-то точке?
0
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
19.06.2012, 19:15  [ТС] #13
да, мы знаем что разойдётся при Х=от 0.5 до 0.8. Но в какой наверника нужно узнать программно.
Примечание, любимое число препода, при каторой он проверяет Х=0.999999.
0
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.06.2012, 02:55 #14
Ненене. Даже при x=0.95 он должен сойтись, ну может не очень быстро. А вот при 1 ровно он разойдется. Тут уж чистый матан.
0
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
20.06.2012, 09:44  [ТС] #15
да, мне нужно показать это программно, паписать процедуру.
0
20.06.2012, 09:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2012, 09:44
Привет! Вот еще темы с ответами:

Расчет сумм в формуле и расчет xi должны быть оформлены в виде отдельных функций. - C++
День добрый товарищи специалисты, помогите пожалуйста с примером m=((1/n)*\sum_{i=1}^{n}{x}_{i}){}^{2}-\sum_{i=1}^{n}{x}_{i} ,n=5 ф-ция...

Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++. - C++
Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.

Составить программу вычисления значения функции многочленов. - Алгоритмы
Составить программу вычисления значения функции: R (x)= P(x)/Q(x), где P(x) и Q(x)- многочлены степени n и m.

Вычиcлить значения многочленов при заданных значениях Х - Delphi
Даны числа a0,...,a6. Получить для x=1,2,3 значения p(x+1)-p(x), где p(y)=a6*y^6+a5*y^5+...+a0.


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

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

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