РефератыИнформатика, программированиеРоРозрахунок норм вектору

Розрахунок норм вектору

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ "КПІ"


ФАКУЛЬТЕТ ПРИКЛАДНОЇ МАТЕМАТИКИ


Кафедра спеціалізованих комп’ютерних систем


КУРСОВА РОБОТА


з дисципліни "Технологія програмування"


Виконав: Семенякін Володимир


Постановка завдання

Розробити програму для розрахунку норм вектору, отриманому по наступній формулі:


, Де A, B, C - матриці й X, Y - вектори.


Теоретичні відомості


Для обрахунку заданої формули необхідно:


a) Написати процедуру[1]
множення матриці на матрицю.


b) Написати процедуру сумування матриць.


c) Написати процедуру віднімання векторів.


d) Написати функцію множення матриці на вектор


e) Написати функцію для обчислення евклідової норми вектора.


f) Написати функцію обчислення норми вектора


g) Написати функцію обчислення норми вектора


h) Створити зручний інтерфейс для користувача.


Множення матриць:



Звідки легко бачити, що при множені матриці розмірами NM
на матрицю розмірами МК
буде отримана матриця розміром NК.


Сумування матриць:



Легко бачити, що задана дія ніяк не впливає на розмірність результуючої матриці. Матриці, що сумуються, мають бути однакових розмінностей.


Множення матриці на вектор:


Аналогічно множенню матриці на матрицю. Другим операндом у такій ситуації виступає матриця розміром М1
. В результаті виникає матриця розміром N1
, або ж просто вектор з N
координатами.


Віднімання векторів:



Обчислення евклідової норми[2]
:


Відбувається за наступною формулою:



Частіше всього евклідова норма використовується для обчислення довжини вектора.


Норми й не потребують пояснення. Їх зміст у їх вигляді.


Обґрунтування доцільності використання модулів


Модулі дозволяють використання функцій, процедур й типів для роботи з матрицями і векторами у інших програмах. Отже модульне програмування додає універсальності.


Функції й процедури доцільні, коли виникає багаторазове повторення одних й тих же алгоритмів. Ця курсова робота - як раз той випадок.


Код програми

Код головної програми:


unit Unit1;


interface


uses


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


Dialogs, Grids, StdCtrls, ComCtrls, matrix, Menus;


type


TmatrEditor = class (TForm)


Label1: TLabel;


Button2: TButton;


operList: TListView;


l2: TLabel;


objInf: TGroupBox;


matrViev: TStringGrid;


vectViev: TStringGrid;


itemNomb: TEdit;


infLab: TLabel;


Button3: TButton;


GroupBox2: TGroupBox;


Label2: TLabel;


vectorRB: TRadioButton;


matrixRB: TRadioButton;


l4: TLabel;


GroupBox3: TGroupBox;


Button1: TButton;


Button4: TButton;


TEST: TButton;


MainMenu1: TMainMenu;


File1: TMenuItem;


Save1: TMenuItem;


Open1: TMenuItem;


Exit1: TMenuItem;


opViev: TEdit;


GroupBox1: TGroupBox;


plusA: TRadioButton;


minusA: TRadioButton;


multA: TRadioButton;


Button5: TButton;


Button7: TButton;


Button6: TButton;


OpenD: TOpenDialog;


saveD: TSaveDialog;


Label3: TLabel;


procedure Button2Click (Sender: TObject);


procedure FormCreate (Sender: TObject);


procedure matrVievClick (Sender: TObject);


procedure TESTClick (Sender: TObject);


procedure Button1Click (Sender: TObject);


procedure operListClick (Sender: TObject);


procedure vectVievClick (Sender: TObject);


procedure vectorRBClick (Sender: TObject);


procedure matrixRBClick (Sender: TObject);


procedure Button4Click (Sender: TObject);


procedure itemNombKeyUp (Sender: TObject; var Key: Word;


Shift: TShiftState);


procedure operListDblClick (Sender: TObject);


procedure Button5Click (Sender: TObject);


procedure Button6Click (Sender: TObject);


