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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.89
хых
1 / 1 / 0
Регистрация: 02.11.2011
Сообщений: 9
#1

Вычислить значение arcsin x через разложение в ряд Тейлора - C++

08.11.2011, 17:29. Просмотров 7033. Ответов 11
Метки нет (Все метки)

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

Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 17:29     Вычислить значение arcsin x через разложение в ряд Тейлора
Посмотрите здесь:
C++ Вычислить и вывести значение функции через разложение в ряд Тейлора
Рекурсия. Найти значение функции через разложение в ряд Тейлора C++
Вычислить значение функции exp(x) с точностью 0.001 (разложение в ряд Тейлора) C++
C++ Как вычислить значение функции используя разложение cos в ряд Тейлора???
Вычислить значение е^х через разложение в ряд C++
Дано разложение функции в ряд Тейлора. Вычислить для значения x и точности Eps точное значение функции C++
Найти разложение в ряд arcsin(x) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
magirus
Супер-модератор
Эксперт по компьютерным сетямЭксперт Windows
26344 / 14646 / 821
Регистрация: 15.09.2009
Сообщений: 63,470
Записей в блоге: 69
08.11.2011, 17:55     Вычислить значение arcsin x через разложение в ряд Тейлора #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
http://rus.1september.ru/urok/
vetvet
08.11.2011, 18:04
  #3

Не по теме:

скорее даже так:
Помогите, кто-нибудь! Код проги есть на скрине, только не выводит до конца результат, который тоже есть на скрине. Формула, которую надо использовать, обведена красным.

diagon
08.11.2011, 18:22
  #4

Не по теме:

Лол, я помню как когда-то смеялся над картинкой, где блондинка фотографировала монитор. Но силуэт человека с фотоаппаратом на первых двух картинках - это нечто.

-=ЮрА=-
Заблокирован
Автор FAQ
09.11.2011, 11:26     Вычислить значение arcsin x через разложение в ряд Тейлора #5
хых, всё потому что в формуле неправильно домножаете
Показываю:
Берём 2 элемента a[n] и a[n + 1], найдём отношение a[n + 1]/a[n]
Приводя подобные получим
a[n + 1]/a[n] = n*pow((2*n + 1),2)*pow(x,2)/(n + 1)*(2*n + 3)*(2*n - 1)
Как видим отличается от вашего домножения и степень не куб а квадрат - интересно да?)
Ниже код и скрин работы алгоритма
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
double f(double x, double eps)
{
    double v, sum = x;
    long n = 1;
    double fn = pow(x,3)/2.0;
    while(eps < fabs(fn))
    {
        sum += fn;
        n   += 1;
        fn *= n*pow((2*n + 1),2)*pow(x,2);
        fn /= 1.0*(n + 1)*(2*n + 3)*(2*n - 1);
    }
    return sum;
}
 
int main()
{
    char sign[] = " ";
    double x, fx, dx = 0, xn = 0, xk = 0, eps = 0;
    printf("Enter xn : ");scanf("%lf",&xn);
    printf("Enter xk : ");scanf("%lf",&xk);
    printf("Enter dx : ");scanf("%lf",&dx);
    printf("Enter eps: ");scanf("%lf",&eps);
    printf("|-----------------------------------|\n");
    printf("|    x   |  f(x)  |  asin |(sin-f)/f|\n");
    printf("|-----------------------------------|\n");
    for(x = xn; x <= xk; x += dx)
    {
        fx = f(x,eps);
        if(x < 0)
            sign[0] = '\0';
        else
            sign[0] = ' ';
        printf("|%s%.4f |%s%.4f |%s%.4f|%s%.4f  |\n",
            sign,x,sign,fx,sign,asin(fx),sign,(sin(x) != 0 ? fabs(sin(x) - fx)/sin(x) : 0));
    }
    printf("|-----------------------------------|\n");
    printf("Press any key to continue\n");
    getch();
    return 0;
}
Миниатюры
Вычислить значение arcsin x через разложение в ряд Тейлора   Вычислить значение arcsin x через разложение в ряд Тейлора  
alexcoder
1462 / 676 / 88
Регистрация: 03.06.2009
Сообщений: 3,504
Завершенные тесты: 1
19.10.2013, 22:07     Вычислить значение arcsin x через разложение в ряд Тейлора #6
Извиняюсь за некропостинг, понадобился сабж, а в программе ошибки.
Вот исправленный вариант, может кому сгодится:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
double f(double x, double eps)
{
    double v, sum = x;
    long n = 1;
    double fn = pow(x,3)/6.0;
    while(eps < fabs(fn))
    {
        sum += fn;
        n   += 1;
        fn *= (2*n - 1)*(2*n - 1)*x*x;
        fn /= 2*n*(2*n + 1);
    }
    return sum;
}
 
