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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.89
хых
1 / 1 / 0
Регистрация: 02.11.2011
Сообщений: 9
08.11.2011, 17:29     Вычислить значение arcsin x через разложение в ряд Тейлора #1
оригинал
памагите ктони буть код проги есть на скрине только не выводит до конца результат тоже есть на скрине формула каторую надо использовать обведена в красный
Миниатюры
Вычислить значение arcsin x через разложение в ряд Тейлора   Вычислить значение arcsin x через разложение в ряд Тейлора   Вычислить значение arcsin x через разложение в ряд Тейлора  

Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.11.2011, 17:29     Вычислить значение arcsin x через разложение в ряд Тейлора
Посмотрите здесь:

C++ Как вычислить значение функции используя разложение cos в ряд Тейлора???
Вычислить арктангенс через разложение в ряде Тейлора C++
C++ Вычисление функции через разложение в ряд (Ряд Тейлора)
C++ Ряд Тейлора: Вычислить значение функции
Дано разложение функции в ряд Тейлора. Вычислить для значения x и точности Eps точное значение функции C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
magirus
Супер-модератор
 Аватар для magirus
25495 / 14036 / 742
Регистрация: 15.09.2009
Сообщений: 59,764
Записей в блоге: 61
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
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,293
Завершенные тесты: 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
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,293
Завершенные тесты: 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 Кб, 66 просмотров)
alexcoder
1438 / 652 / 86
Регистрация: 03.06.2009
Сообщений: 3,293
Завершенные тесты: 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 через разложение в ряд Тейлора
Еще ссылки по теме:

Найти разложение в ряд arcsin(x) 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 через разложение в ряд Тейлора
Ответ Создать тему
Опции темы

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