АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Программная часть аналогична программе, реализованной в среде Турбо Паскаль

Читайте также:
  1. II часть «Математическая статистика»
  2. II. Недвижимое и движимое имущество. Составная часть и принадлежность
  3. II. Практическая часть.
  4. II. Практическая часть.
  5. II. Теоретическая часть урока.
  6. III. ИНФОРМАЦИОННО-МЕТОДИЧЕСКАЯ ЧАСТЬ
  7. А. Основная часть
  8. Александр Хатыбов и Николай Левашов - слияние концепций. Часть 2. Мерность и октава
  9. Анализатор – это сложная нейродинамическая система, которая представляет собой афферентную часть рефлекторного аппарата.
  10. АНАЛИТИЧЕСКАЯ ЧАСТЬ
  11. Аналитическая часть.
  12. Аналитическая часть.

Текст программы:

unit main;

 

interface

 

uses

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

Dialogs, Grids, DBGrids, StdCtrls, ValEdit, ComCtrls;

 

type

TForm1 = class(TForm)

buttonStartIter: TButton;

editN: TEdit;

Label1: TLabel;

editEpsilon: TEdit;

Label2: TLabel;

results: TMemo;

gridA: TStringGrid;

gridB: TStringGrid;

startButtonZeidel: TButton;

procedure buttonStartIterClick(Sender: TObject);

procedure editNChange(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure startButtonZeidelClick(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

 

{Глобальные переменные}

var

Form1: TForm1;

a:array[1..100, 1..100] of real;

b:array[1..100] of real;

 

implementation

 

{$R *.dfm}

 

{Заполнение массивов данными из таблиц}

procedure getArrays;

var k,j,n:integer;

begin

n:=strtoint(Form1.editN.Text);

 

for k:=1 to n do for j:=1 to n do

begin

a[k,j]:=strtofloat(Form1.gridA.cells[k,j]);

b[j]:=strtofloat(Form1.gridB.cells[1,j]);

end;

end;

 

{Нумерация строк таблиц}

procedure drawNum;

var row: integer;

begin

for row:=1 to strtoint(Form1.editN.Text)+1 do

begin

Form1.gridA.Rows[row].Text:=inttostr(row);

Form1.gridB.Rows[row].Text:=inttostr(row);

end;

end;

 

{---------- Метод простой итерации ----------}

procedure TForm1.buttonStartIterClick(Sender: TObject);

var

x,y:array[1..100] of real;

alpha, s, eps: real;

I,j,k,n:integer;

begin

eps:=strtofloat(editEpsilon.Text);

n:=strtoint(editN.Text);

 

{Заполнение массивов входных данных}

getArrays;

 

alpha:=0;

alpha:=sqrt(alpha); i:=-1;

 

for k:=1 to n do for j:=1 to n do alpha:= alpha + sqr(a[k,j]);

 

if alpha<1 then

begin

for k:=1 to n do x[k]:= b[k];

 

repeat s:=0; i:=i+1;

for k:=1 to n do

begin y[k]:= b[k];

for j:=1 to n do

y[k]:=y[k] + a[k,j]*x[j];

s:= s+sqr(x[k]-y[k]);

end;

for k:=1 to n do x[k]:= y[k];

until sqrt(s)<eps*(1-alpha)/alpha;

 

{Добавление результата к текстовому компоненту}

results.Lines.Add('Итерационный процесс окончен. Число итераций = '+inttostr(i));

results.Lines.Add('Решение системы методом простой итерации:');

 

for k:=1 to n do

results.Lines.Add('x['+inttostr(k)+'] = '+floattostr(x[k]));

end

else

results.Lines.Add('Условие сходимости по евклидовой метрике не выполняется.');

 

{Добавление разделителя решений}

results.Lines.Add('-----------------');

end;

 

 

{---------- Метод Зейделя ----------}

procedure TForm1.startButtonZeidelClick(Sender: TObject);

var

x,y:array[1..100] of real;

alpha, s, eps, g: real;

I,j,k,n:integer;

begin

eps:=strtofloat(editEpsilon.Text);

n:=strtoint(editN.Text);

 

{Заполнение массивов входных данных}

getArrays;

 

alpha:=0;

 

for k:=1 to n do for j:=1 to n do alpha:= alpha + sqr(a[k,j]);

alpha:= sqrt(alpha); i:=-1;

 

if alpha<1 then

begin

for k:=1 to n do x[k]:= b[k];

repeat s:=0; i:=i+1;

for k:=1 to n do

begin g:= b[k];

for j:=1 to n do

g:= g + a[k,j]*x[j];

s:= s+sqr(x[k]- g);

x[k]:= g;

end;

until sqrt(s)<eps*(1-alpha)/alpha;

 

{Добавление результата к текстовому компоненту}

results.Lines.Add('Итерационный процесс окончен. Число итераций = '+inttostr(i));

results.Lines.Add('Решение системы методом Зейделя:');

 

for k:=1 to n do

results.Lines.Add('x['+inttostr(k)+'] = '+floattostr(x[k]));

end

else

results.Lines.Add('Условие сходимости по евклидовой метрике не выполняется.');

 

{Добавление разделителя решений}

results.Lines.Add('-----------------');

 

end;

 

{Изменение размерности матрицы}

procedure TForm1.editNChange(Sender: TObject);

var row,n:integer;

begin

{При вводе n изменяется количество строк в таблицах}

n:=strtoint(editN.Text)+1;

gridA.RowCount:=n;

gridB.RowCount:=n;

 

{Заполнение номеров строк}

drawNum();

end;

 

{Процедура, выполняющаяся при создании главного окна}

procedure TForm1.FormCreate(Sender: TObject);

begin

{Заголовки таблиц}

gridA.Rows[0].Text:='a';

gridB.Rows[0].Text:='b';

 

{Создание названий колонок таблиц}

gridA.Cols[1].Text:='a[1,#]';

gridA.Cols[2].Text:='a[2,#]';

gridA.Cols[3].Text:='a[3,#]';

 

gridB.Cols[1].Text:='b[#]';

 

drawNum();

end;

 

end.

 


1 | 2 | 3 | 4 | 5 | 6 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.008 сек.)