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

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

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

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

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

Уважаемые эксперты, подскажите пожалуйсто, как по ряду Тейлора : 2*х+х3/3+x5/5+...+x2n+1/(2n+1)+... расчитать значение многочленов и их степень, при x пренадлежащей [0;1), с точностью 2-23. Если, невозможно при каком-то х достичь заданной точности, то составить ТЗ на изменения. Сам, студент, пробовал сдавать не получалось, помогите. Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.06.2012, 22:17     Расчет значения многочленов и их степень
Посмотрите здесь:
расчет значения e^x(x это степень) C++
C++ Расчет значения экспоненты
C++ Расчет значения функции по введенному значению и графику
Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень - отрицательные C++
C++ Написать программу с функцией, вычисляющей целую степень дробного числа. Учесть,что степень может быть положительной, отрицательной, нулевой
Расчет сумм в формуле и расчет xi должны быть оформлены в виде отдельных функций. C++
C++ Как возвести дробное число в целую степень? К примеру 2,7 возвести в степень 2 на C++.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
16.06.2012, 20:28     Расчет значения многочленов и их степень #2
Т.е., вам надо вычислить значение ряда Тейлора с заданной точностью? Вам надо написать цикл с предусловием (в С++ это цикл while) с условием выхода, когда текущий член будет меньше необходимой точности.
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
16.06.2012, 20:56  [ТС]     Расчет значения многочленов и их степень #3
нет мне не надо прогу пиать, только расчитать аргументы и их степень при х пренадлежащий [0;1)
и написать ТЗ, если на данном интервале невозможно достичь заданной точьности.
например [0;Х граничное) и (Х граничное;1].
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 можно смело забить
Александер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 минутами ожидания работы проги.
Вложения
Тип файла: 7z VPV.7Z (3.99 Мб, 6 просмотров)
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
18.06.2012, 12:46     Расчет значения многочленов и их степень #6
Стоп. Еще раз. Тебе нужно что? Вычислить ряд с заданной точностью? Тогда я тебе уже писал, как это делается, и цикл for здесь не уместен.
P.S.: Лучше код кидайте, а не проэкт.
Александер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 степень.
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
18.06.2012, 19:03     Расчет значения многочленов и их степень #8
Блин... Нет, ну я, конечно, все понимаю... Но ЗАЧЕМ все переменные сделаны глобальными?
P.S.: Процедуру мб вечером напишу.
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
18.06.2012, 19:05  [ТС]     Расчет значения многочленов и их степень #9
Там просто надо было не только для фиксированной точки высчитать, я сократил)
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
19.06.2012, 01:02     Расчет значения многочленов и их степень #10
Хотя надо подумать... Сходу непросто написать... Мы можем предположить, что знаем, что ряд расходится при x=w, и знаем, что w<q, где q -- какое-то известное число?
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
19.06.2012, 02:03  [ТС]     Расчет значения многочленов и их степень #11
да, тоже на листочке расчитывал, при х=1 степень очень большая 6000000. препад сказал, нужно найти Х граничное скорей всего это 0.7 и с [0.8;1] точность n^22.
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
19.06.2012, 11:56     Расчет значения многочленов и их степень #12
При x=1 ряд просто расходится. Просто мне важно знать, знаем ли мы изначально, что он разойдется в какой-то точке?
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
19.06.2012, 19:15  [ТС]     Расчет значения многочленов и их степень #13
да, мы знаем что разойдётся при Х=от 0.5 до 0.8. Но в какой наверника нужно узнать программно.
Примечание, любимое число препода, при каторой он проверяет Х=0.999999.
UFO94
264 / 253 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.06.2012, 02:55     Расчет значения многочленов и их степень #14
Ненене. Даже при x=0.95 он должен сойтись, ну может не очень быстро. А вот при 1 ровно он разойдется. Тут уж чистый матан.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2012, 09:44     Расчет значения многочленов и их степень
Еще ссылки по теме:
Перемножение многочленов C++
Произведение многочленов C++
C++ Умножение многочленов
Деление многочленов C++
вычисление многочленов на C++ C++

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

Или воспользуйтесь поиском по форуму:
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
20.06.2012, 09:44  [ТС]     Расчет значения многочленов и их степень #15
да, мне нужно показать это программно, паписать процедуру.
Yandex
Объявления
20.06.2012, 09:44     Расчет значения многочленов и их степень
Ответ Создать тему
Опции темы

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