procedure Button7Click (Sender: TObject);


procedure Save1Click (Sender: TObject);


procedure Open1Click (Sender: TObject);


procedure itemNombChange (Sender: TObject);


private


{ Private declarations }


public


{ Public declarations }


end;


const maxAct=15;


type matrRec = record


strName: string [20];


case typeOf: (vect,matr) of


matr: (mt: matrix_);


vect: (vt: vector);


end;


matrRecLink = ^matrRec;


var


matrEditor: TmatrEditor;


nowCharCode: byte;


nowMatr: matrix_;


nowVect: vector;


mainList: TList;


nowEl: matrRecLink;


i,j: size;


nowItem: integer;


fl: boolean;


actionArr: array [1. maxAct] of 0.5;


indexArr: array [1. maxAct+1] of 0.60;


sizeOfAction,act: 0.2;


opers: array [1.2] of matrRecLink;


filePath: string [255];


f: file of matrRec;


newItem: TListItem;


implementation


uses Unit3;


{$R *. dfm}


procedure TmatrEditor. Button2Click (Sender: TObject);


begin


newItem: =operList. Items. Add;


newItem. Caption: =char (nowCharCode);


newItem. SubItems. Add ('Vector');


// ------------------------


new (nowEl);


nowEl^. typeOf: =vect;


ziroVect (nowEl^. vt);


nowEl^. strName: =char (nowCharCode);


mainList. Add (nowEl);


// ------------------------


nowCharCode: =nowCharCode+1;


// ------------------------


operList. Enabled: =true;


end;


procedure TmatrEditor. FormCreate (Sender: TObject);


var newItem: TListItem;


begin


mainList: =TList. Create;


nowCharCode: =65;


fl: =true;


sizeOfAction: =0;


end;


procedure TmatrEditor. matrVievClick (Sender: TObject);


begin


itemNomb. Text: =matrViev. Cells [matrViev. Col,matrViev. Row];


infLab. caption: =matrRecLink (mainList [nowItem]) ^. strName+' ['+IntToStr (matrViev. Col+1) +'] ['+IntToStr (matrViev. Row+1) +'] ';


end;


procedure TmatrEditor. TESTClick (Sender: TObject);


begin


transp (nowMatr);


for i: =1 to nmax do


for j: =1 to nmax do


begin


matrViev. Cells [i-1,j-1]: =FloatToStr (nowMatr [i] [j]);


end;


end;


procedure TmatrEditor. Button1Click (Sender: TObject);


var nowRand: real;


begin


if matrRecLink (mainList [nowItem]) ^. typeOf = Matr then


for i: =1 to nmax do


for j: =1 to nmax do


begin


nowRand: = (1-2*random (2)) *random (100) /10;


matrViev. Cells [i-1,j-1]: =FloatToStr (nowRand);


matrRecLink (mainList [nowItem]) ^. mt [i] [j]: =nowRand;


end;


// ---------------------


if matrRecLink (mainList [nowItem]) ^. typeOf = Vect then


for i: =1 to nmax do


begin


nowRand: = (1-2*random (2)) *random (100) /10;


vectViev. Cells [i-1,0]: =FloatToStr (nowRand);


matrRecLink (mainList [nowItem]) ^. vt [i]: =nowRand;


end;


end;


procedure TmatrEditor. operListClick (Sender: TObject);


begin


if nowItem<>-1 then


begin


objInf. Enabled: =true;


nowItem: =operList. ItemIndex;


if matrRecLink (mainList [nowItem]) ^. typeOf=vect then


begin


l4. caption: ='vect';


for i: =1 to nmax do


for j: =1 to nmax do


matrViev. Cells [i-1,j-1]: ='';


for i: =1 to nmax do vectViev. Cells [i-1,0]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. vt [i]);


vectViev. Color: =clWindow;


vectViev. Ctl3D: =true;


vectViev. Enabled: =true;


matrViev. Color: =clScrollBar;


matrViev. Ctl3D: =false;


matrViev. Enabled: =false;


// -----------------------


vectorRB. Checked: =true;


