Материал: Определение ортогональной матрицы

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

{

//Создаем указатель**ras;=new double *[4];(int i=0; i<4; i++)[i]= new double [4];

//Переписываем в него массив(int i=0; i<4; i++)(int j=0; j<4; j++)[i][j]=mas[i][j];

//Выводим указательras;

//Подчищаем за собой(int i = 0; i < 4; i++)[] ras[i];[] ras;

}

//Функция вывода на экран матрицыprint_mas (double **mas)

{(int i=0; i<4; i++)

{_s ("\n");(int j=0; j<4; j++)_s ("%4.2f ",mas[i][j]);

}

}

//Функция транспонирования матрицы** trans(double **mas)

{

//Создаем указатель**ras;=new double *[4];(int i=0; i<4; i++)[i]= new double [4];

//Переписываем из входящего указателя в новый, заменяя строки на столбцы(int i=0; i<4; i++)(int j=0; j<4; j++)[j][i]=mas[i][j];

//Выводим соданый указательras;

//Подчищаем за собой(int i = 0; i < 4; i++)[] ras[i];[] ras;

}

//Функция расчета обратной матрицы** obrat(double **mas)

{

//Создаем временный указатель**temp1 = new double *[4];(int i=0; i<4; i++)[i]= new double [4];

//Переписываем входной указатель на временный(int i = 0; i < 4; i++)(int j = 0; j < 4; j++)[i][j]=mas[i][j];

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

{

//Создаем временную матрицуtemp;

//Создаем указатель для единичной матрицы**E = new double *[4]; (int i = 0; i < 4; i++)[i] = new double [4];

//Заполняем единичную матрицу(int i = 0; i < 4; i++)(int j = 0; j < 4; j++)

{[i][j] = 0.00; (i == j)[i][j] = 1.00;

}

//Заполняем временную матрицу

//Все элементы первой строки делим на верхний элемент выбранного столбца.(int k = 0; k < 4; k++)

{= temp1[k][k]; (int j = 0; j < 4; j++)

{[k][j] = temp1[k][j]/temp;[k][j] = E[k][j]/temp;

}

//Из оставшихся строк вычитаем первую строку, умноженную на первый элемент соответствующей строки,

//с целью получить первым элементом каждой строки (кроме первой) ноль.(int i = k + 1; i < 4; i++)

{= temp1[i][k]; (int j = 0; j < 4; j++)

{[i][j] = temp1[i][j] - temp1[k][j] * temp;[i][j] = E[i][j] - E[k][j] * temp;

}

}

}

//Вычитаем из предпоследней строки последнюю строку, умноженную на соответствующий коэффициент,

//с тем, чтобы в предпоследней строке осталась только 1 на главной диагонали.(int k = 4 - 1; k > 0; k--)

{(int i = k - 1; i >= 0; i--)

{= temp1[i][k]; (int j = 0; j < 4; j++)

{[i][j] = temp1[i][j] - temp1[k][j] * temp;[i][j] = E[i][j] - E[k][j] * temp;

}

}

}

//Переписываем значения из обработаной единичной матрицы в расчетную матрицу(int i = 0; i < 4; i++)(int j = 0; j < 4; j++)[i][j] = E[i][j];

//Подчищаем за собой(int i = 0; i < 4; i++)[] E[i];[] E;

//Возвращаем указатель с результатомtemp1;

//Подчищаем за собой(int i = 0; i < 4; i++)[] temp1[i];[] temp1;

}

}

//Функция произведения двух матриц** proizv (double **mas, double **mast)

{

//Создаем указатель, в который будем записывать результат вычислений**ras;=new double *[4];(int i=0; i<4; i++)[i]= new double [4];

//Вычисляем значения по элементно(int i=0; i<4; i++)(int j=0; j<4; j++)[i][j]=0;(int i=0; i<4; i++)(int j=0; j<4; j++)

{(int k=0; k<4; k++)

{s = mas[k][j]*mast[i][k];

//Результат умножения записываем в результирующий указатель[i][j]=ras[i][j]+s;

}

}

//Выводим результирующий указательras;

//Подчищаем за собой(int i = 0; i < 4; i++)[] ras[i];[] ras;

}

//Функция сравнения матрицы с единичной матрицойsravnenie(double **mas)

{

//Сравнение по единичным наборам(i==j)

{(mas[i][j]!=1 && (fabs(mas[i][j]-1.0)>0.00001))

{=s+1; //Если условие не выполняется, то счетчик истины увеличивается

}

}

//Сравнение по нулевым наборамif (i!=j)

{(mas[i][j]!=0 && (fabs(mas[i][j])>0.00001))

{=s+1; //Если условие не выполняется, то счетчик истины увеличивается

}

}

}

//Сравнение счетчика истины с начальным значением(s>1)_s ("Матрица не единичная => Вычисления выполнены не правильно\n\n");_s ("Матрица единичная => Вычисления выполнены правильно\n\n");

}

//Функция сравнения матрицrezultat(double **mas, double **mast)

{s=1; //Счетчик истины(int i=0; i<4; i++)(int j=0; j<4; j++)(mas[i][j]!=mast[i][j])++; //При выполнении условия, счетчик накручиваем(s>1) printf_s ("Транспонированная матрица не идентична обратной => \nПредставленная матрица не ортогональна\n\n");printf_s ("Транспонированная матрица идентична обратной => \nПредставленная матрица ортогональна\n\n");

}

Модуль программы prototype.h

#ifndef PROTOTYPE_H

#define PROTOTYPE_H

#include <time.h>

#include <stdio.h>

#include <stdlib.h>

#include <math.h> print_mas(double **mas); //Функция вывода на экран матрицыsravnenie(double **mas); //Функция сравнения матрицы с единичнойrezultat(double **mas, double **mast);//Функция сравнения обратной и транспонированной матрицы и финальный вывод расчтов** obrat(double **mas); //Функция создания обратной матрицы** trans(double **mas); //Транспонирование матрицы** proizv(double **mas, double **mast); //Функция произведения матриц** sozdanie(double mas[4][4]); //Функция перезаписи из массива в указатели

#endif