int main()
{
    char sign[] = " ";
    double x, fx, dx = 0, xn = 0, xk = 0, eps = 0;
    printf("Enter xn : ");scanf("%lf",&xn);
    printf("Enter xk : ");scanf("%lf",&xk);
    printf("Enter dx : ");scanf("%lf",&dx);
    printf("Enter eps: ");scanf("%lf",&eps);
    printf("|-----------------------------------|\n");
    printf("|    x   |  f(x)  |  asin |(sin-f)/f|\n");
    printf("|-----------------------------------|\n");
    for(x = xn; x <= xk; x += dx)
    {
        fx = f(x,eps);
        if(x < 0)
            sign[0] = '\0';
        else
            sign[0] = ' ';
        printf("|%s%.4f |%s%.4f |%s%.4f|%s%.4f  |\n",
            sign,x,sign,fx,sign,asin(fx),sign,(sin(x) != 0 ? fabs(sin(x) - fx)/sin(x) : 0));
    }
    printf("|-----------------------------------|\n");
    printf("Press any key to continue\n");
    getch();
    return 0;
}
-=ЮрА=-
Заблокирован
Автор FAQ
19.10.2013, 23:26     Вычислить значение arcsin x через разложение в ряд Тейлора #7
alexcoder, жду пояснений по поводу вот этого
Цитата Сообщение от alexcoder Посмотреть сообщение
fn *= (2*n - 1)*(2*n - 1)*x*x;
* * * * fn /= 2*n*(2*n + 1);
вижу не умеешь находить рекурретный сомножитель...
alexcoder
1462 / 676 / 88
Регистрация: 03.06.2009
Сообщений: 3,504
Завершенные тесты: 1
19.10.2013, 23:32     Вычислить значение arcsin x через разложение в ряд Тейлора #8
Я не теоретик, вычислил подбором членов, но с таким множителем погрешность на интервале |x|<1 строго укладывается в eps. Можешь проверить.
-=ЮрА=-
Заблокирован
Автор FAQ
19.10.2013, 23:47     Вычислить значение arcsin x через разложение в ряд Тейлора #9
alexcoder, мне не зачем проверять у тебя написан лаг в рекуррентном сомножителе.
Хочешь юзай сой код только не пиши на коровьий кизяк - казинака.

Добавлено через 6 минут
Цитата Сообщение от alexcoder Посмотреть сообщение
Можешь проверить.
проверил
http://codepad.org/BnT4Yi4g
Enter xn : Enter xk : Enter dx : Enter eps: |-----------------------------------|
| x | f(x) | asin |(sin-f)/f|
|-----------------------------------|
| 0.0000 | 0.0000 | 0.0000| 0.0000 |
| 0.1000 | 0.1000 | 0.1002| 0.0017 |
| 0.2000 | 0.2013 | 0.2027| 0.0134 |
| 0.3000 | 0.3045 | 0.3094| 0.0304 |
| 0.4000 | 0.4107 | 0.4232| 0.0546 |
| 0.5000 | 0.5232 | 0.5506| 0.0913 |
| 0.6000 | 0.6431 | 0.6985| 0.1389 |
| 0.7000 | 0.7747 | 0.8862| 0.2025 |
| 0.8000 | 0.9253 | 1.1817| 0.2898 |
| 0.9000 | 1.1165 | nan| 0.4253 |
| 1.0000 | 1.4847 | nan| 0.7644 |
|-----------------------------------|
Press any key to continue
думаю дальнейшее дискутирование бессмыслено
Инна96
Заблокирован
19.10.2013, 23:54     Вычислить значение arcsin x через разложение в ряд Тейлора #10
Функция №3
Вложения
Тип файла: doc Lab_3_V2 (7).doc (85.0 Кб, 70 просмотров)
alexcoder
1462 / 676 / 88
Регистрация: 03.06.2009
Сообщений: 3,504
Завершенные тесты: 1
19.10.2013, 23:54     Вычислить значение arcsin x через разложение в ряд Тейлора #11
Молодец. А в моем варианте получилось так:
Dlya x=-0.900 do 0.910 s shagom 0.100 i tochnostyu 0.001

