Розрахунок норм вектору
Розробка програми для розрахунку норм вектору. Процедури множення матриці на матрицю, сумування матриць, віднімання векторів. Функція множення матриці на вектор. Обчислення евклідової норми вектора. Створення зручного інтерфейсу для користувача.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | украинский |
Дата добавления | 13.03.2011 |
Размер файла | 397,6 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ УКРАЇНИ "КПІ"
ФАКУЛЬТЕТ ПРИКЛАДНОЇ МАТЕМАТИКИ
Кафедра спеціалізованих комп'ютерних систем
КУРСОВА РОБОТА
з дисципліни "Технологія програмування"
Виконав: Семенякін Володимир
Постановка завдання
Розробити програму для розрахунку норм вектору, отриманому по наступній формулі:
, Де A, B, C - матриці й X, Y - вектори.
Теоретичні відомості
Для обрахунку заданої формули необхідно:
a) Написати процедуру Усі дії над матрицями та векторами, результатами яких не є скалярне значення треба робити з допомогою процедур, адже функція не може передавати складну структуру даних у якості результату. множення матриці на матрицю.
b) Написати процедуру сумування матриць.
c) Написати процедуру віднімання векторів.
d) Написати функцію множення матриці на вектор
e) Написати функцію для обчислення евклідової норми вектора.
f) Написати функцію обчислення норми вектора
g) Написати функцію обчислення норми вектора
h) Створити зручний інтерфейс для користувача.
Множення матриць:
Звідки легко бачити, що при множені матриці розмірами NM на матрицю розмірами МК буде отримана матриця розміром NК.
Сумування матриць:
Легко бачити, що задана дія ніяк не впливає на розмірність результуючої матриці. Матриці, що сумуються, мають бути однакових розмінностей.
Множення матриці на вектор:
Аналогічно множенню матриці на матрицю. Другим операндом у такій ситуації виступає матриця розміром М1. В результаті виникає матриця розміром N1, або ж просто вектор з N координатами.
Віднімання векторів:
Обчислення евклідової норми У найбільш широкому змісті нормою у лінійній алгебрі називається деяка функція, що ставить у відповідність матриці (вектору) деяке число (скаляр). :
Відбувається за наступною формулою:
Частіше всього евклідова норма використовується для обчислення довжини вектора.
Норми й не потребують пояснення. Їх зміст у їх вигляді.
Обґрунтування доцільності використання модулів
Модулі дозволяють використання функцій, процедур й типів для роботи з матрицями і векторами у інших програмах. Отже модульне програмування додає універсальності.
Функції й процедури доцільні, коли виникає багаторазове повторення одних й тих же алгоритмів. Ця курсова робота - як раз той випадок.
Код програми
Код головної програми:
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');
// ------------------------
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
Размещено на Allbest.ru
Подобные документы
Стандарти OpenMP i MPI як основні засоби програмування для багатопроцесорних систем. Розробка програми паралельного розрахунку інтеграла для функції з певним кроком дискретизації, паралельної програми множення квадратної матриці на квадратну матрицю.
курсовая работа [2,5 M], добавлен 11.12.2013Бібліотеки для дій з розрядно-логарифмічними діями. Перевірка оберненої матриці за допомогою одиничної у розрядно-логарифмічній формі. Код розрахунку оберненої матриці за методом Крамера. Алгоритми додавання, віднімання, множення, ділення чисел у РЛ.
курсовая работа [18,6 K], добавлен 17.10.2013Отримання компонентів вектора із квадратної матриці відповідно до заданого алгоритму. Обчислення значення функції. Базова програма реалізації алгоритму. Модуль глобальних описів. Сервісний модуль обслуговування матриці. Результати роботи програми.
курсовая работа [19,5 K], добавлен 30.01.2013Особливості матриць в MATLAB, їх введення з клавіатури та завантаження з інших джерел. Доступ до елементів матриці. Операції над матрицями (векторами). Поелементне перетворення матриці. Характеристика спеціальних функцій, що генерують поширені матриці.
реферат [333,9 K], добавлен 25.11.2014Основні відомості з лінійної алгебри. Власні значення і вектори матриці. Метод обертання Якобі. Засоби формування інтерфейсу користувача. Текст програми алгоритму методу обертання Якобі. Вимоги до програмно-технічного забезпечення. Інструкція користувача.
курсовая работа [306,0 K], добавлен 18.11.2015Формування квадратної транспонованої матриці, отримання з неї компонентів вектора та обчислення значення функції в мові Pascal. Базова програма реалізації алгоритму. Сервісний модуль обслуговування матриці. Головна програма та результати її роботи.
курсовая работа [40,2 K], добавлен 10.03.2011Розробка машинного алгоритму операції множення в доповняльному коді з пропуском тактів додавання в двійковій системі числення з старших розрядів чисел, представлених у формі з плаваючою комою та операційний автомат. Контроль операції віднімання.
курсовая работа [45,5 K], добавлен 14.03.2013Розробка алгоритму множення чисел у прямому коді з молодших розрядів із пропусканням тактів сумування для двійкових чисел. Синтез операційного та керуючого автоматів з жорсткою логікою. Описання технології числового контролю операції додавання по модулю.
курсовая работа [74,9 K], добавлен 14.03.2013Спосіби розв'язання трудомістких обчислювальних завдань з використанням двох і більше комп'ютерів, об'єднаних в мережу. Розробка програмної реалізації восьми процесорної паралельної системи зі розподіленою пам’яттю, яка виконує множення двох матриць.
курсовая работа [747,6 K], добавлен 23.01.2014Опис великої інтегральної схеми пристрою множення. Аналіз розв’язків поставленої задачі, розробка принципової електричної схеми, логічної моделі і тесту перевірки, розрахунок швидкодії. Тестування з використанням пакету прикладних програм OrCAD 9.1.
курсовая работа [5,0 M], добавлен 22.02.2010