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

Лабораторная работа №2

.pdf
Скачиваний:
1
Добавлен:
24.01.2025
Размер:
697.83 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное автономное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

«Численное решение системы нелинейных уравнений» Отчет по лабораторной работе №2

по дисциплине «Численные методы»

Студент гр. 723-1

_________Лысенко Е.М.

__________

Принял

Ст. преподаватель

кафедры КИБЭВС

________ Катаева Е.С.

__________

Томск 2024

Задание

С помощью разработанной на лабораторном занятии программы решить систему уравнений:

2x12 + 4x1 * x2 – 8 = 0; 3x12 – x1 * x2 – 12 = 0

В качестве ответа указать первую компоненту вектора X с точностью до двух знаков после запятой.

2

Содержание

Введение...................................................................................................................

4

ХОД РАБОТЫ .........................................................................................................

5

1 Решение СНУ методом Ньютона ....................................................................

5

1.1

Проверочная система уравнений...............................................................

5

1.2

Индивидуальная система уравнений ........................................................

6

Заключение ..............................................................................................................

9

Приложение А .......................................................................................................

10

3

Введение

Целью лабораторной работы является освоить методы отделения и уточнения решения систем нелинейных уравнений.

4

ХОД РАБОТЫ

1 Решение СНУ методом Ньютона

1.1 Проверочная система уравнений

Согласно заданию, сначала была написана программа, реализующая метод Ньютона. Корректность программы была проверена сначала на проверочной системе, которая показана на рисунке 1.1.

Рисунок 1.1 – Проверочная система уравнений

Для проверочной системы экспериментально были получены начальные границы промежутка (Рисунок 1.2).

Рисунок 1.2 - График проверочной системы

5

На рисунке 1.3 представлен результат работы программы системы уравнений методом Ньютона по проверочному варианту.

Рисунок 1.3 – Результат работы программы для проверочного варианта

1.2 Индивидуальная система уравнений

Индивидуальная система уравнений представлена на рисунке 1.4.

Рисунок 1.4 – Индивидуальная система уравнений

Начнем с этапа отделения решения. Приведем систему к виду:

Для тренировочной и индивидуальной системы экспериментально были получены начальные границы промежутка (Рисунок 1.5).

6

Рисунок 1.5 - График индивидуальной системы

В результате построения графика видим, что решение системы находится в диапазоне:

1 < x1 < 2,5

1 < x2 < 2,5

Соответственно, в качестве начальных точек можно взять например:

x1(0) = 1,5 * x2(0) = 1,5

На рисунке 1.6 представлен результат работы программы системы уравнений методом Ньютона по индивидуальному варианту.

Рисунок 1.6 – Результат работы для индивидуального варианта

7

В таблице 1.1 представлены данные, полученные в итоге решения программы по двум системам нелинейных уравнений.

Таблица 1.1 – Решения систем уравнений

 

Начальная точка

Число итераций

Решение

 

 

 

 

Проверочная

1

6

1,546

система

1

 

1,502

 

 

 

 

Индивидуальная

1,5

4

2

система

1,5

 

0

 

 

 

 

В приложении А представлен листинг программы решения системы

уравнений методом Ньютона.

8

Заключение

В ходе данной работы были приобретены навыки работы с методом Ньютона для решения систем нелинейных уравнений.

Отчет был написан согласно ОС ТУСУР 01-2021.

9

Приложение А

using System; class Program

{

static void Main(string[] args)

{

double x0 = 1.5; double y0 = 1.5; double E = 0.001;

double deltaX1, deltaX2; double x1 = x0, x2 = y0; int count = 0;

do

{

double f1 = 2 * x1 * x1 + 4 * x1 * x2 - 8; double f2 = 3 * x1 * x1 - x1 * x2 - 12; double df1dx1 = 4 * x1 + 4 * x2;

double df1dx2 = 4 * x1; double df2dx1 = 6 * x1 - x2; double df2dx2 = -x1;

double determinant = df1dx1 * df2dx2 - df1dx2 * df2dx1; deltaX1 = (f1 * df2dx2 - f2 * df1dx2) / determinant; deltaX2 = (df1dx1 * f2 - df2dx1 * f1) / determinant;

x1 -= deltaX1;

x2 -= deltaX2; count++;

} while (Math.Abs(deltaX1) > E && Math.Abs(deltaX2) > E);

Console.WriteLine("Начальная точка: x0 = " + x0 + ", y0 = " + y0); Console.WriteLine("x = {0}, y = {1}", (Math.Round(x1, 3)), (Math.Round(x2,

3)));

Console.WriteLine("Число итераций: " + count);

}

}

10