Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
DenProx
Техник
310 / 168 / 5
Регистрация: 09.10.2009
Сообщений: 3,057
#1

Программа вычисления значений функции y= sin(x) - C++

19.02.2012, 12:50. Просмотров 3904. Ответов 1
Метки нет (Все метки)

Доброго времени суток. У меня есть вот такая задачка:

Написать программу вычисления значений функции y = sin(x), с помощью разложения функции в степенной ряд . Сравнить полученные значения с точными (вычисленными с помощью библиотечной функции). Вычисление синуса по формуле оформить в виде функции с двумя параметрами: значением 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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <math.h>
 
using namespace std;
 
double fmysin(double x, double eps)
{
double mysin, An;
int i, maxDop = 50; //номер члена ряда и его MAX допустимое значение
 
    mysin = x;
    An = x;
 
    for (i = 0; i < maxDop; i++) {
    if (abs(An) >= eps) {
        An = -An*x*x / ((2*i+2)*(2*i+3));
        mysin += An;
    }
    }
return(mysin);
}
 
void main()
{
double x, xn, x0, eps;
double Pi = 3.141592;
double bsin, msin;
 
    cout<<"Press X = "; cin>>xn;
 
    x = xn * (Pi/180);
 
    x0 =x;
 
    bsin = sin(x0);
 
    printf("Sin(%g) = %.10f",xn, bsin);
    
    printf("\n\nPress Eps for MySin: "); cin>>eps;
    
    msin = fmysin(x,eps);
    printf("\nMySin(%g) = %.10f", xn, msin);
 
 
 
    if (bsin > msin) {
        cout<<"\n\nSin("<<xn<<") > MySin("<<xn<<")";
    }
    else {
    cout<<"\n\nSin("<<xn<<") < MySin("<<xn<<")";
    }
 
 
    cout<<"\n\n";
    system("pause");
}

Вопрос такой) В задании требуется учесть относительную погрешность, а я решил с абсолютной... не подскажите как должно быть? Знаю только что относительная погрешность, это отношение приближенного числа к модулю абсолютной, вроде так... но как в программе реализовать, не могу понять.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.02.2012, 12:50
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программа вычисления значений функции y= sin(x) (C++):

программа вычисления наибольшего из значений функции - C++
Мне дана такая задача: написать программу вычисления наибольшего из значений функции y1=x²+1, y2=7-x² , y3=x+1 для любого х я написала...

Программа для вычисления значений функции заданной рядом - C++
Написать программу для вычисления значения функции, заданной с помощью ряда. Вычисление ряда проводить до условия минимизации значения...

Программа для вычисления значений функции F(x) на отрезке [a,b] с шагом h (Dev-C++) - C++
F(x)=7{sin}^{2}x-\frac{1}{2}cosx a, b, h - вводит пользователь. Результат выводится в таблице. Первый столбец - значение аргумента,...

вычисления значения функции y=sin(n*x)-cos(n/x) - C++
Помогите нужно срочно очень=), Задание:составить программу вычисления значения функции y=sin(n*x)-cos(n/x) если n запрашивается, а x...

Исправить ошибку. Программа для вычисления y=sin(f(x) если - C++
y=sin(f(x)) если f(x)= \begin{cases}\sqrt{a+b} * sin^2(x) &amp; \text{ , } x \gt 2 \\ \ln \mid (x/(a*b))\mid &amp; \text{ , } x \le...

Программа для вычисления значения выражения. sin(num1)+nem2... - C++
Помогите написать программу для решения следующей задачи: На входе два вещественных числа num1 и num2. Напишите программу для...

1
Toshkarik
1147 / 864 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
19.02.2012, 16:01 #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
#include <iostream>
#include <cstdlib>
#include <cmath>
 
long double fact( const unsigned int a ) {
    long double temp = 1;
 
    for ( unsigned int i = 2; i <= a; i++ )
    temp *= i;
 
    return temp;
}
 
double fSinX( const double x, const unsigned int precision ) {
    double tmp = x;
 
    for ( unsigned int i = 3, n = 1; n < precision; i += 2, n++ )
    tmp += ( i % 2 ? -( std::pow( x, i ) / fact( i ) ) : ( std::pow( x, i ) / fact( i ) ));
 
    return tmp;
}
 
int main( int argc, char** argv ) {
 
    std::cout << fSinX( .5, 500 ) << std::endl; //своя функция
    std::cout << std::sin( .5 ) << std::endl; //библиотечная функция
 
    std::cout << std::endl;
    std::system( "pause" );
    return 0;
}
PS: на функцию не обращайте внимания, можно ее и проще сделать, без факториала думаю, забыл уже все. Но суть в том что бы передавать в функцию значение X и собственно нужную точность. А потом просто сравнить свою функцию с библиотечной ( из cmath ).

Добавлено через 16 минут
Вот так думаю лучше будет.
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
#include <iostream>
#include <cstdlib>
#include <cmath>
 
long double fact( const unsigned int a ) {
    long double temp = 1;
 
    for ( unsigned int i = 2; i <= a; i++ )
    temp *= i;
 
    return temp;
}
 
double fSinX( const double x, const unsigned int precision ) {
    double tmp = 0;
 
    for ( unsigned int n = 0; n < precision; n++ )
    tmp += ( std::pow( -1., n ) / fact( 2 * n + 1 )) * std::pow( x, 2 * n + 1 );
 
    return tmp;
}
 
int main( int argc, char** argv ) {
 
    std::cout << fSinX( 2, 500 ) << std::endl; //своя функция
    std::cout << std::sin( 2 ) << std::endl; //библиотечная функция
 
    std::cout << std::endl;
    std::system( "pause" );
    return 0;
}
http://liveworkspace.org/code/2b910322d2f90d36daea9817901f9755
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.02.2012, 16:01
Привет! Вот еще темы с ответами:

Вывести в произвольный файл таблицу значений функции sin(x), cos(x), tg(x), ctg(x) - C++
Вывести в произвольный файл таблицу значений функции sin(x), cos(x), tg(x), ctg(x) на отрезке с шагом 0,1. Значения x печатать с одной...

Написать функцию и программу для ее проверки для вычисления функции sin(x) C++ - C++
Написать функцию и программу для ее проверки для вычисления функции sin(x).

Программа вычисления больших значений факториалов - C++
Нашёл интересную программу, которая может вычислять большие значения факториалов на pascale.Перевёл на C++ не работает. Может кто...

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


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

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

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