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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С] Разложение в степенной ряд 
V
    Опции темы
Jony
Дата 15.10.2006, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Народ!!! Скоро сдавать задачи, а я не могу в них разобраться ... 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, 18:38
PM MAIL   Вверх
Jony
Дата 15.10.2006, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашёл пример:

Код

#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;
} 



Это сообщение отредактировал(а) alexeis1 - 24.10.2006, 01:04
PM MAIL   Вверх
Jony
Дата 16.10.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Неужели не осталось програмистов, способных решать задачи на С  smile  smile  Я же даже пример показал!  smile  Блин, ну помогите кто-нибудь уже 2 дня парюсь - нерешается!!!   smile  smile  smile 
PM MAIL   Вверх
Jony
Дата 23.10.2006, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Давайте решать вместе!!!  smile 
PM MAIL   Вверх
Jony
Дата 29.10.2006, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спс. всем! Благодоря вашему огромному вниманию к данной теме и проявленому интересу - я нашёл правильное решение задачи.  
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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