0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
1

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

09.05.2012, 10:22. Показов 8963. Ответов 7
Метки нет (Все метки)

Для функции вычислить ее приближенное значение с точностью ε=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 минут
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.05.2012, 10:22
Ответы с готовыми решениями:

Вычислить приближенное значение функции y(x) при x=x0 c заданной точностью до ε разложив её на ряд Маклорена
Вычислить приближенное значение функции y(x) при x=x0 c заданной точностью до ε разложив её...

Вычислить приближенное значение функции y(x) при x=x0 c заданной точностью до ε разложив её на ряд Маклорена
Вычислить приближенное значение функции y(x) при x=x0 c заданной точностью до ε разложив её...

Даны числа ε>0 и x. Вычислить с точностью ε значение функции y:
Даны числа ε&gt;0 и x. Вычислить с точностью ε значение функции y: y=\sin...

Вычислить с заданной точностью ε значение функции Y для каждого из 20 значений Х
В общем задача такая: Вычислить с заданной точностью ε значение функции Y для каждого из 20...

7
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
09.05.2012, 12:04 2
Ну, как вариант, у вас переменная kf имеет тип int. В ней могут храниться значения от -32768 до 32767. Таким образом, 7! в нее еще влезет, а вот 9! уже никак.
А, и еще. Функция pow считает как e^(y*lnx), что не прибавляет ей точности. Для целых степеней будет лучше написать свою функцию возведения в степень, а для -1^k, наверное, лучше просто сделать условие if. Если k%2==0, то к сумме прибавляем этот член, иначе -- отнимаем.
А так вроде все правильно.

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

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


http://ru.wikipedia.org/wiki/Limits.h
0
267 / 256 / 23
Регистрация: 04.04.2012
Сообщений: 546
09.05.2012, 12:14 4
Угу... я, похоже, написал либо для Borland C++ 4.5, либо просто левый ресурс...
http://citforum.ru/programming... _017.shtml
0
0 / 0 / 0
Регистрация: 08.05.2012
Сообщений: 4
09.05.2012, 21:24  [ТС] 5
исправил!
Результат расчета с 9 членами ряда: 1
Точное значение ряда: 0,99749
Лучше чем 0.5 в погрешности,но видать опять где то что-то не так.

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

Добавлено через 21 час 38 минут
что-то вообще не выходит(((а как упростить формулу?
0
30 / 30 / 12
Регистрация: 15.11.2009
Сообщений: 148
11.05.2012, 20:24 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;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.05.2012, 20:24
Помогаю со студенческими работами здесь

Для функций, представленных ниже бесконечными рядами, вычислить их приближённые значения с точностью ε=10-3 в точке x=1,5.
задача находиться во вложенном документе,буду признателен если поможете решить задачу.

Для функций, представленных ниже бесконечными рядами, вычислить их приближённые значения с точностью ε=10-3 в точке x=1,5
Для функций, представленных ниже бесконечными рядами, вычислить их приближённые значения с...

Вычислить приближенное значение функции двух переменных в данной точке
Вычислить приближенное значение функции в точке А. 2+\arcsin (x/y) (0,04; 3,96)

Вычислить с точностью ε = 0.00001 значение функции корень из х
Привет. Подскажите, исправьте, не могу разобраться Imports System.Math Public Class Form1 ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru