Оптимизация многомерной нелинейной функции. Слепой поиск

Приложение

Листинг программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Spin, Grids, Buttons, Menus;

type

TForm1 = class(TForm)

GroupBox1: TGroupBox;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: T

Label;

ComboBox1: TComboBox;

Label7: TLabel;

Label8: TLabel;

Label9: TLabel;

ComboBox2: TComboBox;

Label10: TLabel;

Label11: TLabel;

ComboBox3: TComboBox;

Label12: TLabel;

Label13: TLabel;

GroupBox2: TGroupBox;

Label14: TLabel;

Label15: TLabel;

Label16: TLabel;

Label17: TLabel;

Label18: TLabel;

Label19: TLabel;

Label20: TLabel;

Label21: TLabel;

GroupBox3: TGroupBox;

SpinEdit9: TSpinEdit;

StringGrid1: TStringGrid;

GroupBox4: TGroupBox;

Label22: TLabel;

Label23: TLabel;

Label24: TLabel;

Label25: TLabel;

GroupBox5: TGroupBox;

SpinEdit10: TSpinEdit;

Edit1: TEdit;

Edit2: TEdit;

Edit3: TEdit;

Edit4: TEdit;

Edit5: TEdit;

Edit6: TEdit;

Edit7: TEdit;

Edit8: TEdit;

Edit9: TEdit;

Edit10: TEdit;

Edit11: TEdit;

MainMenu1: TMainMenu;

File1: TMenuItem;

Close1: TMenuItem;

N1: TMenuItem;

Label26: TLabel;

GroupBox6: TGroupBox;

SpeedButton1: TSpeedButton;

procedure FormCreate (Sender: TObject);

procedure SpeedButton1Click (Sender: TObject);

procedure Close1Click (Sender: TObject);

procedure N1Click (Sender: TObject);

private

{Private declarations}

public

{Public declarations}

end;

var

Form1: TForm1;

implementation

uses Math, Unit2;

{$R *.dfm}

procedure TForm1. FormCreate (Sender: TObject);

begin

// задаём названия заголовков грайда

StringGrid1. Cols[0].Text:='№ итер.';

StringGrid1. Cols[1].Text:='X1';

StringGrid1. Cols[2].Text:='X2';

StringGrid1. Cols[3].Text:='Значение функции';

StringGrid1. Cols[4].Text:='Попытка';

end;

procedure TForm1. SpeedButton1Click (Sender: TObject);

var I: Integer;

A, B, C, D, x11, x12, x21, x22, x1, x2, x1opt, x2opt, y, Yopt:real;

begin

// присваиваем для удобства значения переменных

A:=StrToFloat (Edit1. Text);

B:=StrToFloat (Edit2. Text);

C:=StrToFloat (Edit3. Text);

D:=StrToFloat (Edit4. Text);

x11:=StrToFloat (Edit5. Text);

x12:=StrToFloat (Edit6. Text);

x21:=StrToFloat (Edit7. Text);

x22:=StrToFloat (Edit8. Text);

// создаем в грайде строки

StringGrid1. RowCount:=SpinEdit9. Value+1;

for I:=1 to SpinEdit9. Value do

BEGIN

// получение случайных значений координат точки

{**************************************}

randomize;

x1:= (x12 – x11) *random+ x11;

x2:= (x22 – x21) *random+ x21;

{**************************************}

// вычисляем значение функции

if (ComboBox1. Text='-') and (ComboBox2. Text='-') and (ComboBox3. Text='-')

then

y:=A*(x1*x1*x1) – B*(x2*x2) – C*x1 – D*x2;

if (ComboBox1. Text='-') and (ComboBox2. Text='-') and (ComboBox3. Text='+')

then

y:=A*(x1*x1*x1) – B*(x2*x2) – C*x1 + D*x2;

if (ComboBox1. Text='-') and (ComboBox2. Text='+') and (ComboBox3. Text='-')

then

y:=A*(x1*x1*x1) – B*(x2*x2) + C*x1 – D*x2;

if (ComboBox1. Text='+') and (ComboBox2. Text='-') and (ComboBox3. Text='-')

then

y:=A*(x1*x1*x1) + B*(x2*x2) – C*x1 – D*x2;

if (ComboBox1. Text='+') and (ComboBox2. Text='+') and (ComboBox3. Text='-')

then

y:=A*(x1*x1*x1) + B*(x2*x2) + C*x1 – D*x2;

if (ComboBox1. Text='-') and (ComboBox2. Text='+') and (ComboBox3. Text='+')

then

y:=A*(x1*x1*x1) – B*(x2*x2) + C*x1 + D*x2;

if (ComboBox1. Text='+') and (ComboBox2. Text='+') and (ComboBox3. Text='+')

then

y:=A*(x1*x1*x1) + B*(x2*x2) + C*x1 + D*x2;

if (ComboBox1. Text='+') and (ComboBox2. Text='-') and (ComboBox3. Text='+')

then

y:=A*(x1*x1*x1) + B*(x2*x2) – C*x1 + D*x2;

// проверка номера итерации

if i=1 then

begin

x1opt:=x1;

x2opt:=x2;

Yopt:=y;

end

else

begin

if Yopt>y then

// выбираем следуещее более оптимальное значение

begin

x1opt:=x1;

x2opt:=x2;

Yopt:=y;

StringGrid1. Cells [4, i]:='УДАЧНАЯ';

end

else StringGrid1. Cells [4, i]:='неудачная';

end;

// добавляем данные в грайд

StringGrid1. Cells [0, i]:=inttostr(i);

StringGrid1. Cells [1, i]:=FloatToStrF (x1, ffFixed, 15, SpinEdit10. Value);

StringGrid1. Cells [2, i]:=FloatToStrF (x2, ffFixed, 15, SpinEdit10. Value);

StringGrid1. Cells [3, i]:=FloatToStrF (y, ffFixed, 15, SpinEdit10. Value);

END;

Edit9. Text:=FloatToStrF (x1opt, ffFixed, 15, SpinEdit10. Value);

Edit10. Text:=FloatToStrF (x2opt, ffFixed, 15, SpinEdit10. Value);

Edit11. Text:=FloatToStrF (Yopt, ffFixed, 15, SpinEdit10. Value);

end;

procedure TForm1. Close1Click (Sender: TObject);

begin

close;

end;

procedure TForm1.N1Click (Sender: TObject);

begin

Beep;

// показываем модально какое-нибудь окно о проге

form2. ShowModal;

end;

end.

Страница:  1  2  3  4 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы