Автор работы: Пользователь скрыл имя, 15 Ноября 2011 в 13:10, лабораторная работа
Постановка задачи
Дана произвольная n×n матрица:
Требуется определить, отличен ли от нуля определитель данной матрицы, и, если он отличен от нуля найти, найти матрицу .
Учреждение образования
«Белорусский государственный университет
информатики
и радиоэлектроники»
Кафедра информатики
Лабораторная работа №1
«Подсчет обратной матрицы»
по курсу
методы оптимизации
Выполнила:
студентка гр. 852001
Харлан А.В.
Проверила:
проф. Костюкова О.И.
Минск
2011
Постановка задачи
Дана произвольная n×n матрица:
.
Требуется определить, отличен ли от нуля определитель данной матрицы, и, если он отличен от нуля найти, найти матрицу .
Текст программы
class ColumnVector
{
private double[] columnVector;
public int N {get; set;}
public ColumnVector(int n)
{
columnVector = new double[n]; N = n;
}
public double this[int index]
{
get { return columnVector[index]; }
set { columnVector[index] = value; }
}
}
class RowVector
{
public int N { get; set; }
private double[] rowVector;
public RowVector(int n)
{
rowVector = new double[n]; N = n;
}
public double this[int index]
{
get { return rowVector[index]; }
set { rowVector[index] = value; }
}
//Вектор-стока на матрицу
public RowVector Multiplication(SquarteMatrix matrix)
{
RowVector res = new RowVector(matrix.N);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
res[i] += rowVector[j]*matrix[j, i];
}
return res;
}
//вектор-столбец на вектор-строку
public double Multiplication(ColumnVector colVector)
{
double res = 0;
for (int i = 0; i < N; i++)
res += colVector[i] * rowVector[i];
return res;
}
}
class SquarteMatrix
{
public double[,] matrix;
public int N { get; set; }
public SquarteMatrix(int n)
{
N = n; matrix = new double[n,n];
}
public SquarteMatrix(int n, double[,] new_matrix)
{
N = n; matrix = new_matrix;
}
public double this[int index1, int index2]
{
get { return matrix[index1, index2]; }
set { matrix[index1, index2] = value; }
}
//Матрица на матрицу
public SquarteMatrix Multiplication(SquarteMatrix second_matrix)
{
double sum = 0;
SquarteMatrix res = new SquarteMatrix(N, new double[N, N]);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
sum = 0;
for (int r = 0; r < N; r++)
sum += matrix[i, r] * second_matrix.matrix[r, j];
res.matrix[i, j] = sum;
}
}
return res;
}
//матрица на вектор-столбец
public ColumnVector Multiplication(ColumnVector colVector)
{
ColumnVector res = new ColumnVector(N);
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
res[i] += matrix[i, j] * colVector[j];
}
return res;
}
}
class GetReverseMatrix
{
const double eps = 0.000000001;
public int N { get; set;}
private int K;
private SquarteMatrix C, B_i;
private ColumnVector C_j;
public GetReverseMatrix(int n, int k, SquarteMatrix b_i, ColumnVector c_j)
{
N = n; K = k; C = new SquarteMatrix(N); B_i = new SquarteMatrix(N);
B_i = b_i; C_j = new ColumnVector(N); C_j = c_j;
}
public SquarteMatrix Find()
{
SquarteMatri
RowVector rowVector = new RowVector(N);
rowVector[K - 1] = 1;
rowVector = rowVector.Multiplication(B_i);
double alpha = rowVector.Multiplication(C_j);