Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Класс комплексных матриц

Модуль основной программы | Форма сведений о программе | Модуль сведений о программе | Базовый класс параметризованных векторов | Параметризованный класс матриц | Параметризованный класс полиномов | Класс полиномиальных уравнений | Класс комплексных чисел | Класс действительных векторов | Класс комплексных векторов |


Читайте также:
  1. DSM — система классификации Американской психиатрической ассоциации
  2. I. 4. 2. Формирование матриц с учетом ограничений
  3. I. Вступительное слово классного руководителя.
  4. I. Классификация факторов, формирующих ПП
  5. I. Конфликты в межличностных отношениях. Классификация конфликтов
  6. I. Понятие и классификация ощущений, их значение в теории ПП. Роль восприятия в маркетинге
  7. I.2.2) Классификация юридических норм.

//T_CMATRIX.PAS

 

 

unit T_CMatrix;

 

interface

uses T_CVector,T_Complex;

 

type

 

TCMatrix=class(TCVector) {<-- Класс комплексных матриц (наследник от комплексных векторов)}

Row,Col:integer; //<-- Кол-во строк и столбцов

Matrix:array of CVector; //<-- Сама матрица

procedure SetDim(m,n:integer);

//<-- Установка размерности матрицы

constructor CMCreate(m,n:integer);

//<-- Создание матрицы m x n

 

private

 

protected

 

public

{Внутренние ф-ции}

function CMultMatOnDig(c:TComplex):TCMatrix;virtual;

//<-- Умножение матрицы на комплексное число

function CMTransp:TCMatrix;virtual;

//<-- Транспонирование матрицы

 

published

 

end;

{Внешние ф-ции}

function CMSumma(m1,m2:TCMatrix):TCMatrix;far; //<-- Сумма матриц

function CMRazn(m1,m2:TCMatrix):TCMatrix;far; //<-- Разность матриц

function CMMult(m1,m2:TCMatrix):TCMatrix;far; //<-- Произведение матриц

function CMEquiv(m1,m2:TCMatrix):Boolean;far; //<-- Сравнение матриц

 

implementation

 

constructor TCMatrix.CMCreate(m,n:integer);

// Создание матрицы

var i,j:integer;

begin

inherited Create; // Конструктор предка

SetDim(m,n);

// Вызываем наш метод установки размерности матрицы

for i:=0 to row-1 do

for j:=0 to col-1 do matrix[i,j]:=complex(0,0); // Сразу заносим нули

end;

 

procedure TCMatrix.SetDim(m,n:integer);

// Метод установки размерности матрицы

var i:integer;

begin

setlength(matrix,m);

for i:=0 to m-1 do setlength(matrix[i],n);

row:=m;

col:=n;

end;

 

function TCMatrix.CMultMatOnDig(c:TComplex): TCMatrix; // Умножение матрицы на комплексное число

var i,j:integer;temp:TCMatrix;

begin

temp:=TCMatrix.CMCreate(row,col);

// Создаём экземпляр объекта TCMatrix

for i:=0 to row-1 do

for j:=0 to col-1 do

begin

temp.matrix[i,j]:=CMult(matrix[i,j],c);

end;

result:=temp;

end;

 

function TCMatrix.CMTransp:TCMatrix;

// Транспонирование

var i,j:integer;temp:TCMatrix;

begin

temp:=TCMatrix.CMCreate(row,col);

for i:=0 to row-1 do

for j:=0 to col-1 do

temp.matrix[i,j]:=matrix[j,i];

result:=temp;

end;

 

function CMSumma(m1,m2:TCMatrix):TCMatrix;

var i:integer;temp:TCMatrix;

begin

if (m1.row<>m2.row) or (m1.col<>m2.col) then

// Если матрицы разных размеров

begin

result:=TCMatrix.CMCreate(0,0);

// результат - матрица нулевых размеров.

exit;

end;

// иначе

temp:=TCMatrix.CMCreate(m1.row,m1.col);

for i:=0 to m1.row-1 do

temp.matrix[i]:=CVSumma(m1.matrix[i],m2.matrix[i]);

result:=temp;

end;

 

function CMRazn(m1,m2:TCMatrix):TCMatrix;

var i:integer;temp:TCMatrix;

begin

if (m1.row<>m2.row) or (m1.col<>m2.col) then

// Если матрицы разных размеров

begin

result:=TCMatrix.CMCreate(0,0);

// результат - матрица нулевых размеров

exit;

end;

// иначе

temp:=TCMatrix.CMCreate(m1.row,m1.col);

for i:=0 to m1.row-1 do

temp.matrix[i]:=CVRazn(m1.matrix[i],m2.matrix[i]);

result:=temp;

end;

 

function CMMult(m1,m2:TCMatrix):TCMatrix;

var i,j,k:integer;temp:TCMatrix;

s:TComplex;

begin

if (m1.col<>m2.row) then

// Если матрицы разных размеров

begin

result:=TCMatrix.CMCreate(0,0);

// результат - матрица нулевых размеров

exit;

end;

// иначе

temp:=TCMatrix.CMCreate(m1.row,m2.col);

for i:=0 to m1.row-1 do

for j:=0 to m2.col-1 do begin

s:=Complex(0,0);

for k:=0 to m1.col-1 do s:=CSumma(s,CMult(m1.matrix[i,k],m2.matrix[k,j]));

temp.matrix[i,j]:=s;

end;

result:=temp;

end;

 

function CMEquiv(m1,m2:TCMatrix):Boolean;

// Сравнение матриц

var i:integer;

begin

result:=true;

if (m1.row<>m2.row) or (m1.col<>m2.col) then begin result:=false;exit end;

for i:=0 to m1.row do

if not CVEquiv(m1.matrix[i],m2.matrix[i]) then result:=false; // Используем сравнение векторов

end;

 

// End File!!!!!

end.


Дата добавления: 2015-07-25; просмотров: 41 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Класс действительных матриц| Класс полиномов

mybiblioteka.su - 2015-2024 год. (0.009 сек.)