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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
DenProx
Техник
 Аватар для DenProx
306 / 164 / 4
Регистрация: 09.10.2009
Сообщений: 3,006
19.02.2012, 12:50     Программа вычисления значений функции y= sin(x) #1
Доброго времени суток. У меня есть вот такая задачка:

Написать программу вычисления значений функции y = sin(x), с помощью разложения функции в степенной ряд [IMG]http://s018.***********/i511/1202/93/fb8db7337173.jpg[/IMG] . Сравнить полученные значения с точными (вычисленными с помощью библиотечной функции). Вычисление синуса по формуле оформить в виде функции с двумя параметрами: значением 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");
}

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

C++ Вывести в произвольный файл таблицу значений функции sin(x), cos(x), tg(x), ctg(x)
программа вычисления наибольшего из значений функции C++
C++ Вычисления значений функции
C++ Программа для вычисления значения выражения. sin(num1)+nem2...
C++ Программа для вычисления значений функции F(x) на отрезке [a,b] с шагом h (Dev-C++)
программа которая строит график функции y=|x|sin x C++
Исправить ошибку. Программа для вычисления y=sin(f(x) если C++
C++ Программа вычисления больших значений факториалов

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
19.02.2012, 16:01     Программа вычисления значений функции y= sin(x) #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/2b9103...ea9817901f9755
Yandex
Объявления
19.02.2012, 16:01     Программа вычисления значений функции y= sin(x)
Ответ Создать тему
Опции темы

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