itemNomb. Text: =vectViev. Cells [0,0];


end;


// ==================================================


if matrRecLink (mainList [nowItem]) ^. typeOf=matr then


begin


l4. caption: ='matr';


for i: =1 to nmax do vectViev. Cells [i-1,0]: ='';


for i: =1 to nmax do


for j: =1 to nmax do


matrViev. Cells [i-1,j-1]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. mt [i] [j]);


vectViev. Color: =clScrollBar;


vectViev. Ctl3D: =false;


vectViev. Enabled: =false;


matrViev. Color: =clWindow;


matrViev. Ctl3D: =true;


matrViev. Enabled: =true;


// -----------------------


matrixRB. Checked: =true;


itemNomb. Text: =matrViev. Cells [0,0];


end;


end;


end;


procedure TmatrEditor. vectVievClick (Sender: TObject);


begin


itemNomb. Text: =vectViev. Cells [vectViev. Col,0];


infLab. caption: =matrRecLink (mainList [nowItem]) ^. strName+' ['+IntToStr (vectViev. Col+1) +'] ';


end;


procedure TmatrEditor. vectorRBClick (Sender: TObject);


begin


if matrRecLink (mainList [nowItem]) ^. typeOf = matr then


if MessageDlg ('All matrix information will be lost. Change to vector? ', mtWarning, [mbYes, mbNo], 0) = mrYes then


begin


new (nowEl);


nowEl^. typeOf: =vect;


ziroVect (nowEl^. vt);


nowEl^. strName: =matrRecLink (mainList [nowItem]) ^. strName;


for i: =1 to nmax do


for j: =1 to nmax do


matrViev. Cells [i-1,j-1]: ='';


for i: =1 to nmax do vectViev. Cells [i-1,0]: =FloatToStr (nowEl^. vt [i]);


dispose (mainList [nowItem]);


mainList [nowItem]: =nowEl;


// -----------------------------


vectViev. Color: =clWindow;


vectViev. Ctl3D: =true;


vectViev. Enabled: =true;


matrViev. Color: =clScrollBar;


matrViev. Ctl3D: =false;


matrViev. Enabled: =false;


// ------------------------------


operList. Items [nowItem]. SubItems [0]: ='Vector';


end;


end;


procedure TmatrEditor. matrixRBClick (Sender: TObject);


begin


if matrRecLink (mainList [nowItem]) ^. typeOf = vect then


if MessageDlg ('All vector information will be lost. Change to matrix? ', mtWarning, [mbYes, mbNo], 0) = mrYes then


begin


new (nowEl);


nowEl^. typeOf: =matr;


ziroMatr (nowEl^. mt);


nowEl^. strName: =matrRecLink (mainList [nowItem]) ^. strName;


for i: =1 to nmax do vectViev. Cells [i-1,0]: ='';


for i: =1 to nmax do


for j: =1 to nmax do


matrViev. Cells [i-1,j-1]: =FloatToStr (nowEl^. mt [i] [j]);


dispose (mainList [nowItem]);


mainList [nowItem]: =nowEl;


// --------------------------------


vectViev. Color: =clScrollBar;


vectViev. Ctl3D: =false;


vectViev. Enabled: =false;


matrViev. Color: =clWindow;


matrViev. Ctl3D: =true;


matrViev. Enabled: =true;


// ------------------------------


operList. Items [nowItem]. SubItems [0]: ='Matrix';


end;


end;


procedure TmatrEditor. Button4Click (Sender: TObject);


begin


if matrRecLink (mainList [nowItem]) ^. typeOf = Vect then


begin


ziroVect (matrRecLink (mainList [nowItem]) ^. vt);


for i: =1 to nmax do


vectViev. Cells [i-1,0]: ='0';


end;


// ---------------------


if matrRecLink (mainList [nowItem]) ^. typeOf = Matr then


begin


ziroMatr (matrRecLink (mainList [nowItem]) ^. mt);


for i: =1 to nmax do


for j: =1 to nmax do


matrViev. Cells [i-1,j-1]: ='0';


end;


end;


procedure TmatrEditor. itemNombKeyUp (Sender: TObject; var Key: Word;


Shift: TShiftState);


var saveVal: real;


begin


if (matrRecLink (mainList [nowItem]) ^. typeOf=vect) and not (Key=46) then


begin


try


// saveVal: =matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col];


matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col]: =StrToFloat (itemNomb. text);


saveVal: =matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col];


vectViev. Cells [vectViev. Col,0]: =itemNomb. text;


except


on EConvertError do


begin


matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col]: =saveVal;


text: =FloatToStr (saveVal);


showMessage ('Put only number! ');


end;


end;


end;


{if matrRecLink (mainList [nowItem]) ^. typeOf=matr then


begin


saveVal: =matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col] [matrViev. Row];


matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col] [matrViev. Row]: =StrToFloatDef (text,saveVal);


text: =FloatToStr (matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col] [matrViev. Row]);


matrViev. Cells [vectViev. Col,vectViev. Row]: =text;


end; }


end;


procedure TmatrEditor. operListDblClick (Sender: TObject);


begin


if (nowItem<>-1) and (sizeOfAction<2) then


begin


if length (opViev. Text) >0 then


begin


if multA. Checked then begin


opViev. Text: =opViev. text+'x'; act: =0; end;


if minusA. Checked then begin


opViev. Text: =opViev. text+'-'; act: =1; end;


if plusA. Checked then begin


opViev. Text: =opViev. text+'+'; act: =2; end;


end;


new (opers [sizeOfAction+1]);


opers [sizeOfAction+1] ^. typeOf: =matr;


for i: =1 to nmax do


for j: =1 to nmax do


opers [sizeOfAction+1] ^. mt [i] [j]: =matrRecLink (mainList [nowItem]) ^. mt [i] [j];


sizeOfAction: =sizeOfAction+1;


opViev. Text: =opViev. text+matrRecLink (mainList [nowItem]) ^. strName;


end;


end;


procedure TmatrEditor. Button5Click (Sender: TObject);


var newItem: TListItem;


begin


// -----------------------------------------


if fl then begin


for nowCharCode: =65 to 67 do


begin


newItem: =operList. Items. Add;


newItem. Caption: =char (nowCharCode);


newItem. SubItems. Add ('Matrix');


// ------------------------

r />

new (nowEl);


nowEl^. typeOf: =matr;


ziroMatr (nowEl^. mt);


nowEl^. strName: =char (nowCharCode);


mainList. Add (nowEl);


// ------------------------


operList. Enabled: =true;


end;


// =========================================


for nowCharCode: =88 to 89 do


begin


newItem: =operList. Items. Add;


newItem. Caption: =char (nowCharCode);


newItem. SubItems. Add ('Vector');


// ------------------------


new (nowEl);


nowEl^. typeOf: =vect;


ziroVect (nowEl^. vt);


nowEl^. strName: =char (nowCharCode);


mainList. Add (nowEl);


// ------------------------


operList. Enabled: =true;


end;


fl: =false;


end;


ziroMatr (nowMatr);


// ==================================================


writeMatr (nowMatr,matrRecLink (mainList [0]) ^. mt);


multMatrToMatr (nowMatr,matrRecLink (mainList [1]) ^. mt,nowMatr);


sumMatr (nowMatr,matrRecLink (mainList [2]) ^. mt,nowMatr);


// --------------------------------------------------


writeVect (nowVect,matrRecLink (mainList [3]) ^. vt);


decVect (nowVect,matrRecLink (mainList [4]) ^. vt,nowVect);


// --------------------------------------------------


multMatrToVect (nowMatr,nowVect,nowVect);


// --------------------------------------------------


for i: =1 to nmax do rezults. rezVect. Cells [i-1,0]: =FloatToStr (nowVect [i]);


rezults. visible: =true;


rezults. Left: =331;


rezults. Top: =222;


// ------------------------


rezults. norm1. Text: =FloatToStr (longOfVect (nowVect));


rezults. norm2. Text: =FloatToStr (absSum (nowVect));


rezults. norm3. Text: =FloatToStr (absMax (nowVect));


end;


procedure TmatrEditor. Button6Click (Sender: TObject);


begin


opViev. Text: ='';


dispose (opers [1]);


dispose (opers [2]);


sizeOfAction: =0;


end;


procedure TmatrEditor. Button7Click (Sender: TObject);


begin


if sizeOfAction=2 then


begin


// ziroMatr (nowMatr);


// ==================================================


// writeMatr (nowMatr,opers [1] ^. mt);


multMatrToMatr (opers [1] ^. mt,opers [2] ^. mt,nowMatr);


for i: =1 to nmax do


for j: =1 to nmax do


rezults. rezMatr. Cells [i-1,j-1]: =FloatToStr (nowMatr [i] [j]);


end;


rezults. visible: =true;


rezults. Left: =331;


rezults. Top: =222;


// -------------------


opViev. Text: ='';


dispose (opers [1]);


dispose (opers [2]);


sizeOfAction: =0;


end;


procedure TmatrEditor. Save1Click (Sender: TObject);


var writeRec: matrRec; var i: integer;


begin


fl: =saveD. Execute;


if fl then


begin


filePath: =saveD. FileName;


assignFile (f,filePath);


rewrite (f);


for i: =0 to mainList. Count-1 do


begin


writeRec: =matrRecLink (mainList [i]) ^;


write (f,writeRec);


end;


end;


end;


procedure TmatrEditor. Open1Click (Sender: TObject);


var writeRec: matrRec;


begin


fl: =openD. Execute;


operList. Clear;


mainList. Clear;


if fl then


begin


filePath: =openD. FileName;


assignFile (f,filePath);


reset (f);


while not (eof (f)) do


begin


new (nowEl);


read (f,nowEl^);


mainList. Add (nowEl);


newItem: =operList. Items. Add;


newItem. Caption: =nowEl^. strName;


if nowEl^. typeOf=vect then


newItem. SubItems. Add ('Vector')


else


newItem. SubItems. Add ('Matrix');


if operList. Items. Count>0 then


nowItem: =0;


operList. Enabled: =true;


end;


end;


end;


procedure TmatrEditor. itemNombChange (Sender: TObject);


var saveVal: real;


begin


if matrRecLink (mainList [nowItem]) ^. typeOf=matr then


begin


saveVal: =matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1];


try


matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1]: =StrToFloat (itemNomb. Text);


matrViev. Cells [matrViev. Col,matrViev. Row]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1]);


except


on EConvertError do begin


matrRecLink (mainList [nowItem]) ^. mt [matrViev. Col+1,matrViev. Row+1]: =saveVal;


matrViev. Cells [matrViev. Col,matrViev. Row]: =FloatToStr (saveVal);


itemNomb. Text: =FloatToStr (saveVal);


end;


end;


end;


if matrRecLink (mainList [nowItem]) ^. typeOf=vect then


begin


saveVal: =matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1];


try


matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1]: =StrToFloat (itemNomb. Text);


Label3. Caption: =FloatToStr (vectViev. Col);


vectViev. Cells [vectViev. Col,vectViev. Row]: =FloatToStr (matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1]);


except


on EConvertError do begin


showMessage ('Convert error! ');


matrRecLink (mainList [nowItem]) ^. vt [vectViev. Col+1]: =saveVal;


vectViev. Cells [vectViev. Col,vectViev. Row]: =FloatToStr (saveVal);


itemNomb. Text: =FloatToStr (saveVal);


end;


end;


end;


end;


end.


Код модуля "
MATRIX"
:


unit matrix;


interface


const


nmax = 10;


type


size = 1. nmax;


vector = array [size] of real;


matrix_ = array [size,size] of real;


// Vector working ===============================


procedure writeVect (var op1: vector; op2: vector);


procedure ziroVect (var op1: vector);


// - ----------- - ------------------------------


procedure sumVect (op1,op2: vector; var rez: vector);


procedure decVect (op1,op2: vector; var rez: vector);


