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

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.69
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
15.06.2012, 22:17     Расчет значения многочленов и их степень #1
Уважаемые эксперты, подскажите пожалуйсто, как по ряду Тейлора : 2*х+х3/3+x5/5+...+x2n+1/(2n+1)+... расчитать значение многочленов и их степень, при x пренадлежащей [0;1), с точностью 2-23. Если, невозможно при каком-то х достичь заданной точности, то составить ТЗ на изменения. Сам, студент, пробовал сдавать не получалось, помогите. Спасибо.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
 Аватар для UFO94
263 / 252 / 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
 Аватар для UFO94
263 / 252 / 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
 Аватар для UFO94
263 / 252 / 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
 Аватар для UFO94
263 / 252 / 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
 Аватар для UFO94
263 / 252 / 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
 Аватар для UFO94
263 / 252 / 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
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.06.2012, 02:55     Расчет значения многочленов и их степень #14
Ненене. Даже при x=0.95 он должен сойтись, ну может не очень быстро. А вот при 1 ровно он разойдется. Тут уж чистый матан.
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
20.06.2012, 09:44  [ТС]     Расчет значения многочленов и их степень #15
да, мне нужно показать это программно, паписать процедуру.
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
20.06.2012, 11:10     Расчет значения многочленов и их степень #16
Цитата Сообщение от UFO94 Посмотреть сообщение
Т.е., вам надо вычислить значение ряда Тейлора с заданной точностью? Вам надо написать цикл с предусловием (в С++ это цикл while) с условием выхода, когда текущий член будет меньше необходимой точности.
если ряд является рядом Лейбница, то да, в общем случае - нет.

Цитата Сообщение от UFO94 Посмотреть сообщение
Тогда я уже писал, как это делается, и цикл for здесь не уместен.
В pascale был бы неуместен, а здесь можно условия через for прописывать

P.S. Данный ряд сходится в интервале (-1, 1)

Цитата Сообщение от Александер1 Посмотреть сообщение
да, мы знаем что разойдётся при Х=от 0.5 до 0.8. Но в какой наверника нужно узнать программно.
Примечание, любимое число препода, при каторой он проверяет Х=0.999999.
Ряд при Х=от 0.5 до 0.8 сходится
При Х=0.999999 тоже сходится

Цитата Сообщение от Александер1 Посмотреть сообщение
да, мне нужно показать это программно, паписать процедуру.
Трансцендентные числа нельзя в компьютере хранить, например, так что теория и практика в данном случае - не одно и тоже
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
20.06.2012, 12:02  [ТС]     Расчет значения многочленов и их степень #17
Ольга, как же нельзя, если препад сказал можно, он профессор тех. наук. Также он сказал тип переменной делать не длинное (дабл), а сверх длинное(дубль дабл). Надо просто показать программно, достигается ли точьность n^(-23) на интервале Хпренадлежащем [0;1] ; если нет, то n^(-22) и тд.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
20.06.2012, 12:13     Расчет значения многочленов и их степень #18
1) Киньте, пожалуйста, ссылку по ряду Лейбница. Гуглением нашел только это:
http://ru.wikipedia.org/wiki/%D0%A0%...B8%D1%86%D0%B0
2) Можно через for. Но зачем, если в итоге получится фактически цикл while, только коряво записаный?
3) Вот-вот.
4) Конечно нельзя. Но их можно хранить с необходимой точностью, чего вполне хватает.
И, кстати, везде, где ряд сходится, его можно просуммировать с любой точностью (надо только знать эту точность заранее), а везде, где расходится, точность -- просто бессмысленное понятие, т.к. правильная сумма ряда там бесконечность. Так что надобно уточнить, что же мы все же хотим сделать.
Александер1
0 / 0 / 0
Регистрация: 24.03.2011
Сообщений: 68
20.06.2012, 13:12  [ТС]     Расчет значения многочленов и их степень #19
я так прогу написал , не периписывать же. Нужно добавить к проге процедуру, при каких х достигается точность n^(-23), при каких нет. Х принадлежит [0;1).

Добавлено через 12 минут
я так прогу написал , не периписывать же. Нужно добавить к проге процедуру, при каких х достигается точность n^(-23), при каких нет(если достигается на всём интервале, то всё равно написать процедуру которая показывает , что на [0;1] точность n^-23). Х принадлежит [0;1).
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.06.2012, 13:23     Расчет значения многочленов и их степень
Еще ссылки по теме:

C++ Последовательность многочленов H0(x),H1(x)
Даны три действительные числа. Возвести в квадрат те из них, значения которых неотрицательны, и в четвертую степень - отрицательные C++
C++ Написать программу с функцией, вычисляющей целую степень дробного числа. Учесть,что степень может быть положительной, отрицательной, нулевой

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

Или воспользуйтесь поиском по форуму:
Olga_
 Аватар для Olga_
840 / 182 / 16
Регистрация: 01.08.2011
Сообщений: 502
20.06.2012, 13:23     Расчет значения многочленов и их степень #20
Цитата Сообщение от UFO94 Посмотреть сообщение
1) Киньте, пожалуйста, ссылку по ряду Лейбница. Гуглением нашел только это:
Да, правильнее сказать признак Лейбница
http://ru.wikipedia.org/wiki/%D0%97%...80%D1%8F%D0%B4

Добавлено через 1 минуту
Цитата Сообщение от Александер1 Посмотреть сообщение
Ольга, как же нельзя, если препад сказал можно, он профессор тех. наук.
Он не математик, поэтому ошибся. Даже первокурсники знают, что на компьютере сходимость не проверяют
Yandex
Объявления
20.06.2012, 13:23     Расчет значения многочленов и их степень
Ответ Создать тему
Опции темы

Текущее время: 16:26. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru