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

Вычислить функцию sqrt(), разложенную в ряд Тейлора - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.96
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
22.09.2009, 19:14     Вычислить функцию sqrt(), разложенную в ряд Тейлора #1
Дано вещественное число Х (|X|<1) и целое число N (>0). Найти значение выражения:
1+X/2-1*(X*X)/(2*4)+1*3*(X*X*X)/(2*4*6)-...+(pow(-1, N-1))*1*3*...*(2*N-3)*(pow(X, N))/(2*4*...*(2*N))
Полученное число является прилиженным значением функции sqrt(1+X)

нужно использовать оператор цикла for, начал работать, застрял именно на этом операторе...прошу помощи.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.09.2009, 19:14     Вычислить функцию sqrt(), разложенную в ряд Тейлора
Посмотрите здесь:

C++ Разложить функцию f (x) в ряд Тейлора
C++ Вычислить значение функции y, развив функцию ln(x) в ряд Тейлора
вычислить функцию с помощью разложения в ряд.(Ряд Тейлора) C++
C++ Вычислить значение выражения sqrt (2 + sqrt (2 + sqrt (2 ... sqrt2))), (n-слагаемых)
Протабулировать функцию (ряд Тейлора) С++ C++
C++ Ряд Тейлора: Вычислить значение функции
Дано натуральное число n. Вычислить sqrt(2+ sqrt(5 + sqrt(7...)) C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ёрик
46 / 46 / 2
Регистрация: 07.01.2009
Сообщений: 298
22.09.2009, 19:32     Вычислить функцию sqrt(), разложенную в ряд Тейлора #2
Это ряд получается?Можно найти только с относительной погрешностью
R0mm
Псевдо программист
 Аватар для R0mm
192 / 113 / 15
Регистрация: 19.09.2009
Сообщений: 303
22.09.2009, 19:55     Вычислить функцию sqrt(), разложенную в ряд Тейлора #3
for (A;B; C){
//тело цикла
}

где А - операторы, выполняющиеся 1 раз до начала цикла
В - логическое выражение - условие цикла
С - операторы, выполняющиеся каждый раз после тела цикла
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
22.09.2009, 20:45     Вычислить функцию sqrt(), разложенную в ряд Тейлора #4
Конечно приближенное значение - а его и нужно вычислить с опредленной заданной точностью.
Вот тут форумула для функции в более наглядном виде: http://ru.wikipedia.org/wiki/Ряд_Тейлора
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
22.09.2009, 20:58  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #5
Цитата Сообщение от R0mm Посмотреть сообщение
for (A;B; C){
//тело цикла
}

где А - операторы, выполняющиеся 1 раз до начала цикла
В - логическое выражение - условие цикла
С - операторы, выполняющиеся каждый раз после тела цикла
я это знаю но, не понимаю какие операторы мне подключить, и как всё это записать...вот поэтому я и обращаюсь к более опытным людям.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
22.09.2009, 21:07     Вычислить функцию sqrt(), разложенную в ряд Тейлора #6
Код
summa=1.0;
epsilon=0.0001;
for ( ; ; ) {
    t= <тут_вычисляем_одночлен_из_формулы>;
    summa+= t;
    if ( fabs(t)<epsilon ) { break; }
    /* тут переходим к следующему одночлену */
}
/* тут печатаем summa */
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
22.09.2009, 21:39  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #7
всё равно не понятно)) я ж только начинаю)) что за t, какая сумма, что за эпсилон? не могу никак понять, не могу я её написать!(
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
23.09.2009, 14:42  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #8
сдесь нужно делать методом ввода новой переменной, проблема в том, как записать вот это большое выражение...подскажите как это сделать.
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
23.09.2009, 17:51     Вычислить функцию sqrt(), разложенную в ряд Тейлора #9
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
/* Thread 52042 */
 
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
 
 
/********************************************************************/
#define EPSILON 0.00001
#define MAX_N   1000
 
 
/********************************************************************/
double fact( int n );
double f1( double x );
double f2( double x );
 
 
/********************************************************************/
int f2_count= 0;
 
 
/********************************************************************/
int main( int argc, char *argv[] ) {
 
double x, r1, r2;
 
 
argc--; argv++;
if ( argc != 1 ) {
    fprintf( stderr, "Usage: prog x\n" );
    exit( 2 );
}
x= atof( argv[0] );
r1= f1( x );
r2= f2( x );
printf( "%6s=%.10f\n", "x", x );
printf( "%6s=%.10f\n", "f1", r1 );
printf( "%6s=%.10f f2_count=%d\n", "f2", r2, f2_count );
printf( "%6s=%.10f\n", "diff", fabs( r1-r2 ) );
 
return 0;
 
} /* main() */
 
 
/********************************************************************/
double fact( int n ) {
 
int i;
double prod;
 
 
if ( n<=0 ) { return 1.0; }
prod= 1.0;
for ( i= n; i>=2; i-- ) {
    prod*= i;
}
return prod;
 
} /* fact() */
 
 
/********************************************************************/
double f1( double x ) {
 
return sqrt( 1+x );
 
} /* f1() */
 
 
/********************************************************************/
double f2( double x ) {
 
int i;
double sum, xn, t, f2n_fn2;
int n, sign;
 
 
if ( fabs(x)<1.0 ) {
} else {
    fprintf( stderr, "f2(): Invalid x=%f\n", x );
    exit( 1 );
}
 
sum= 1.0;
sign= 1;
xn= 1.0;
n= 1;
 
for ( ; ; ) {
    sign= -sign;
    f2n_fn2= 1.0;
    for ( i= 1; i<=n; i++ ) { f2n_fn2= f2n_fn2*(n+i)/i; }
    xn*= x;
 
    t= (sign*f2n_fn2*xn)/(1-2*n)/pow(4,n);
    sum+= t;
    if ( fabs(t)<EPSILON ) { break; }
 
    n++;
    if ( n>=MAX_N ) {
        fprintf( stderr, "f2(): n>MAX_N, n=%d\n", n );
        exit( 1 );
    }
}
 
f2_count= n;
return sum;
 
} /* f2() */
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
23.09.2009, 18:31  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #10
спасибо, но немогли бы вы подсказать, где сдесь кусочек с уравнением, просто в этой задаче вы использовали те функции, которые мы еще не изучали и поэтому меня очень загрузят( я хочу немного проще написать, мне нужно решить это уравнение при конкретном Х и при kонкретном N. Всё что мне нужно это : 1+X/2-1*(X*X)/(2*4)+1*3*(X*X*X)/(2*4*6)-...+(pow(-1, N-1))*1*3*...*(2*N-3)*(pow(X, N))/(2*4*...*(2*N)) Как записать троеточие?
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
23.09.2009, 18:46     Вычислить функцию sqrt(), разложенную в ряд Тейлора #11
Вроде как можно догадаться и так.
Вычисление одного члена ряда.
C
1
t= (sign*f2n_fn2*xn)/(1-2*n)/pow(4,n);
Интересно - какие функции ?
Тут кроме pow() & fabs() нет ничего.

Добавлено через 10 минут
при конкретном Х и при kонкретном N
Укажи этот конкретный X и конкретный N !

А если он у тебя не конкретный - то я уже все собственно написал.
Многоточие - c помощью цикла.
Я твою форумулу сильно не разглядывал - взял правильную формулу с wikipedia.
Лучше выложи формулу в виде картинки - чтобы сравнить.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
23.09.2009, 18:55  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #12
картинку не могу выложить, это задание у меня на листике, а скинуть никак не могу, то что я написал в начале-правильно, так и должно быть, это вроде не ряд тэйлора, нам учителя его как бы немного изменили... X и N должны воодится, тоесть scanf. кстати fabs() мы не не учили. и кстати,
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
Полученное число является прилиженным значением функции sqrt(1+X)
это ведь тож нужно для чегото?
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
23.09.2009, 19:02     Вычислить функцию sqrt(), разложенную в ряд Тейлора #13
fabs() мы не не учили
fabs(x) - это просто модуль вещественного числа.

X и N должны ввоодиться, тоесть scanf
В этом случае не следует говорить что у тебя кокретные X,N.
Они как раз не конкретные.

Похоже я неправильно понял задание. Нужно не посчитать сумму ряда, а просто посчитать сумму ряда для N-членов при заданном X.
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
23.09.2009, 19:11  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #14
посчитать значение данного выше выражения и всё, там нужно ввести одну дополнительную переменную для for и посчитать выражение
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
23.09.2009, 19:36     Вычислить функцию sqrt(), разложенную в ряд Тейлора #15
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
59
60
/* Thread 52042 */
 
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
 
 
/********************************************************************/
double calc_sum( double x, int n );
 
 
/********************************************************************/
int main( void ) {
 
int n;
double x, r1, r2;
 
 
printf( "Enter X N: " );
scanf( "%lf %d", &x, &n );
printf( "x=%.10f n=%d\n", x, n );
r1= sqrt( 1.0+x );
r2= calc_sum( x, n );
 
printf( "func()=%.20f\n", r1 );
printf( "sum=   %.20f\n", r2 );
printf( "diff=  %.20f\n", fabs(r1-r2) );
 
return 0;
 
return 0;
 
} /* main() */
 
 
/********************************************************************/
double calc_sum( double x, int n ) {
 
int i, j, sign;
double sum, p1, p2, t;
 
 
sum= 1.0;
sign= 1;
for ( i= 1; i<=n; i++ ) {
 
    p1= 1.0;
    for ( j= 1; j<=2*i-3; j+= 2 ) { p1*= j; }
 
    p2= 1.0;
    for ( j= 2; j<=2*i; j+= 2 ) { p2*= j; }
    
    t= sign*p1*pow(x,i)/p2;
    sum+= t;
 
    sign= -sign;
}
return sum;
 
} /* calc_sum() */
Добавлено через 14 секунд
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
59
60
/* Thread 52042 */
 
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
 
 
/********************************************************************/
double calc_sum( double x, int n );
 
 
/********************************************************************/
int main( void ) {
 
int n;
double x, r1, r2;
 
 
printf( "Enter X N: " );
scanf( "%lf %d", &x, &n );
printf( "x=%.10f n=%d\n", x, n );
r1= sqrt( 1.0+x );
r2= calc_sum( x, n );
 
printf( "func()=%.20f\n", r1 );
printf( "sum=   %.20f\n", r2 );
printf( "diff=  %.20f\n", fabs(r1-r2) );
 
return 0;
 
return 0;
 
} /* main() */
 
 
/********************************************************************/
double calc_sum( double x, int n ) {
 
int i, j, sign;
double sum, p1, p2, t;
 
 
sum= 1.0;
sign= 1;
for ( i= 1; i<=n; i++ ) {
 
    p1= 1.0;
    for ( j= 1; j<=2*i-3; j+= 2 ) { p1*= j; }
 
    p2= 1.0;
    for ( j= 2; j<=2*i; j+= 2 ) { p2*= j; }
    
    t= sign*p1*pow(x,i)/p2;
    sum+= t;
 
    sign= -sign;
}
return sum;
 
} /* calc_sum() */
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
23.09.2009, 19:47  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #16
спасибо, но не мог бы ты мне по больше обьяснить этот цикл, что в нём и как, ато я немного не понял, заранее спасибо
C++
1
2
3
4
5
6
7
8
9
10
11
12
for ( i= 1; i<=n; i++ ) {
 
        p1= 1.0;
        for ( j= 1; j<=2*i-3; j+= 2 ) { p1*= j; }
 
        p2= 1.0;
        for ( j= 2; j<=2*i; j+= 2 ) { p2*= j; }
        
        t= sign*p1*pow(x,i)/p2;
        sum+= t;
 
        sign= -sign;
odip
Эксперт C++
 Аватар для odip
7226 / 3288 / 59
Регистрация: 17.06.2009
Сообщений: 14,165
23.09.2009, 19:53     Вычислить функцию sqrt(), разложенную в ряд Тейлора #17
p1 == 1*3*...*(2*N-3)
p2 == 2*4*...*(2*N)
t == (pow(-1, N-1))*1*3*...*(2*N-3)*(pow(X, N))/(2*4*...*(2*N))
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.09.2009, 20:22     Вычислить функцию sqrt(), разложенную в ряд Тейлора
Еще ссылки по теме:

Протабулировать на заданном отрезке функцию, заданную разложением в ряд Тейлора C++
Разложить функцию sin(nx) в ряд Тейлора C++
C++ Написать функцию вычисления sin(x)/x разложением в ряд Тейлора
Разложить функцию в ряд Тейлора и построить график C++
Вычислить функцию через ряд Тейлора C++

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

Или воспользуйтесь поиском по форуму:
Bloodykeeper
This party getting crazy!
 Аватар для Bloodykeeper
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
23.09.2009, 20:22  [ТС]     Вычислить функцию sqrt(), разложенную в ряд Тейлора #18
спасибо, тема закрыта
Yandex
Объявления
23.09.2009, 20:22     Вычислить функцию sqrt(), разложенную в ряд Тейлора
Ответ Создать тему
Опции темы

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