procedure multVectToNomb (var op1: vector; nomb: real);


function multVectToVect (op1,op2: vector): real;


// NORMS - --


function longOfVect (op1: vector): real;


function absSum (op1: vector): real;


function absMax (op1: vector): real;


// ============== ================================


// matrix_ working ================================


// ============== ================================


procedure writeMatr (var op1: matrix_; op2: matrix_);


procedure ziroMatr (var op1: matrix_);


// - ----------- - ------------------------------


procedure sumMatr (op1,op2: matrix_; var rez: matrix_);


procedure decMatr (op1,op2: matrix_; var rez: matrix_);


procedure multMatrToNomb (var op1: matrix_; nomb: real);


procedure multMatrToVect (op1: matrix_; op2: vector; var rez: vector);


procedure multMatrToMatr (op1,op2: matrix_; var rez: matrix_);


procedure transp (var op1: matrix_);


// NORMS - --


function longOfMatr (op1: matrix_): real;


function ijMaxSum (op1: matrix_): real;


function jiMaxSum (op1: matrix_): real;


implementation


// =============== HELP FUNCTIONS ================


// ------------ - writeVect - -------------------


procedure writeVect (var op1: vector; op2: vector);


var i: size;


begin


for i: =1 to nmax do op1 [i]: =op2 [i];


end;


// ------------ - writeMatr - -------------------


procedure writeMatr (var op1: matrix_; op2: matrix_);


var i,j: size;


begin


for i: =1 to nmax do


for j: =1 to nmax do


op1 [i] [j]: =op2 [i] [j];


end;


// ------------- - ziroVect - -------------------


procedure ziroVect (var op1: vector);


var i: size;


begin


for i: =1 to nmax do op1 [i]: =0;


end;


// ------------- - ziroMatr - -------------------


procedure ziroMatr (var op1: matrix_);


var i,j: size;


begin


for i: =1 to nmax do


for j: =1 to nmax do


op1 [i] [j]: =0;


end;


// =================================================


// ------------- - sumVect - --------------------


procedure sumVect (op1,op2: vector; var rez: vector);


var i: size;


begin


for i: =1 to nmax do rez [i]: =op1 [i] +op2 [i];


end;


// ------------- - decVect - --------------------


procedure decVect (op1,op2: vector; var rez: vector);


var i: size;


begin


for i: =1 to nmax do rez [i]: =op1 [i] - op2 [i];


end;


// --------- - multVectToNomb - -----------------


procedure multVectToNomb (var op1: vector; nomb: real);


var i: size;


begin


for i: =1 to nmax do op1 [i]: =op1 [i] *nomb;


end;


// ------------ - longOfVect - ------------------


function longOfVect (op1: vector): real;


var i: size; tmpVal: real;


begin


tmpVal: =0;


for i: =1 to nmax do tmpVal: =tmpVal+op1 [i] *op1 [i];


longOfVect: =sqrt (tmpVal);


end;


// --------- - multVectToVect - -----------------


function multVectToVect (op1,op2: vector): real;


var i: size; tmpVal: real;


begin


tmpVal: =0;


for i: =1 to nmax do tmpVal: =tmpVal+op1 [i] *op2 [i];


multVectToVect: =tmpVal;


end;


// ------------- - absSum - --------------------


function absSum (op1: vector): real;


var i: size; tmpVal: real;


begin


tmpVal: =0;


for i: =1 to nmax do tmpVal: =tmpVal+abs (op1 [i]);


absSum: =tmpVal;


end;


// ------------- - absMax - -------------------


function absMax (op1: vector): real;


var i: size; tmpVal: real;


begin


tmpVal: =op1 [1];


for i: =2 to nmax do if op1 [i] >tmpVal then tmpVal: =op1 [i];


absMax: =tmpVal;


end;


// ================================================


// =============== matrix_ ================


// ================================================


// ------------- - sumMatr - ------------------


procedure sumMatr (op1,op2: matrix_; var rez: matrix_);


var i,j: size;


begin


for i: =1 to nmax do


for j: =1 to nmax do


