Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.71/55: Рейтинг темы: голосов - 55, средняя оценка - 4.71
6 / 6 / 0
Регистрация: 06.05.2012
Сообщений: 18
1

Вычислить с заданной точностью значение функции

24.08.2012, 12:02. Показов 10014. Ответов 21
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
вот такая задачка...
Миниатюры
Вычислить с заданной точностью значение функции  
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.08.2012, 12:02
Ответы с готовыми решениями:

Вычислить значение функции, заданной рядом Тейлора на интервале и с заданной точностью
Доброго времени суток. Я написал код, но он работает неправильно. Первое значение он считает...

Вычислить с заданной точностью значение заданной комплексной функции
Не могу составить алгоритм. Уже 2 дня мучаюсь и ищу материал. Вот, собственно, задачка: Даны...

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

Вычислить с заданной точностью значение функции
вот такая задачка..

21
2 / 2 / 1
Регистрация: 04.10.2009
Сообщений: 51
24.08.2012, 12:04 2
Цитата Сообщение от Buiucliu Посмотреть сообщение
вот такая задачка...
Это я так понял общее задание, а должен быть твой вариант с функцией и точностью.
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
24.08.2012, 16:59 3
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
#include <iostream>
#include <iomanip>
#include <cmath>
 
size_t fact(size_t num)
{
    if (num == 0)
        return 1;
    return num * fact(num - 1);
}
 
int main()
{
    const double e = 1e-15;
    const double x = 0.5;
    bool f = true;
    double y = 1.0;
    double v1 = y;
    double v2 = v1;
    size_t denom = 2;
    do
    {
        v2 = y;
        v1 = std::pow(x, (double)denom) / fact(denom);
        denom += 2;
        y += f ? -v1 : v2;
        f != f;
    }
    while (std::abs(v2 - y) > e);
    std::cout << std::setprecision(15) << y << std::endl;
    std::cout << std::cos(x) << std::endl;
}
Вычислить с заданной точностью значение функции
1
Заблокирован
Автор FAQ
25.08.2012, 15:46 4
Buiucliu, решать задание рациональней с помощью итератора а не прямого вычисления по формуле (в случае вычисления факториала для каждого значения вы замедляете алгоритм в n! раз, где n - число элементов разложения которого вы достигнете)
Ниже быстрая версия алгоритма
Расчёт итератора
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n} ={(-1)}^{n}*\frac{{x}^{2*n}}{(2*n)!}
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}_{n + 1} ={(-1)}^{n + 1}*\frac{{x}^{2*(n + 1)}}{(2*(n + 1))!}
https://www.cyberforum.ru/cgi-bin/latex.cgi?\frac{{a}_{n + 1}}{{a}_{n}} = \frac{{(-1)}^{n + 1}*\frac{{x}^{2*n + 2}}{(2*n + 2)!}}{{(-1)}^{n}*\frac{{x}^{2*n}}{(2*n)!}} = (-1)*\frac{{x}^{2}}{(2*n + 1)*(2*n + 2)}
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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double cosx(double x, double e)
{
    double sum = 0;
    double   n = 0;
    for(double  an = 1; e < fabs(an); n = n + 1)
    {
        sum += an;
        an  *= (-1)*pow(x,2.0)/((2*n + 1)*(2*n + 2));
    }
    return sum;
}
 
