Курсовая работа (т): Итерационный метод вращений Якоби

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

Список литературы


1. Бахвалов Н.С. Численные методы. М.: Наука, 1987. 600 с.

2. Бусленко H. П., Голенко Д.И., Соболь И.М., Срагович В.Г., Шрейдер Ю.А.. Метод статистических испытаний (метод Монте-Карло). М.: Физматгиз, 1962. 332 с.

3. Бусленко Н.П., Шрейдер Ю.А. Метод статистических испытаний (Монте-Карло) и его реализация на цифровых вычислительных машинах. М.: Государственное издательство физико-математической литературы, 1961. 226 с.

4. Демидович Б.П., Марон И.А. Основы вычислительной математики. М.: Наука, 1966. 664 с.

5. Ермаков С.М. Метод Монте-Карло и смежные вопросы. М.: Наука, 1975. 294 с.

6. Калиткин Н.Н. Численные методы. М.: Наука, 1978. 512 с.

7. Копчёнова Н.В., Марон И.А. Вычислительная математика в примерах и задачах. М.: Наука, 1972. 368 с.

Приложение 1. Листинг программы


using System;System.Collections.Generic;System.Linq;System.Text;Числаки

{RotationMethod

{static double Max(double[,] matrix, out int index_i, out int index_j)

{_i = 0;_j = 1;max = Math.Abs(matrix[1,0]);(int i = 0; i < matrix.GetLength(0); i++)(int j = i + 1; j < matrix.GetLength(1); j++)(Math.Abs(matrix[i, j]) > max)

{= Math.Abs(matrix[i, j]);_i = i;_j = j;

}max;

}static double[,] CreateRotationMatrix(int rows, int columns, int i, int j, double cos_phi, double sin_phi)

{[,] matrix_h = new double[rows, columns];_h[i,i] = cos_phi;_h[j,j] = cos_phi;_h[i,j] = - sin_phi;_h[j,i] = sin_phi;(int k = 0; k < rows; k++)(int l = 0; l < columns; l++)

{(k == l && k != i && k != j)

{_h[k, l] = 1;

}

}matrix_h;

}static double[,] Transpose(double[,] matrix)

{[,] matrix_transpose = new double[matrix.GetLength(1), matrix.GetLength(0)];(int i = 0; i < matrix.GetLength(0); i++)(int j = 0; j < matrix.GetLength(1); j++)_transpose[j, i] = matrix[i, j];matrix_transpose;

}static double[,] Multiply(double[,] matrix_1, double[,] matrix_2)

{(matrix_1.GetLength(0) != matrix_2.GetLength(1)) throw new Exception("Некорректная размерность матриц");[,] matrix_multiply = new double[matrix_1.GetLength(0), matrix_2.GetLength(1)];(int i = 0; i < matrix_multiply.GetLength(0); i++)(int j = 0; j < matrix_multiply.GetLength(1); j++)(int k = 0; k < matrix_1.GetLength(0); k++)

{_multiply[i, j] += matrix_1[i, k] * matrix_2[k, j];

}matrix_multiply;

}static double[] Rotation(double[,] matrix, double eps, out double[,] matrix_vector)

{[] vector_eigenvals = new double[matrix.GetLength(0)];[,] matrix_a = matrix;i, j;count = 0;max = Max(matrix_a, out i, out j);.WriteLine("Max={0:0.###},\ti={1:0.###},\tj={2:0.###}", max, i, j);cos_phi = Math.Sqrt(0.5 * (1 + 1 / Math.Sqrt(1 + (2 * matrix_a[i, j] / (matrix[i, i] - matrix[j, j])) * (2 * matrix_a[i, j] / (matrix[i, i] - matrix[j, j])))));sin_phi = Math.Sqrt(0.5 * (1 - 1 / Math.Sqrt(1 + (2 * matrix_a[i, j] / (matrix[i, i] - matrix[j, j])) * (2 * matrix_a[i, j] / (matrix[i, i] - matrix[j, j])))));.WriteLine("Cos_phi={0}\tSin_phi={1}", cos_phi, sin_phi);title_h = "Матрица H_" + count + ":";[,] matrix_h = CreateRotationMatrix(matrix_a.GetLength(0), matrix_a.GetLength(1), i, j, cos_phi, sin_phi);(title_h, matrix_h);title_a = "Матрица A_" + count + ":";_a = Multiply(Multiply(Transpose(matrix_h), matrix_a), matrix_h);(title_a, matrix_a);_vector = matrix_h;(max > eps)

{++;= Max(matrix_a, out i, out j);.WriteLine("Max={0:0.###},\ti={1:0.###},\tj={2:0.###}", max, i, j);_phi = Math.Sqrt(0.5 * (1 + 1 / Math.Sqrt(1 + (2 * matrix_a[i, j] / (matrix_a[i, i] - matrix_a[j, j])) * (2 * matrix_a[i, j] / (matrix_a[i, i] - matrix_a[j, j])))));_phi = Math.Sqrt(0.5 * (1 - 1 / Math.Sqrt(1 + (2 * matrix_a[i, j] / (matrix_a[i, i] - matrix_a[j, j])) * (2 * matrix_a[i, j] / (matrix_a[i, i] - matrix_a[j, j])))));.WriteLine("Cos_phi={0}\tSin_phi={1}", cos_phi, sin_phi);_h = "Матрица H_" + count + ":";_h = CreateRotationMatrix(matrix_a.GetLength(0), matrix_a.GetLength(1), i, j, cos_phi, sin_phi);(title_h, matrix_h);_a = "Матрица A_" + count + ":";_a = Multiply(Multiply(Transpose(matrix_h), matrix_a), matrix_h);(title_a, matrix_a);_vector = Multiply(matrix_vector, matrix_h);

}(int l = 0; l < vector_eigenvals.GetLength(0); l++)_eigenvals[l] = matrix_a[l, l];vector_eigenvals;

}void PrintMatrix(string header, Array matrix)

{i = 0;.WriteLine();.WriteLine(header);(object x in matrix)

{(i == matrix.GetLength(1))

{.WriteLine();= 0;

}++;.Write("{0,11:0.#######}", x);

}.WriteLine();.WriteLine();

}void PrintVector(string header, string index, Array vector)

{i = 1;.WriteLine();.WriteLine(header);(object x in vector)

{.WriteLine("{0,6}[{1}]={2}", index, i, x);++;

}

}void Main()

{

{[,] matrix = { { 5, 1, 2 }, { 1, 4, 1 }, { 2, 1, 3 } };eps = 1e-3;[,] matrix_vector = new double[matrix.GetLength(0), matrix.GetLength(1)];[] vector_eigenvals = new double[matrix.GetLength(0)];("Исходная матрица:", matrix);_eigenvals = Rotation(matrix, eps, out matrix_vector);("Собственные значения", "lambda", vector_eigenvals);("Собственные вектора:", matrix_vector);

Console.ReadLine();

}(Exception e)

{.WriteLine(e.Message);.ReadLine();

}

}

}

}

Приложение 2. Пример результата работы программы





Источник: https://www.bibliofond.ru/detail.aspx?id=877952