Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> разложение функции в степенной ряд (acos), разложение функции в степенной ряд (acos 
:(
    Опции темы
storyteller
Дата 10.12.2012, 20:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.12.2012

Репутация: нет
Всего: нет



Код

#include <stdio.h>
#include <math.h>
#include <iostream>
int main(void)
{
double Eps; // pogreshnost'
double An, Sum, f, x;
int n, Ndop=350;   // n-nomer chlena ryada;Ndop=max chislo takih chlenov
printf( "\ax="); //vvod x
scanf("%lf",&x);
printf( "\aEps=");  // vvod Eps
scanf("%lf",&Eps);
do
{
n = 0; An=x; Sum=An; //nach. znach. n,An i summi ryada
f=acos(x);
while( fabs(An) > Eps)
{ 
An =(3.14/2) - x + (An*(2*n+1)*(2*n+1)*x*x/((n+1)*(2*n+3)*(2*n-1)))); Sum += An; ++n;
if( n > Ndop)
break;
}
printf( "%f   ",x); printf( "%f   ",f); printf( "%f   ",Sum); printf( "%e   ",fabs(f-Sum)); printf( "%i   ",n);
} 
while(scanf("%lf",&x) != EOF);
return 0;
} 


формула:задание, разложение функции в степенной ряд (acos)
скарее всего,ошибка в функции. помогите,кто знает,как исправить плиз)
PM MAIL   Вверх
feodorv
Дата 10.12.2012, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
An =(3.14/2) - x + ...

Ну зачем же так-то? И почему 
Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
Sum=An; //nach. znach. n,An i summi ryada


Логичнее было бы 
Код
Sum = (3.1415926/2.) - x;
а затем
Код
Sum -= An;
(не суммирование!). И 
Код
An *= ...;
на каждом шаге.

Потом 
Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
n = 0
 При n=0 имеем тот самый x, который уже учли. Поэтому отсчитываем от n=1.

Ну и 
Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
(2*n+1)*(2*n+1)*x*x/((n+1)*(2*n+3)*(2*n-1))
 Что это? Откуда там (n+1)? Почему (2*n+3)*(2*n-1)???

Сравните:
Код

n = 1; An *= x*x*1*1 / (2 * 3);
n = 2; An *= x*x*3*3 / (4 * 5);
n = 3; An *= x*x*5*5 / (6 * 7);
n = 4; An *= x*x*7*7 / (8 * 9);
...




--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
storyteller
Дата 10.12.2012, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 10.12.2012

Репутация: нет
Всего: нет



свой вывод формулы делал на основе:
An+1=An*Tn => Tn=An+1/An
An+1 и An взято из задания

я что то не совсем понял,как можно более правильно заменить формулу? :(

другими словами,я не совсем понимаю,как вывести реккурентную формулу для arccos. 

Это сообщение отредактировал(а) storyteller - 10.12.2012, 21:45
PM MAIL   Вверх
feodorv
Дата 11.12.2012, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(storyteller @  10.12.2012,  22:43 Найти цитируемый пост)
An+1=An*Tn => Tn=An+1/An

И как из этого получается
Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
An =(3.14/2) - x + (An*(2*n+1)*(2*n+1)*x*x/((n+1)*(2*n+3)*(2*n-1))));

???

Пусть отсчёт для T(n) по n идёт от 0 (n=0,1,2,3,...). Но ведь тогда должно быть так:
Код

Sum = pi/2 - A(0) - A(1) - A(2) - A(3) - ...;
A(0) = x;
A(1) = A(0) * T(0);
A(2) = A(1) * T(1);
A(3) = A(2) * T(2);


Чему тогда равно T(n) в общем случае, если 
Код

n = 0; A(1) = A(0) * x*x*1*1 / (2 * 3);
n = 1; A(2) = A(1) * x*x*3*3 / (4 * 5);
n = 2; A(3) = A(2) * x*x*5*5 / (6 * 7);
n = 3; A(4) = A(3) * x*x*7*7 / (8 * 9);
...



Вот в этом коде 
Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
An =(3.14/2) - x + (An*(2*n+1)*(2*n+1)*x*x/((n+1)*(2*n+3)*(2*n-1))));
 первая часть 
Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
(3.14/2) - x
 всё таки относится к сумме:
Код
A(0) = x;
Sum = pi/2 - A(0);
 а вторая часть 
Цитата(storyteller @  10.12.2012,  21:27 Найти цитируемый пост)
An = (An*(2*n+1)*(2*n+1)*x*x/((n+1)*(2*n+3)*(2*n-1))));
 уже похожа на рекуррентное соотношение 
Цитата(storyteller @  10.12.2012,  22:43 Найти цитируемый пост)
An+1=An*Tn
 Числитель - правильный, знаменатель - совершенно не правильный.



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0467 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.