Смекни!
smekni.com

Разработка библиотечных средств (стр. 4 из 4)

#include <iostream.h>

#include <fstream.h>

#include "tmatr.cpp"

int main()

{

clrscr();

Matrix<double> A(3,3), B(3,3), C(3,3);

Matrix<double> V(3),X(3),H(3),U(3);

double d;

A(0,0)=1.1; A(0,1)=2.2; A(0,2)=3.3;

A(1,0)=2.4; A(1,1)=1.1; A(1,2)=4.4;

A(2,0)=1.3; A(2,1)=2.1; A(2,2)=4.1;

B(0,0)=2; B(0,1)=7; B(0,2)=2;

B(1,0)=4; B(1,1)=8; B(1,2)=1;

B(2,0)=6; B(2,1)=4; B(2,2)=1;

V(0)=2.1; V(1)=3.31; V(2)=1.4;

H(0)=1.1; H(1)=2.1; H(2)=3.1;

//******************************

C=A+B;

cout<<"A:n"<<A<<endl;

cout<<"B:n"<<B<<endl;

cout<<"C=A+B:n"<<C<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//******************************

C=A-B;

cout<<"A:n"<<A<<endl;

cout<<"B:n"<<B<<endl;

cout<<"C=A-B:n"<<C<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//******************************

//******************************

X=V+H;

cout<<"V:n"<<V<<endl;

cout<<"H:n"<<H<<endl;

cout<<"X=V+H:n"<<X<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//******************************

X=V-H;

cout<<"V:n"<<V<<endl;

cout<<"H:n"<<H<<endl;

cout<<"X=V-H:n"<<X<<endl;

cout<<"Press any key...n";

getch();

clrscr();

C=A*V;

cout<<"A:n"<<A<<endl;

cout<<"V:n"<<V<<endl;

cout<<"C=A*V:n"<<C<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//******************************

Matrix<int> D(3,3), E(3,3);

D(0,0)=1; D(0,1)=2; D(0,2)=3;

D(1,0)=2; D(1,1)=5; D(1,2)=6;

D(2,0)=7; D(2,1)=3; D(2,2)=9;

ofstream fout("test.mtr");

if(!fout)

{

cout<<"file not openn";

return 1;

}

D.write(fout);

fout.close();

ifstream fin("test.mtr");

if(!fin)

{

cout<<"file not openn";

return 1;

}

E.read(fin); //

cout<<"D:n";

cout<<D;

cout<<"E:n";

cout<<E;

fin.close();

cout<<"Press any key...n";

getch();

clrscr();

//************************************

C=A^-1;

cout<<"A:n"<<A<<endl;

cout<<"C=A^-1:n"<<C<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//****************************

// A*X=V X=(A^-1)*V

X=(A^-1)*V;

cout<<"A^-1:n"<<(A^-1)<<endl;

cout<<"V:n"<<V<<endl;

cout<<"X:n"<<X<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//************************************

d=A.determ();

cout<<"determinant of A = "<<d<< endl;

d=V.vmodul();

cout<<"modul of V = "<<d<< endl;

cout<<"Press any key...n";

getch();

clrscr();

//************************************

V(0)=4; V(1)=3; V(2)=2;

U(0)=1; U(1)=2; U(2)=3;

d=V%U;

cout<<"scalar product V*U= "<< d<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//************************************

C=!A;

cout<<"A:n"<<A<<endl;

cout<<"C=!A:n"<<C<<endl;

cout<<"Press any key...n";

getch();

clrscr();

C=5*A;

B=A*2;

cout<<"A:n"<<A<<endl;

cout<<"C=5*A:n"<<C<<endl;

cout<<"B=A*2:n"<<B<<endl;

cout<<"Press any key...n";

getch();

clrscr();

//************************************

//************************************

return 0;

Результаты тестирования класса Matrix

Сложение матриц A и B:

A:B:C=A+B:

1.12.23.32723.19.25.3

2.41.14.44816.49.15.4

1.32.14.16417.36.15.1

Вычитание матриц A и B:

A:B:C=A-B:

1.12.23.3272-0.9-4.81.3

2.41.14.4481-1.6-6.93.4

1.32.14.1641-4.7-1.93.1

Сложение матриц A и B:

A:B:C=A*B:

1.12.23.327230.838.57.7

2.41.14.448135.643.210.3

1.32.14.164135.642.38.8

Сложение векторов

V:

2.1

3.31

1.4

H:

1.1

2.1

3.1

X=V+H

3.2

5.41

4.5

Вычитание векторов

V:

2.1

3.31

1.4

H:

1.1

2.1

3.1

X=V-H:

1

1.21

-1.7

Умножение матрицы на вектор

A:

1.1 2.2 3.3

2.4 1.1 4.4

1.3 2.1 4.1

V:

2.1

3.31

1.4

C=A*V:

14.212

14.841

15.421

Запись матрицы в файл

D:

1 2 3

2 5 6

7 3 9

Считывание матрицы из файла

E:

1 2 3

2 5 6

7 3 9

Вычисление обратной матрицы

A:

1.1 2.2 3.3

2.4 1.1 4.4

1.3 2.1 4.1

C=A^-1:

2.009346 0.88785 -2.570093

1.750212 -0.093458 -1.308411

-1.53356 -0.233645 1.728972

Решение алгебраического уравнения

A^-1:

2.009346 0.88785 -2.570093

1.750212 -0.093458 -1.308411

-1.53356 -0.233645 1.728972

V:

2.1

3.31

1.4

X:

3.56028

1.534325

-1.57328

Определение детерминанта матрицы

determinant of A = -2.354

Определение длины (модуля) вектора

modul of V = 4.162463

Вычисление скалярного произведения векторов

scalar product V*U= 16

ВЫВОД

В результате выполнения курсового проекта были разработаны два класса функций для решения простейших задач линейной алгебры. Число этих функций сравнительно невелико, однако можно легко добавить в эти классы более сложные функции, построенные на базе уже имеющихся. Классы позволяют работать с матрицами и векторами, элементы которых могут быть любого типа, однако на практике чаще всего используется целый тип и тип чисел с плавающей запятой.

Классы написаны на языке С++, однако могут быть легко переписаны на любом из современных языков программирования, так как приведены довольно простые алгоритмы всех компонентных функций. Были максимально предусмотрены все возможные ошибки, которые могут возникнуть при использовании функций данных классов. Особое внимание уделялось разумному выделению памяти под объекты во время выполнения программы, поэтому все функции были тщательно отлажены.

Классы Matrix и Vector могут быть эффективно применены на практике в задачах, требующих операций с матрицами и векторами, а также связанных с решением систем линейных алгебраических уравнений.

Список использованной литературы

Дискретная математика, конспект лекций. В. Г. Засовенко. Запорожье, 1998 г.

Начальный курс С и С++. Б. И. Березин. Москва: "ДИАЛОГ-МИФИ", 1999 г.

Язык программирования С++. Б. Страуструп. Киев:"ДиаСофт", 1993 г.