int main()
{
    double xn, xk, dx, e;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<" e = ";cin>>e;
    cout<<"  x\t|  cosx  | cmath\n";
    for(double x = xn; x <= xk; x += dx)
    {
        cout<<setprecision(5)<<setw(7)<<setfill(' ')<<x<<"\t|"
            <<setprecision(5)<<setw(7)<<setfill(' ')<<cosx(x, e)<<" |"
            <<setprecision(5)<<setw(7)<<setfill(' ')<<cos(x)<<endl;
    }
    return 0;
}
Миниатюры
Вычислить с заданной точностью значение функции  
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 16:21 5
-=ЮрА=-, правильно говорите, это и очевидно, что для быстрого вычисления нельзя забывать информацию предыдущего шага. Но ваш алгоритм тоже небезупречен, вычислите, например
cosx(1000, 1e-10)
cosx(10000, 1e-10)
Все сразу падает.
Поскольку функция cos периодическая, то сначала необходимо привести аргумент в полуинтервал https://www.cyberforum.ru/cgi-bin/latex.cgi?[0,2\pi), а потом вызывать функцию cosx.
0
Заблокирован
Автор FAQ
25.08.2012, 16:24 6
Thinker, разложение для ряда тейлора действует для значений аргумента по модулю меньших единицы и вызывая cosx(1000, 1e-10), т.е. х = 1000 нарушаем условие корректности разложения!
Мой алгоритм максимально быстр (конечно на асме было бы быстрей, т.е. масимум скорости для плюсов) и рабоатет в рамках допустимых значений аргумента, за всё остальное как говорится я ответсвенности не несу
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 16:27 7
-=ЮрА=-, ничего подобного, данный ряд сходится на всей числовой оси, поэтому можно смело подставлять в него любые значения, только в силу ограниченности диапазона переменных, необходимо их приводить к указанному полуинтервалу. А по модулю < 1 это ln x. Указанный ряд для косинуса мало того сходится в каждой точке числовой оси, он еще и равномерно сходится на любом отрезке.
0
Заблокирован
Автор FAQ
25.08.2012, 16:30 8
Thinker, то о чём я написал
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
разложение для ряда тейлора действует для значений аргумента по модулю меньших единицы
проявляется в отклонении от истинных значений функции при увеличении значения аргумента свыше 1-цы (по модулю) - т.е. чем больше модуль тем больше ошибка разложения. (тут уже не важно что ряд сходиться , его сумма начинает некорректно описывать функцию)
Миниатюры
Вычислить с заданной точностью значение функции  
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 16:34 9
-=ЮрА=-, не верить мне ваше право, верьте математике, cos x это аналитическая функция, то есть соответствующий ряд сходится в каждой точке комплексной! плоскости.
0
Заблокирован
Автор FAQ
25.08.2012, 16:46 10
Thinker, причём тут сходится
Цитата Сообщение от Thinker Посмотреть сообщение
=ЮрА=-, не верить мне ваше право, верьте математике, cos x это аналитическая функция, то есть соответствующий ряд сходится в каждой точке комплексной! плоскости.
я говорю о том, что разложение имеет свою область применимость касательно модуля аргумента. А уже не верить мне или верить это дело сугубо личное...
Иначе как опровергнуть результат отработки - тем что ЭВМ так захотелосьНе надо спорить надо отталкиваться от фактов - они такие чем выше модуль аргумента тем хуже разложение описывает исходную функцию, зачем спорить если это очевидно?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 16:51 11
-=ЮрА=-, для любого комплексного z справедливо равенство:
https://www.cyberforum.ru/cgi-bin/latex.cgi?cos z = 1-\frac{z^2}{2!}+...,
это означает, что какое бы число (комплексное или действительное) не подставить в левую и правую части равенства, они совпадут.

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Иначе как опровергнуть результат отработки - тем что ЭВМ так захотелось
Вот именно, нужна другая реализация.
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
25.08.2012, 16:51 12
Thinker, вы не понимаете сути разложения в ряд Тейлора. Из того, что ряд сходится, ещё не следует, что его частичная сумма равна косинусу. Если увеличивать количество слагаемых, то ряд будет неограниченно близко подходить к косинусу — именно это вкладывается в понятие сходимости. Заметьте разницу между пределом суммы ряда (который действительно тождественнен косинусу) и его частичной суммой. А конкретная частичная сумма только приближает косинус. Причём ошибка тем больше, чем аргумент дальше от опорного значения ряда (тут это ноль); и тем меньше, чем больше слагаемых взять.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 16:54 13
~OhMyGodSoLong~, ерунду сказали и верите в это. почитайте признак Лейбница лучше. правильно, все зависит от количества слагаемых и чтобы это избежать необходимо привести аргумент к указанному промежутку.
0
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
25.08.2012, 16:59 14
Тогда я жду от вас объяснений, каким образом вы с помощью линейной комбинации конечного числа непериодических функций смогли точно выразить периодическую функцию.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 17:01 15
вообще то требуется вычислить с указанной точностью cos x и это можно теоретически (практически сложнее) сделать для любого x, вот и весь наш спор с Юрой. Мой вариант решения задачи:

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
#include <cmath>
#include <iostream>
#define PI 3.1415926535897932384626433832795
 
