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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Посчитать сумму бесконечного ряда, с заданной точностью 
:(
    Опции темы
AL
Дата 4.12.2005, 03:01 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











arctan(x) = x - x^3/3 +x^5/5 - x^7/7 + ... (-1)^n * x^(2n+1)/(2n+1) ; верно при |x| <= 1

Задачку делаю в визуальном режиме. Delphi. Заданная точность 0.0001. вот код функции:

Код

  function CalcRow(X: Extended): Extended;
    var
      Y, Eps, S: Extended;
      m: SmallInt;
      n: Word;
    begin
      n := 1;
      S := X;
      Eps := 0.0001;
      while Abs(Y) > Eps do
        begin
          if (Odd(n) and (X>0)) or ((X mod 2 = 0) and (X<0)) then m:=-1
          else m:=1;
          Y := m*Exp((2*n+1) * Ln(Abs(X)))/(2*n+1);
          S := S + Y;
          Inc(n);
        end;
      Result := S;
    end;


Даже не запускается. Тут ещё фишка в том, что невозможно возводить отрицательное число в степень с помощью логрифма(именно поэтому там такое условие и переменная m и взят модуль)... Вообщем запутался я - помогите плз.
  Вверх
AL
Дата 4.12.2005, 03:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Там в 12 строке: n mod 2 - поправлял тут...
  Вверх
Mal Hack
Дата 4.12.2005, 04:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


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

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



Код
program sr;

{$APPTYPE CONSOLE}

uses
  SysUtils , Math;

var
 x , x0 , y , s , a , b , eps , r , sn , err : extended;
 z , n , i , st , j : integer;

begin

 write( 'Enter EPS: ' ); readln( eps );
 write( 'Enter X: ' ); readln( x0 );
 write( 'Enter N: ' ); readln( n );
 write( 'Enter J (ogranichenie iteraciy): ' ); readln( j );
{
 eps := 0.01;
 x0 := 2;
 n := 20;
}
 writeln;

 y := ln( x0 + sqrt( 1 + sqr( x0 ) ) );

 writeln( 'Y = ' , y : 8 : 4 , '   Formula: ln( x + ( 1 + x^2 ) ^ 1 / 2 ).' );

 writeln;

 z := 1;
 i := 2;
 a := 1;
 b := 1;
 r := x0;

 while ( abs( r ) > eps ) AND ( i - 1 < j ) do
  begin
   s := s + r;

   if i < n then
    sn := sn + r;

   st := 2 * i - 1;

   a := a * ( st - 2 );
   b := b * ( st - 1 );
   x := IntPower( x0 , st );

   z := z * ( -1 );

   r := z * a * x / b / st;
   Inc( i );
  end;

 if abs( r ) > eps then
  writeln( 'Tochnost'' ne dostignuta za ' , j , ' iteraciy.' );

 writeln( 'S := ' , s : 9 : 5 , ' pri EPS = ' , eps : 8 : 5 );
 writeln( 'S(' , n , ') := ' , sn : 9 : 5 );

 err := abs( ( y - s ) / y * 100 );

 writeln( 'Pogreshnost = ' , err : 8 : 2 , '%' );

 readln;
end.

PM ICQ   Вверх
AL
Дата 4.12.2005, 12:55 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Что-то у Вас код какой-то совсем неправильный. Начиная от того, что по условию |x| < 1 да и ответ выдаёт при x=1 около 0,88 - а должно быть 0,78... Раскаладывал это как многочлен по Горнеру - там разница на 3 знаке(0,785 и 0,783).

smile
  Вверх
AL
Дата 4.12.2005, 13:03 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ура! Заработало:

Код

  function CalcRow(X: Extended): Extended;
    var
      Y, Eps, S: Extended;
      m: SmallInt;
      n: Word;
    begin
      n := 1;
      S := 0;
      Eps := 0.0001;
      Y := X;
      while Abs(Y) > Eps do
        begin
          S := S + Y;
          if (Odd(n) and (X>0)) or ((n mod 2 = 0) and (X<0)) then m:=-1
          else m:=1;
          Y := m*Exp((2*n+1) * Ln(Abs(X)))/(2*n+1);
          Inc(n);
        end;
      Result := S;
    end;


Разница с формулой - на 5 знаке =) Всем спасибо.
  Вверх
AL
Дата 4.12.2005, 13:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ещё один вопрос кстати. У меня есть поле(Edit) - я туда ввожу число(X), нажимаю кнопку OK.
А ниже ещё 3 поля Edit, так вот в них ответы появляются только после того как я кликну на 1 из них, а хотелось бы сразу после нажатия Ok.
  Вверх
AL
Дата 4.12.2005, 13:25 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Естественно стояло onclick на поле, а не кнопку) Разобрался.
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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