Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2012, 12:39   #1
Леонардо
Новичок
Джуниор
 
Регистрация: 20.04.2012
Сообщений: 2
По умолчанию Не могу разобраться в коде. Решить нелинейное уравнение методом половинного деления.

Ребят вот код задачи на Delphi "Решить нелинейное уравнение методом половинного деления"

по поводу задачи, она написана для решение Тестового примера: f (x) = x^3 − sin(x) + cos(x)

Код:
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;
 
type
  TForm1 = class(TForm)
    EquationSolveButton: TButton;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    procedure EquationSolveButtonClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
//описание заданной функции
function equation(x:extended):extended;
begin
result:=x*x*x-sin(x)+cos(x);
end;
//------------------------------------------------------------------
{****Решение произвольного нелинейного уравнения методом
половинного деления****}
 
procedure TForm1.EquationSolveButtonClick(Sender: TObject);
var
  x,error:array of double;
  x0,x1,eps:real;
  i,p:integer;
begin
 
  label4.Caption:='';
  label5.Caption:='';
 
 
  x0:=StrToFloat(edit1.Text);
  x1:=StrToFloat(edit2.Text);
  eps:=StrToFloat(edit3.Text);
 
 setlength(x,10000);
 setlength(error,10000);
 
  x[0]:=x0;
  i:=0;
 
  begin
 
    repeat
 
      i:=i+1;
      error[i]:=abs(equation(x[i-1]));
    until (error[i]<eps) or (i>9990);
 
    p:=i;
 
    label4.Caption:='x='+FloatToStrF(x[p],ffFixed,5,5);
    label5.Caption:='Число итераций равно'+IntToStr((p));
//================================
        x[1]:=x1;
 
      x[2]:=(x[0]+x[1])/2;
 
        i:=2;
 
        repeat
 
          if equation(x[i])*equation(x[i-1])<=0 then
            x[i+1]:=(x[i]+x[i-1])/2
          else
            if equation(x[i])*equation(x[i-2])<=0 then
              x[i+1]:=(x[i]+x[i-2])/2
            else
              if equation(x[i])*equation(x[i-3])<=0 then
                x[i+1]:=(x[i]+x[i-3])/2
              else
                x[i+1]:=(x[i]+x[i-4])/2;
 
          error[i]:=abs(x[i+1]-x[i]);
          i:=i+1;
 
        until (error[i-1]<2*eps) or (i>9990);
 
        p:=i;
 
        label4.Caption:='x='+FloatToStrF(x[p],ffFixed,5,5);
 
        label5.Caption:='Число итераций равно  '+IntToStr(p);
 
end
end;
end.
Объясните мне пожалуйста весь код, что-как считает, кто за что отвечает ...
Леонардо вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нелинейное уравнение методом хорд (подсказать) Swex Помощь студентам 4 25.03.2012 20:24
решение методом половинного деления MeVer1c Паскаль, Turbo Pascal, PascalABC.NET 0 01.03.2012 14:21
F(x) методом половинного деления akum905 Microsoft Office Excel 11 11.11.2011 18:37
проблема с методом половинного деления Baks1991 Помощь студентам 12 17.05.2011 10:24
как решить нелинейное уравнение методом простых итераций??? Bonifaciy Помощь студентам 3 13.11.2008 17:30