long double Init(long double x)
{
   if (x < -PI)
      while (x < -PI)
         x += PI;
   else if (x > PI)
      while (x > PI)
         x -= PI;
   return x;
}
 
long double Cos(long double x, long double eps)
{
   long i = 0;
   long double p, rez;
   x = Init(x);
   rez = p = 1.0;
   while(std::fabs(p) >= eps)
   {
       i += 2;
       p *= -(x*x)/((i-1)*i);
       rez += p;
   }
   return rez;
}
 
int main()
{
    std::cout << Cos(1000, 1e-100);
    return 0;
}
0
Заблокирован
Автор FAQ
25.08.2012, 17:09 16
Thinker, ниже наглядная демонстрация, надеюсь вы поймёте о чём я говорю

PS:и не надо сбрасывать периоды косинуса(мы разговаривали о другом) я вам ещё раз повторюсь разложение имеет минимальную погрешность в области |x| < 1 BСЁ ЗАКОНЧИЛИ!
Миниатюры
Вычислить с заданной точностью значение функции  
Вложения
Тип файла: rar TaylorCos.mcd.rar (1.8 Кб, 5 просмотров)
0
577 / 256 / 18
Регистрация: 29.11.2010
Сообщений: 868
25.08.2012, 17:11 17
Цитата Сообщение от Thinker Посмотреть сообщение
Мой вариант решения задачи:
А где тут точность задается?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 17:12 18
Mathcad не критерий истинности, голова для этого имеется. Там явный косяк, так как вычисления в нем не по признаку Лейбница проводятся.

Добавлено через 35 секунд
Цитата Сообщение от defer Посмотреть сообщение
А где тут точность задается?
Второй параметр функции Cos
0
Заблокирован
Автор FAQ
25.08.2012, 17:21 19
Thinker, только что написали что мол разложение работает для любых аргументов, а сами init-ом периоды убираете (У вас такое же разложение что и у меня только трудней записанное, дело в другом от того что написали вы разложение считать правельней для больших модулей аргумента НЕ СТАЛО!)
Короче вот оптимальный алгоритм со сбрасыванием периода без кучи всякой ненужной ерунды
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
#include <cmath>
#include <iomanip>
#include <iostream>
using namespace std;
 
double cosx(double x, double e)
{
    double sum = 0;
    double   n = 0;
    for(double  an = 1; e < fabs(an); n = n + 1)
    {
        sum += an;
        an  *= (-1)*pow(x,2.0)/((2*n + 1)*(2*n + 2));
    }
    return sum;
}
 
int main()
{
    double PI2 = 4*asin(1.0);
    double xn, xk, dx, e;
    cout<<"xn = ";cin>>xn;
    cout<<"xk = ";cin>>xk;
    cout<<"dx = ";cin>>dx;
    cout<<" e = ";cin>>e;
    cout<<"  x\t|  cosx  | cmath\n";
    for(double x = xn; x <= xk; x += dx)
    {
        cout<<setprecision(5)<<setw(7)<<setfill(' ')<<x<<"\t|"
            <<setprecision(5)<<setw(7)<<setfill(' ')<<cosx(x - PI2*floor(x / PI2), e)<<" |"
            <<setprecision(5)<<setw(7)<<setfill(' ')<<cos(x)<<endl;
    }
    return 0;
}
Миниатюры
Вычислить с заданной точностью значение функции  
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
25.08.2012, 17:23 20
-=ЮрА=-, для любого x теоретически работает, а практически переменные этого не позволяют.
0
25.08.2012, 17:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.08.2012, 17:23
Помогаю со студенческими работами здесь

Вычислить значение функции sh(x) с заданной точностью
программа должна вычислять значение функции sh(x) действительного аргумента x с точностью ε с...

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

Что значит вычислить значение функции с заданной точностью?
Например, дана функция cosx/x и какая-либо точность. Как вычислить значение функции с заданной...

Вычислить значение функции, используя суммы с точностью.заданной пользователем
Нужно посчитать значение функции y=(e^x )* sin(x),не пользуясь функциями экспоненты и синуса,а...


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

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