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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Неправельний результат вычислений, Помогите найти ошибку ! 
:(
    Опции темы
Vinkel
Дата 5.6.2009, 21:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здарсте  smile 
Помогите найти ошибку собсвенно код 

Код

unit Kllas;

interface

uses Classes,Forms;

Type
 TEquation = class
    XNach, XCon, E,dh : Real;
    function Hord(xn,xk,e:real):real ;
    function Trapec(xn,xk,dh:real):real;
 end;

  var

  Equat: TEquation;

implementation

 //*****************************************************
function NEquat(x0:Real):real;
begin
  Result:=X0*X0*X0-sqrt(X0)-9.5;
end;

  //*****************************************************
function NIntegr(x:Real):real;
begin
  Result:=x*x*x-x;
end;
//*****************************************************
 function TEquation.Hord(xn,xk,e:real):real;
 Var x,y,x0,x1,y0,y1: real;
     ncycle: Integer;
 begin
   ncycle:=0; x0:=xn; x1:=xk; //инициализация
   repeat
     if ncycle>100 then Exit;
      inc(ncycle);
      y0:= NEquat(x0);
      y1:= NEquat(x1);
      x:=x0-y0*(x1-x0)/(y1-y0);
      y:= NEquat(x);        //текущее значение
      if y*y0<0 then   //знак функции изменился
        begin
          x1:=x;  y1:=y;
        end
      else
         begin
          x0:=x;  y0:=y;
        end;
   until abs(y)<e;
   Result:=x;
 end;
 //*****************************************************************
 function TEquation.Trapec(xn,xk,dh:real):real;   //трапец_ї
 Var xt,s: real;
 begin
   xt:=xn; s:=0;   //инициализация xt-текущее значение х; s-значение функции
   while xt<xk do
    begin
      s:=s+NIntegr(xt)+NIntegr(xt+dh); //суммируем значения функции на интервале
      xt:= xt + dh;     //делаем приращение аргумента
    end;
   Result:=s*dh/2;
 end;

end.




Код

{$R *.dfm}

procedure TForm1.BitBtn2Click(Sender: TObject);
begin
Form1.Close ;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
begin
AboutBox.ShowModal ;
end;

procedure TForm1.BitOKClick(Sender: TObject);
Var Rez : Real ;
begin
  Equat:= TEquation.Create;
   Equat.XNach:= StrToFloat(Form1.XnaC.Text);
  Equat.XCon:= StrToFloat(Form1.Xcon.Text);
  Equat.E:= StrToFloat(Form1.t.Text);
  Equat.dh:=StrToFloat (Form1.t.Text);
    Case Form1.RadioGroup1.ItemIndex of
   0: Rez:= equat.Hord(equat.XNach,equat.XCon,equat.E);
   2: Rez:= equat.Trapec(equat.XNach,equat.XCon,equat.dh);
     end ;
  Form1. List.Caption:= FloatToStr(Rez);
   Series1.AddXY(x, y);
end;

end .


Проблема в том что при виборе метода Трапецый я получила результат Равний 0 при любих значениях 
в тоже время при выборе метода хорд все ок в чем проблема? 
PM MAIL   Вверх
kami
Дата 5.6.2009, 22:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1806
Регистрация: 25.8.2007
Где: Санкт-Петербург

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



Цитата(Vinkel @  5.6.2009,  21:12 Найти цитируемый пост)

Код

Case Form1.RadioGroup1.ItemIndex of   
0: Rez:= equat.Hord(equat.XNach,equat.XCon,equat.E);   
2: Rez:= equat.Trapec(equat.XNach,equat.XCon,equat.dh);


Есть выбор радиокнопки 0 и радиокнопки 2. А 1 нету. Их действительно 3 штуки в RadioGroup?
PM MAIL WWW   Вверх
Vinkel
  Дата 5.6.2009, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Угу!

Добавлено @ 22:35
Исправела но по прежнему получаю 0

Это сообщение отредактировал(а) Vinkel - 5.6.2009, 22:40
PM MAIL   Вверх
Vinkel
Дата 5.6.2009, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Может виложить саму програму ?
PM MAIL   Вверх
Guedda
Дата 6.6.2009, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Подрывник
****


Профиль
Группа: Завсегдатай
Сообщений: 3137
Регистрация: 27.12.2005
Где: Ростов-на-Дону

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



Цитата(Vinkel @  5.6.2009,  23:56 Найти цитируемый пост)
Может виложить саму програму ?

Естественно, так будет проще. Это раз. А во-вторых, полностью описание задачи. А то гадать по коду времени нет.


--------------------
Ll 2
PM MAIL WWW ICQ Skype GTalk   Вверх
Курсант
Дата 6.6.2009, 12:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Задача функции Trapec у нее - вычисление интеграла функции на участке xn...xk приближенным методом (методом трапеций) с шагом dh...

Метод трапеций:

S = (f(xn) + f(xn+dh))*dh/2 + (f(xn+dh)+f(xn+2dh))*dh/2 ... и так до конца, в итоге выносим dh/2 за скобку и получаем

(f(xn) + 2*f(xn+dh) + 2*а(xn+dh+dh) + .... + 2*f(xk-dh) + f(xk)) * dh / 2 ...

Так что функция у нее реализована вроде бы правильно, ждем программку - может там чего напутано?

Добавлено через 11 минут и 45 секунд
Есть у меня подозрение, что Вы не понимаете разницы между методом хорд и методом трапеций smile По крайней мере яндекс про метод хорд в качестве вычисления интегралов ничего не знает, такчто скорее всего Вам надо поменять пределы интегрирования (XNach и XCon) и тогда интеграл методом трапеций получится ненулевым...

Подозреваю что выбор "метод хорд" и "метод трапеций" предполагает совершенно разные категории обработки функции... И если с методом хорд все Ok, это не значит что интеграл не может быть равен нулю..
PM ICQ Skype   Вверх
Курсант
Дата 6.6.2009, 12:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 338
Регистрация: 21.2.2009
Где: Балашиха или Воро неж

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



Что кстати и будет иметь место, если у Вас 

xk = - xn ... то есть если Вы интегрируете от -3 до 3 например и тому подобное...

И вообще, мне не понятно, эти две функции по задаче как то связаны между собой???

y = x^3 - корень( x ) - 9,5
и
y = x^3 - x

Очень странно... Кстати, для второй функции интегрирование и дает 0 в случае от xn = -a до xk = a ..

Это сообщение отредактировал(а) Курсант - 6.6.2009, 12:46
PM ICQ Skype   Вверх
Vinkel
Дата 6.6.2009, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Cпасибо нашла с ваше помощю косяк!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

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


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

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

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

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


 




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


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

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