Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ВычМат / ВычМат(1)

.docx
Скачиваний:
9
Добавлен:
31.05.2018
Размер:
1.72 Mб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

НАБЕРЕЖНОЧЕЛНИНСКИЙ ИНСТИТУТ (ФИЛИАЛ)

КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ

ЛАБОРАТОРНАЯ РАБОТА №1

«Решение системы линейных уравнений прямыми методами»

По дисциплине

«Вычислительная математика»

Выполнил:

Студент группы 2161121

Золотых С.В.

Проверил:

Мингалеева Л.Б.

Набережные Челны

2018

Цель

Решить систему линейных уравнений методами: Крамера, Гаусса и Гаусса-Жордана

Ход выполнения работы:

Обычная реализация:

Решение в MS-Excel

Метод Крамера:

Метод Гаусса

Метод Гаусса-Жордана

Решение в Scilab

Метод Крамера:

Результат решения:

Метод Гаусса:

Результат решения:

Метод Гаусса-Жордана:

Результат решения:

Решение на языке C#

namespace Линейные_уравнения

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

private void Start_Click(object sender, EventArgs e)

{

//Данные из номера

double[,] matrix_a = {

{3.35, 2.94, 2.53},

{5.41, 4.88, 4.41 },

{3.88, 3.3, 2.78},

};

double[] vector_b = { 70.69, 115.38, 81.07 };

//Вызов методов

Method_Kramer(matrix_a, vector_b);

Method_Gauss(matrix_a,vector_b);

Method_GaussJordan(matrix_a, vector_b);

}

public void Method_Kramer(double[,] a, double[] b) {

//Определитель матрицы

double det_A= a[0, 0] * a[1, 1] * a[2, 2] + a[0, 1] * a[1, 2] * a[2, 0] + a[1, 0] * a[2, 1] * a[0, 2]

-(a[2, 0] * a[1, 1] * a[0, 2] + a[0, 0] * a[2, 1] * a[1, 2] + a[2, 2] * a[1, 0] * a[0, 1]);

//Определитель первой вспомогательной матрицы

double det_B = b[0] * a[1, 1] * a[2, 2] + a[0, 1] * a[1, 2] * b[2] + b[1] * a[2, 1] * a[0, 2]

- (b[2] * a[1, 1] * a[0, 2] + b[0] * a[2, 1] * a[1, 2] + a[2, 2] * b[1] * a[0, 1]);

//Определитель второй вспомогательной матрицы

double det_C = a[0, 0] * b[1] * a[2, 2] + b[0] * a[1, 2] * a[2, 0] + a[1, 0] * b[2] * a[0, 2]

- (a[2, 0] * b[1] * a[0, 2] + a[0, 0] * b[2] * a[1, 2] + a[2, 2] * a[1, 0] * b[0]);

//Определитель третьей вспомогательной матрицы

double det_D = a[0, 0] * a[1, 1] * b[2] + a[0, 1] * b[1] * a[2, 0] + a[1, 0] * a[2, 1] * b[0]

- (a[2, 0] * a[1, 1] * b[0] + a[0, 0] * a[2, 1] * b[1] + b[2] * a[1, 0] * a[0, 1]);

//Находим значения переменных

double x1 = Math.Round(det_B / det_A,4);

double x2 = Math.Round(det_C / det_A,4);

double x3 = Math.Round(det_D / det_A,4);

label1.Text = Convert.ToString("x1 = " + x1);

label2.Text = Convert.ToString("x2 = " + x2);

label3.Text = Convert.ToString("x3 = " + x3);

}

public void Method_Gauss(double[,] a, double[] b) {

//Меняем вторую строчку

a[1, 1] = a[1, 1] - a[0, 1] * (a[1, 0] / a[0, 0]);

a[1, 2] = a[1, 2] - a[0, 2] * (a[1, 0] / a[0, 0]);

b[1]= b[1] - b[0] * (a[1, 0] / a[0, 0]);

//Меняем третью строчку первый раз

a[2,1]= a[2, 1] - a[0, 1] * (a[2, 0] / a[0, 0]);

a[2,2]= a[2, 2] - a[0, 2] * (a[2, 0] / a[0, 0]);

b[2]= b[2] - b[0] * (a[2, 0] / a[0, 0]);

//Меняем третью строчку второй раз

a[2,2] = a[2,2] - a[1,2] * (a[2, 1] / a[1, 1]);

b[2] = b[2] - b[1] * (a[2, 1] / a[1, 1]);

//Находим значения переменных

double x3 = Math.Round((b[2] / a[2,2]),4);

double x2 = Math.Round(((b[1] - a[1,2] * x3) / a[1,1]),4);

double x1 = Math.Round(((b[0] - a[0, 1] * x2 - a[0, 2] * x3) / a[0, 0]),4);

label4.Text = Convert.ToString("x1 = " + x1);

label5.Text = Convert.ToString("x2 = " + x2);

label6.Text = Convert.ToString("x3 = " + x3);

}

public void Method_GaussJordan(double[,] a, double[] b) {

//Меняем вторую строчку

a[1, 1] = a[1, 1] - a[0, 1] * (a[1, 0] / a[0, 0]);

a[1, 2] = a[1, 2] - a[0, 2] * (a[1, 0] / a[0, 0]);

b[1] = b[1] - b[0] * (a[1, 0] / a[0, 0]);

//Меняем третью строчку первый раз

a[2, 1] = a[2, 1] - a[0, 1] * (a[2, 0] / a[0, 0]);

a[2, 2] = a[2, 2] - a[0, 2] * (a[2, 0] / a[0, 0]);

b[2] = b[2] - b[0] * (a[2, 0] / a[0, 0]);

//меняем первую строчку первый раз

a[0, 2] = a[0, 2] - a[1, 2] * (a[0, 1] / a[1, 1]);

b[0] = b[0] - b[1] * (a[0, 1] / a[1, 1]);

//Меняем третью строчку второй раз

a[2, 2] = a[2, 2] - a[1, 2] * (a[2, 1] / a[1, 1]);

b[2] = b[2] - b[1] * (a[2, 1] / a[1, 1]);

//Меняем вторую строчку второй раз

b[1] = b[1] - b[2] * (a[1, 2] / a[2, 2]);

//Меняем первую строчку второй раз

b[0] = b[0] - b[2] * (a[0, 2] / a[2, 2]);

//Находим значения переменных

double x1 = Math.Round((b[0] / a[0, 0]),4);

double x2 = Math.Round((b[1] / a[1, 1]),4);

double x3 = Math.Round((b[2] / a[2, 2]),4);

label7.Text = Convert.ToString("x1 = " + x1);

label8.Text = Convert.ToString("x2 = " + x2);

label9.Text = Convert.ToString("x3 = " + x3);

}

private void button1_Click(object sender, EventArgs e)

{

//Данные из номера

double[,] matrix_a = {

{0.5,1,1 },

{3,-5,3},

{2,7,-1},

};

double[] vector_b = {2,1,8};

//Вызов методов

Method_Kramer(matrix_a, vector_b);

Method_Gauss(matrix_a, vector_b);

Method_GaussJordan(matrix_a, vector_b);

}

Результат решения:

Вывод

На практике закрепила знания о решении систем линейных уравнений прямыми методами (метод Крамера, метод Гаусса и Гаусса-Жордана). Выполнение заданий по варианту было реализовано с помощью обычного решения, таблиц MS-Excel, Scilab и программы на языке C#. В ходе выполнения лабораторных изучила среду Scilab, вспомнила знания о языке C# и работу с таблицами и формулами в Excel.

Соседние файлы в папке ВычМат