Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [С] Разложение в степенной ряд


Автор: Jony 15.10.2006, 16:06
Народ!!! Скоро сдавать задачи, а я не могу в них разобраться ... smile Помогите пож-ста! 
p.s. Код желательно на языке С с каментами smile СПС!

Задание
1. Cоставить два варианта программы:
•    в первом варианте программа выводит на экран данные о близости значений функции, вычисленные по стандартной программе, к значениям суммы ряда пока еще не отформатированные в виде красивой таблицы; значения x вводить с клавиатуры и заканчивать работу при вводе вместо значения x “конец файла” <Ctrl+Z>
•    во втором варианте - поочередно для каждого значения ар-гумента x от начального значения xo до конечного xk с ша-гом Δx – оформленные в виде красивой таблицы; границы xo, xk и шаг изменения аргумента Δx, а также значение точности вычислений ввести с клавиатуры и вывести в файл с результатами. 
2. В первом и втором вариантах программа должна сделать следую-щее: 
a) вычислять значения функции F(x) с помощью стандартной функции
b) вычислять приближенное значение функции с помощью раз-ложения в степенной ряд и определять n - число членов ряда, не-обходимое для получения этого значения с заданной точностью
c) печатать для каждого значения аргумента: 
•    значение функции F(x), вычисленное по стандартной про-грамме
•    приближенное значение функции
•    число членов ряда для достижения заданной точности
•    модуль разности между значением функции F(x) по стан-дартной программе и приближенным значением функции с помощью разложения в степенной ряд
Вычислить сумму ряда с двумя разными значениями точности, и напечатать две таблицы. Учесть, что при любом порядке суммы компьютер хранит 15 цифр мантиссы и в последней цифре врёт (за-дать точность так, чтобы обеспечить, например, 10 и 15 значащих цифр), сравнить таблицы результатов по числу членов ряда.

Комментарии к заданию
•    Величину n! называют “n-факториалом” и записывают
user posted image
•    При суммировании степенного ряда возникают следующие за-дачи:
упростить вычисления и свести их к простейшим операциям,
уменьшить число этих операций и время расчета,
уменьшить погрешность вычислений.
•    Для решения этих задач служит рекуррентная формула, позво-ляющая вычислить величину очередного члена ряда, исполь-зуя величину предыдущего. Рекуррентная формула имеет вид:    an+1=an Tn 
•    При суммировании бесконечного ряда Тейлора следует огра-ничиться конечным значением n. Для сходящегося ряда пре-дел  . Поэтому для любого положительного , начи-ная с некоторого n,    станет меньше  . 
•    чтоб избежать зацикливания n ограничивают неким Ng, на-пример, Ng=50. При n>Ng фиксируется аврия. Надо прове-рить, нет ли ошибки в формуле, алгоритме или программе; только если ошибок нет, можно увеличить Ng.
•    Программу следует реализовывать поэтапно 
Этап 1 – только вычисление по рекуррентной формуле при фик-сированном значении x, с записью данных для 3 графиков an(n), sum(n), постоянное F
Этап 2 – добавить цикл по x, посмотреть на числа будущей таб-лицы
Этап 3 – добавить форматирование  и красиво оформить таблицу

Вот вариант задания:
user posted image

Автор: Jony 15.10.2006, 20:29
Нашёл пример:

Код

#include <stdio.h>
#include <math.h>
int main(void)
{
double Eps = 1.0e-10; // методическая погрешность
double An, Sum, f, x;
int n, Ndop=150;   // номер члена ряда и его MAX допустимое значение
L1:printf( "\ax="); 
if(scanf("%lf",&x) == EOF)
return 0;
n = 0; An=x; Sum=An; //стартовые значения n, A0 и суммы ряда
f=sin(x); //эталон по стандартной программе
while( fabs(An) > Eps)
{
An = -An*x*x / ( (2*n+2)*(2*n+3) );    Sum += An; ++n;  
if( n > Ndop)
break;
}
printf( "x      F(x)      Row     n  | F(x) - Row|\n");
printf( "%f  %f  %f  %i %e\n",x,f,Sum,n,fabs(f - Sum));
goto L1;
} 


Автор: Jony 16.10.2006, 09:30
Неужели не осталось програмистов, способных решать задачи на С  smile  smile  Я же даже пример показал!  smile  Блин, ну помогите кто-нибудь уже 2 дня парюсь - нерешается!!!   smile  smile  smile 

Автор: Jony 23.10.2006, 21:11
Давайте решать вместе!!!  smile 

Автор: Jony 29.10.2006, 14:45
Спс. всем! Благодоря вашему огромному вниманию к данной теме и проявленому интересу - я нашёл правильное решение задачи.  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)