rez [i] [j]: =op1 [i] [j] +op2 [i] [j];


end;


// ------------- - decMatr - ------------------


procedure decMatr (op1,op2: matrix_; var rez: matrix_);


var i,j: size;


begin


for i: =1 to nmax do


for j: =1 to nmax do


rez [i] [j]: =op1 [i] [j] - op2 [i] [j];


end;


// ------------- - multMatrToNomb - ------------------


procedure multMatrToNomb (var op1: matrix_; nomb: real);


var i,j: size;


begin


for i: =1 to nmax do


for j: =1 to nmax do


op1 [i] [j]: =op1 [i] [j] *nomb;


end;


// ------------- - multMatrToVect - ------------------


procedure multMatrToVect (op1: matrix_; op2: vector; var rez: vector);


var i,j: size; tmpVal: real;


begin


for i: =1 to nmax do


begin


tmpVal: =0;


for j: =1 to nmax do


tmpVal: =tmpVal+op1 [i] [j] *op2 [j];


rez [i]: =tmpVal;


end;


end;


// ------------- - multMatrToMatr - ------------------


procedure multMatrToMatr (op1,op2: matrix_; var rez: matrix_);


var i,j,j1: size; tmpVal: real;


begin


for i: =1 to nmax do


for j1: =1 to nmax do


begin


tmpVal: =0;


for j: =1 to nmax do


tmpVal: =tmpVal+op1 [i] [j] *op2 [j] [j1];


rez [i] [j1]: =tmpVal;


end;


end;


// ------------------ - transp - ---------------------


procedure transp (var op1: matrix_);


var i,j: size; tmpVal: real;


begin


for i: =1 to nmax do


for j: =i+1 to nmax do


begin


tmpVal: =op1 [i] [j];


op1 [i] [j]: =op1 [j] [i];


op1 [j] [i]: =tmpVal;


end;


end;


// ---------------- - longOfMatr - -------------------


function longOfMatr (op1: matrix_): real;


var i,j: size; tmpVal: real;


begin


tmpVal: =0;


for i: =1 to nmax do


for j: =1 to nmax do


tmpVal: =tmpVal+op1 [i] [j] *op1 [i] [j];


longOfMatr: =sqrt (tmpVal);


end;


// ----------------- - ijSumMax - --------------------


function ijMaxSum (op1: matrix_): real;


var i,j: size; tmpVal1,tmpVal2: real;


begin


for j: =1 to nmax do


tmpVal2: =tmpVal2+op1 [i] [j];


for i: =2 to nmax do


begin


tmpVal1: =0;


for j: =1 to nmax do


tmpVal1: =tmpVal1+op1 [i] [j];


if tmpVal1>tmpVal2 then


tmpVal2: =tmpVal1;


end;


ijMaxSum: =tmpVal2;


end;


// ----------------- - jiMaxSum - --------------------


function jiMaxSum (op1: matrix_): real;


var i,j: size; tmpVal1,tmpVal2: real;


begin


for i: =1 to nmax do


tmpVal2: =tmpVal2+op1 [i] [j];


for j: =2 to nmax do


begin


tmpVal1: =0;


for i: =1 to nmax do


tmpVal1: =tmpVal1+op1 [i] [j];


if tmpVal1>tmpVal2 then


tmpVal2: =tmpVal1;


end;


jiMaxSum: =tmpVal2;


end;


end.


Інтерфейс програми



Перевірка програми

Матриця А



програма вектор матриця інтерфейс


Матриця В



Матриця С



Вектор Х




Вектор Y



Результуючій вектор



Евклідова норма:
206,434591820266


: 581,39


: 116


[1]
Усі дії над матрицями та векторами, результатами яких не є скалярне значення треба робити з допомогою процедур, адже функція не може передавати складну структуру даних у якості результату.


[2]
У найбільш широкому змісті нормою у лінійній алгебрі називається деяка функція, що ставить у відповідність матриці (вектору) деяке число (скаляр).

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Розрахунок норм вектору

Слов:3085
Символов:33280
Размер:65.00 Кб.