Отчет защищен с оценкой (отлично, хорошо, удовлетворительно)



Download 13,81 Mb.
bet14/20
Sana20.07.2022
Hajmi13,81 Mb.
#828539
TuriОтчет
1   ...   10   11   12   13   14   15   16   17   ...   20
Bog'liq
Юлдашев Анвар TM 2003R Отчёт о квалификационной практике

Задача 9. Вычислить собственные числа матрицы
,
где A, B – заданные квадратные матрицы порядка n x n.
В качестве решения рассматривается случай, где n = 2. Так как в расматриваемом случае, задача сводится к решению квадратного уравнения, блок схема имеет вид:

Рис. 67 Блок схема вычисления корней квадратного уравнения в общем виде.

Ниже приводится текст программы с результатами расчетов:


static void FindAlgDop(double[,] A, int size, double[,] B)
{
int i, j;

// нахожу определитель матрицы A


double det = FindDeterminant(A, size);

if (det > 0) // это для знака алгебраического дополнения


det = -1;
else
det = 1;
double[,] minor = new double[size - 1, size - 1];

for (j = 0; j < size; j++)


{
for (i = 0; i < size; i++)
{
// получаю алгебраическое дополнение
GetMinor(A, minor, j, i, size);
if ((i + j) % 2 == 0)
B[j, i] = -det * FindDeterminant(minor, size - 1);
else
B[j, i] = det * FindDeterminant(minor, size - 1);
}
}
}

static double GetMinor(double[,] A, double[,] B, int x, int y, int size)


{
int xCount = 0, yCount = 0;
int i, j;
for (i = 0; i < size; i++)
{
if (i != x)
{
yCount = 0;
for (j = 0; j < size; j++)
{
if (j != y)
{
B[xCount, yCount] = A[i, j];
yCount++;
}
}
xCount++;
}
}
return 0;
}

static double FindDeterminant(double[,] A, int size)


{
// останавливаю рекурсию, если матрица
// состоит из одного элемента
if (size == 1)
{
return A[0, 0];
}
else
{
double det = 0;
int i;
double[,] Minor = new double[size - 1, size - 1];
for (i = 0; i < size; i++)
{
GetMinor(A, Minor, 0, i, size);
// Рекурсия
det += (int)Math.Pow(-1, i) * A[0, i] * FindDeterminant(Minor, size - 1);
}
return det;
}
}
static void Transpose_Matrix(int n, double[,] a)// метод, который транспонирует матрицу.
{
double tmp;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < i; j++)
{
tmp = a[i, j];
a[i, j] = a[j, i];
a[j, i] = tmp;
}
}
}
static void solution(int n, double[,] a, double[,] b, double[,] inverse)
{
double[,] Multip_of_A_A = new double[n, n];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++) // Умножение матриц A и B
{
for (int k = 0; k < n; k++)
{
Multip_of_A_A[i, j] += a[i, k] * a[k, j];
}
}
}
double[,] Multip_of_A_A_B = new double[n, n];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++) // Умножение матриц A и B
{
for (int k = 0; k < n; k++)
{
Multip_of_A_A_B[i, j] += Multip_of_A_A[i, k] * b[k, j];
}
}
}
double[,] Multip_of_A_A_B_inverse = new double[n, n];
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++) // Умножение матриц A и B
{
for (int k = 0; k < n; k++)
{
Multip_of_A_A_B_inverse[i, j] += Multip_of_A_A_B[i, k] * inverse[k, j];
}
}
}
double D = Math.Pow(Multip_of_A_A_B_inverse[0, 0] + Multip_of_A_A_B_inverse[1, 1], 2) - 4 * (Multip_of_A_A_B_inverse[0, 0] * Multip_of_A_A_B_inverse[1, 1] - Multip_of_A_A_B_inverse[0, 1] * Multip_of_A_A_B_inverse[1, 0]);
double x;
double x_2;
if (D < 0)
{
Console.WriteLine("Решения нет");
}
else if (D == 0)
{
x = -1 * (Multip_of_A_A_B_inverse[0, 0] + Multip_of_A_A_B_inverse[1, 1]) / 2;
Console.WriteLine("Собственное число имеют вид: x = {0}", x);
}
else
{
x = (-1 * (Multip_of_A_A_B_inverse[0, 0] + Multip_of_A_A_B_inverse[1, 1]) - Math.Sqrt(D)) / 2;
x_2 = (-1 *(Multip_of_A_A_B_inverse[0, 0] + Multip_of_A_A_B_inverse[1, 1]) + Math.Sqrt(D)) / 2;
Console.WriteLine("Собственные числа имеют вид: x = {0}, x2 = {1}", x, x_2);

}
}
static void Main(string[] args)


{
int N = 2;
Console.WriteLine("Введите элементы матрицы А: ");
double[,] A = new double[N,N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
A[i, j] = double.Parse(Console.ReadLine());
}
}
Console.WriteLine("Введите элементы матрицы B: ");
double[,] B = new double[N, N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
B[i, j] = double.Parse(Console.ReadLine());
}
}
double[,] tmp_A = new double[N, N];
FindAlgDop(A, N, tmp_A);
Transpose_Matrix(N, tmp_A);
double[,] inv = new double[N, N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
inv[i, j] = tmp_A[i, j] / FindDeterminant(A, N);
}
}
solution(N,A,B,inv);
Console.ReadKey();
}
Инструкция по работе с кодом программы была написана для запуска в Microsoft Visual Studio.
Для начала компиляции кода программы, необходимо нажать на кнопку Start на панели инструментов Microsoft Visual Studio или кнопку F5 на клавиатуре. В случае, если при компиляции не были обнаружены синтаксические или прочие ошибки, код успешно компилируется и выводится программа в окне консоли (черное окно вывода).
Для определения искомой величины необходимо ввести элементы матриц А и B:
"Введите элементы матрицы А: "
1 Enter;
2 Enter;
3 Enter;
4 Enter;
"Введите элементы матрицы B: "
1 Enter;
2 Enter;
3 Enter;
4 Enter;
Далее, программа производит расчет и выводит сообщение с искомой величиной или уведомлением в окно консоли:
"Собственные числа имеют вид: x = 0,138593383654928, x2 = 28,8614066163451"

Рис. 68 Результат работы программы по вычислению собственных чисел.

Download 13,81 Mb.

Do'stlaringiz bilan baham:
1   ...   10   11   12   13   14   15   16   17   ...   20




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish