Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
48
Добавлен:
02.05.2014
Размер:
4.15 Кб
Скачать
//---------------------------------------------------------------------------


#pragma hdrstop

#include "matrix.h"
#include "vcl.h"

TMatrix::TMatrix()
{
	shirina=SIZE_MAX;
	vysota=SIZE_MAX;
	for(int i=0;i<SIZE_MAX;i++)
		for(int j=0;j<SIZE_MAX;j++)
			data[i][j]=0;
}
//---------------------------------------------------------------------------

TMatrix::TMatrix(int sh,int vys)
{
	shirina=sh;
	vysota=vys;
	for(int i=0;i<SIZE_MAX;i++)
		for(int j=0;j<SIZE_MAX;j++)
			data[i][j]=0;
}
//---------------------------------------------------------------------------

TMatrix::TMatrix(int sh,int vys, float* values)
{
	shirina=sh;
	vysota=vys;
	for(int i=0;i<shirina;i++)
		for(int j=0;j<vysota;j++)
			data[i][j]=values[i*vysota+j];
}
//---------------------------------------------------------------------------

void   TMatrix::SetData(int x,int y,float value)
{
	data[x][y]=value;
}
//---------------------------------------------------------------------------

void   TMatrix::SetSizeX(int value)
{
	if(value>0 && value<SIZE_MAX) shirina=value;
}
//---------------------------------------------------------------------------

void   TMatrix::SetSizeY(int value)
{
	if(value>0 && value<SIZE_MAX) vysota=value;
}
//---------------------------------------------------------------------------

float TMatrix::GetData(int x,int y)
{
	return data[x][y];
}
//---------------------------------------------------------------------------

int    TMatrix::GetSizeX()
{
	return shirina;
}
//---------------------------------------------------------------------------

int    TMatrix::GetSizeY()
{
	return vysota;
}
//---------------------------------------------------------------------------

TMatrix TMatrix::operator +(TMatrix mat2)
{
	for(int i=0;i<shirina;i++)
	for(int j=0;j<vysota;j++)
		data[i][j]+=mat2.data[i][j];
	return *this;
}
//---------------------------------------------------------------------------

TMatrix TMatrix::operator -(TMatrix mat2)
{
	for(int i=0;i<shirina;i++)
		for(int j=0;j<vysota;j++)
			data[i][j]-=mat2.data[i][j];
	return *this;
}
//---------------------------------------------------------------------------

TMatrix TMatrix::operator *(TMatrix mat2)
{
	TMatrix mat3(mat2.shirina,vysota);
	for(int y=0;y<vysota;y++)
		for(int i=0;i<mat2.shirina;i++)
			for(int j=0;j<shirina;j++)
			{
				mat3.data[y][i]+=data[y][j]*mat2.data[j][i];
			}
	return mat3;
}
//---------------------------------------------------------------------------

TMatrix TMatrix::operator !()
{
	TMatrix obrat(shirina,vysota);
	float c;
	int e;
	for(e=0;e<shirina;e++) obrat.data[e][e]=1;
	for(e=0;e<shirina;e++)
	{
		if(!data[e][e])
			for(int y=e+1;!data[e][e] && y<shirina;y++)
				for(int j=0;j<shirina;j++)
				{
					c=data[e][j];
					data[e][j]=data[y][j];
					data[y][j]=c;
					c=obrat.data[e][j];
					obrat.data[e][j]=obrat.data[y][j];
					obrat.data[y][j]=c;
				}
		if(!data[e][e])
		{
			for(int m=0;m<shirina;m++)
			for(int k=0;k<shirina;k++)
			obrat.data[m][k]=0;
			ShowMessage("Обратная матрица не существует (determinant=0)");
			return obrat;
		}
		c=data[e][e];
		for(int g=shirina-1;g>=0;g--)
		{
			data[e][g]/=c;
			obrat.data[e][g]/=c;
		}
		for(int j=0;j<shirina;j++)
			if(j!=e)
			{
				c=data[j][e];
				for(int y=shirina-1;y>=0;y--)
				{
					data[j][y]-=data[e][y]*c;
					obrat.data[j][y]-=obrat.data[e][y]*c;
				}
			}
	}
	return obrat;
}
//---------------------------------------------------------------------------

TMatrix TMatrix::T(TMatrix mat)
{
	if(mat.shirina!=mat.vysota)
	{
		ShowMessage("Транспонирование невозможно.");
		return mat;
	}
	float c=0;
	for(int i=0;i<mat.shirina;i++)
		for(int j=0;j<mat.vysota;j++)
		{
			if(i!=j)
			{
				c=mat.data[i][j];
				mat.data[i][j]=mat.data[j][i];
				mat.data[j][i]=c;
			}
		}
	return mat;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#pragma package(smart_init)
Соседние файлы в папке KG3