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

Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 22, средняя оценка - 4.77
AMFA
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
09.05.2012, 10:22     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #1
Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5. Погрешность ε вычислять с помощью следующего соотношения:
| f(x)подстрочный знак n - f(x) подстрочный знак n-1 | <= ε

Определить количество членов ряда, сравнить полученное значение суммы со знаком функции, полученным с помощью стандартных функций языка С++.

sin(x)=sum (-1)^k*(x^2k+1/(2k+1)!)
k=0

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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
// задание3.cpp 
//
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
int _tmain(int argc,_TCHAR* argv[])
{ 
    setlocale(LC_CTYPE,"Russian");
    float eps=0.001;
    //Определяем необходимые переменные х
    //k-номер члена ряда
    //y-переменная для хранения текущего значения суммы ряда.
    //y1-переменная для хранения предыдущего значения суммы ряда.
    //y0-переменная для хранения значения функции вычисленного
    //на основе стандатрных математических функций.
    double x,y,y1,y0;
    int k=0;
 
    //Вводим переменную х
    cout<<"Введите х=";cin>>x;
 
    y=1;//Задаем начальное значение у
 
    //Основной цикл для расчета суммы ряда
    do
    {
        //сохраняем предыдущие значение суммы ряда
        y1=y;
 
        //Вычисляем текущее значение суммы ряда
        k++;
        //kf-переменная для хранения факториала
        int kf=1;
        //Вложенный цикл для расчета факториала
        for(int m=1;m<=(k*2+1);m++)
        kf*=m;
        //накопление суммы ряда
        y+=pow(-1.,k)*(pow(x,2*k+1)/kf);
    }while(fabs(y-y1) > eps);
        //Количество членов ряда
         k=k+1;
 
    //Расчет точного значения для проверки
    y0=sin(x);
    cout<<"Результат расчета с "<<9<<"членами ряда:"<<setw(9)<<setprecision(5)<<y<<endl;
    cout<<"Точное значение ряда:"<<setw(9)<<setprecision(5)<<y0<<endl;
 
    return 0;
}
получается большая погрешность: Результат расчета с 9 членами ряда 0,4975
Точное значение ряда 0,99749

Заранее Большое спасибо!!!

Добавлено через 20 часов 14 минут
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.05.2012, 10:22     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5
Посмотрите здесь:

C++ Вычислить приближенное значение функции
C++ Вычислить бесконечную сумму с заданной точностью ε (ε>0).
Найти значение функции sinx с заданной точностью ε, используя данное разложение C++
C++ Программа должна вычислять значение функции exp(x) действительного аргумента x с точностью ε с использованием рекурсии.
Вычислить и вывести на экран значение функции F(x) на отрезке [a,b] с шагом h=0.1 с точностью ε. C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
09.05.2012, 12:04     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #2
Ну, как вариант, у вас переменная kf имеет тип int. В ней могут храниться значения от -32768 до 32767. Таким образом, 7! в нее еще влезет, а вот 9! уже никак.
А, и еще. Функция pow считает как e^(y*lnx), что не прибавляет ей точности. Для целых степеней будет лучше написать свою функцию возведения в степень, а для -1^k, наверное, лучше просто сделать условие if. Если k%2==0, то к сумме прибавляем этот член, иначе -- отнимаем.
А так вроде все правильно.

Добавлено через 13 минут
А, нет! Еще не все! Если вы заметите, что каждый следующий член ряда получается из предидущего домножением на x^2 и делением на 2k*(2k+1), и слегка перепишете, чтобы его сохранять, то факториал можно будет не писать, а ваш процессор будет благодарить вас до конца жизни.
Infinity3000
 Аватар для Infinity3000
1057 / 576 / 24
Регистрация: 03.12.2009
Сообщений: 1,255
09.05.2012, 12:06     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #3
Цитата Сообщение от UFO94 Посмотреть сообщение
Ну, как вариант, у вас переменная kf имеет тип int. В ней могут храниться значения от -32768 до 32767.

Минимальное значение для int −2,147,483,648
Максимальное значение для int +2,147,483,647


http://ru.wikipedia.org/wiki/Limits.h
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
09.05.2012, 12:14     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #4
Угу... я, похоже, написал либо для Borland C++ 4.5, либо просто левый ресурс...
http://citforum.ru/programming/cpp_march/cpp_017.shtml
AMFA
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
09.05.2012, 21:24  [ТС]     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #5
исправил!
Результат расчета с 9 членами ряда: 1
Точное значение ряда: 0,99749
Лучше чем 0.5 в погрешности,но видать опять где то что-то не так.

Можете написать условие if. Если k%2==0, то к сумме прибавляем этот член, иначе -- отнимаем.
Может я что то не так поставил туда или так и должно быть в ответе)
Сложно новенькому)))
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
09.05.2012, 23:25     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #6
Вы, кстати, учли замечание по поводу упрощения подсчетов?
Допустим, текущий член ряда p.
Тогда:
C++
1
2
3
if(k%2==0)
y+=p;
else y-=p;
AMFA
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
11.05.2012, 19:29  [ТС]     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #7
еще нет)пока нет времени, в выходные попробую,правда пока не знаю как))может образец у кого есть упрощения или примерно что должно быть))до конца месяца надо еще 3 задачи выполнить а времени не так и много)

Добавлено через 21 час 38 минут
что-то вообще не выходит(((а как упростить формулу?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.05.2012, 20:24     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5
Еще ссылки по теме:

Вычислить приближенное значение бесконечной суммы, не используя стандартные функции, за исключением модуля / C++ для начинающих C++
Вычислить значение функции arcrgx+sinx на отрезке [ a, b ] с шагом h и точностью ε Поправить C++
Даны действительные числа x, ε (x ≠ 0,ε > 0). Найти сумму с точностью до ε C++

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

Или воспользуйтесь поиском по форуму:
ser4ega
27 / 27 / 3
Регистрация: 15.11.2009
Сообщений: 143
11.05.2012, 20:24     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5 #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
26
27
28
29
#include <stdio.h>
#include <stdlib.h>
#include <math.h>//подключаем библиотеку math.h, в ней лежит функция fabs, которую мы используем в своей программе
 
float Sin1(float x,float e)//объявляем функцию Sin1, возвращающую значение типа float, принимающую на вход два значения того же типа
{
      float slag,res,i=0;/*объявляем переменную slag - для хранения текущего слагаемого, res - 
      для хранения результата и вспомогательную i - для вычисления очередного слагаемого*/
      slag=x;//присваиваем переменной слаг её первое значение
      res=slag;//присваиваем переменной результата ее первое значение
      while(e<fabs(slag))//пока не достигнем требуемой точности
      {                  
               i++;
               slag*=((x*x)*(-1)/((2*i+1)*(2*i)));   //вычисляем новое слагаемое
                         res+=slag;//прибавляем его к результату
                         }
      return res;//возвращаем результат
      };
 
int main()
{
    float e=0.5;//это для вывода многих значений потребуется, чтобы потестить 
    //нашу функцию при изменяющемся параметре точности вычислений
    int i=0;//переменная счетчик
    for(i=0;i<101;i++){
  printf("%f %f\n",Sin1(3,e),e);e-=0.005;}//много раз выводим значение Sin1 с изменяющимся параметром точности e  
  system("PAUSE");  
  return 0;
}
Yandex
Объявления
11.05.2012, 20:24     Для функции вычислить ее приближенное значение с точностью ε=10^-3 в точке х=1,5
Ответ Создать тему
Опции темы

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