x n s f
--------------------------------------
-0.900 10 -1.116462 -1.119769
-0.800 6 -0.925271 -0.927295
-0.700 5 -0.774674 -0.775397
-0.600 4 -0.643082 -0.643501
-0.500 3 -0.523177 -0.523599
-0.400 2 -0.410667 -0.411517
-0.300 2 -0.304500 -0.304693
-0.200 2 -0.201333 -0.201358
-0.100 1 -0.100000 -0.100167
0.000 1 0.000000 0.000000
0.100 1 0.100000 0.100167
0.200 2 0.201333 0.201358
0.300 2 0.304500 0.304693
0.400 2 0.410667 0.411517
0.500 3 0.523177 0.523599
0.600 4 0.643082 0.643501
0.700 5 0.774675 0.775398
0.800 6 0.925271 0.927295
0.900 10 1.116462 1.119770
--------------------------------------
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main()
{
//описание переменных
    float x, s, f, x_nach, x_kon, delta_x, eps, temp;
    int n;
 
    printf("\nVvod ishodnix dannyh:\n");    //ввод исходных данных
    printf("\nx_nach=");                        
    scanf("%f", &x_nach);                               //начальное значение аргумента
    printf("\nx_kon=");                     
    scanf("%f", &x_kon);                                //конечное значение аргумента
    printf("\ndelta_x=");                       
    scanf("%f", &delta_x);                              //шаг изменения аргумента
    printf("\neps=");                       
    scanf("%f", &eps);                                  //точность вычислений
    
    //эхо-печать
    printf("\nDlya  x=%5.3f  do  %5.3f  s shagom  %5.3f  i tochnostyu  %5.3f\n", x_nach, x_kon, delta_x, eps);
 
    printf("\n   x      n         s            f");
    printf("\n--------------------------------------");
    
    x = x_nach;
    
    do              //внешний цикл - изменение аргумента
    {
        temp = pow(x,3)/6.0;    //первое слагаемое
        s = x;      //начальное значение суммы
        n = 1;      //количество итераций на каждом шаге
        f = asin(x);    //точное значение функции
        
            //внутренний цикл - вычисление суммы ряда
while (fabs(temp) > eps)
        {
            s += temp;  //очередная сумма
            
            n++;            //количество итераций   
            //очередное слагаемое
            temp *= (2*n - 1)*(2*n - 1)*x*x;
            temp /= 2*n*(2*n + 1);
    }
        
        printf("\n%5.3f     %d     %0.6f     %0.6f", x, n, s, f);
        
        x += delta_x;   //увеличение аргумента на шаг  delta_x
    }
    while (x <= x_kon);
    
    printf("\n--------------------------------------");
 
    getch();
    return 0;
}
Почему-то все работает. Можно называть это какашкой, можно вообще пост удалить, мне все равно. Но может кому-то понадобится. Дискуссию прекращаю.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.10.2013, 00:27     Вычислить значение arcsin x через разложение в ряд Тейлора
Еще ссылки по теме:
Вычислить арктангенс через разложение в ряде Тейлора C++
Разложение ряд в ряд Тейлора.Переделать программу C++
Найти значение функции через разложение в ряд C++
Вычислить функцию через ряд Тейлора C++
C++ Ряд Тейлора: Вычислить значение функции

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
20.10.2013, 00:27     Вычислить значение arcsin x через разложение в ряд Тейлора #12
Цитата Сообщение от alexcoder Посмотреть сообщение
Почему-то все работает.
а ещё http://www.cyberforum.ru/cgi-bin/latex.cgi?\alpha \approx sin(\alpha ) \approx tg(\alpha ) для малых углов.
Ещё раз привожу научнообоснованный код
http://codepad.org/CCTtwU2C
| x | f(x) | asin |(sin-f)|
|-----------------------------------|
|-0.9000 |-1.1165 |nan|0.3331 |
|-0.8000 |-0.9253 |-1.1817|0.2079 |
|-0.7000 |-0.7747 |-0.8862|0.1305 |
|-0.6000 |-0.6431 |-0.6985|0.0784 |
|-0.5000 |-0.5232 |-0.5506|0.0438 |
|-0.4000 |-0.4107 |-0.4232|0.0212 |
|-0.3000 |-0.3045 |-0.3094|0.0090 |
|-0.2000 |-0.2013 |-0.2027|0.0027 |
|-0.1000 |-0.1000 |-0.1002|0.0002 |
|-0.0000 |-0.0000 |-0.0000|0.0000 |
| 0.1000 | 0.1000 | 0.1002| 0.0002 |
| 0.2000 | 0.2013 | 0.2027| 0.0027 |
| 0.3000 | 0.3045 | 0.3094| 0.0090 |
| 0.4000 | 0.4107 | 0.4232| 0.0212 |
| 0.5000 | 0.5232 | 0.5506| 0.0438 |
| 0.6000 | 0.6431 | 0.6985| 0.0784 |
| 0.7000 | 0.7747 | 0.8862| 0.1305 |
| 0.8000 | 0.9253 | 1.1817| 0.2079 |
| 0.9000 | 1.1165 | nan| 0.3331 |
|-----------------------------------|
И прошу тебя alexcoder, не путать людей. Для некоторых функций подходит кусочно линейная аппроксимация, к примеру синус в полупериоде можно неплохо заменить параболой, но это же не значит что на всей числовой оси параболическая зависимость опишет синус одинаково хорошо. Считай что с отрабаоткой тебе просто повезло, но прошу не путай людей.

Добавлено через 1 минуту
При этом вот твои слова
Цитата Сообщение от alexcoder Посмотреть сообщение
Я не теоретик, вычислил подбором членов,
ну будь добр тогда обоснуй своё решение, если его обоснование будет научно обоснованным я возьму в работу именно твои идеи.
Yandex
Объявления
20.10.2013, 00:27     Вычислить значение arcsin x через разложение в ряд Тейлора
Ответ Создать тему
Опции темы

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