ЧислМетодЛаб2
.docx
|
|
|
Министерство науки и высшего образования Российской Федерации
Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Факультет безопасности (ФБ)
Кафедра безопасности информационных систем (БИС)
ЧИСЛЕННОЕ РЕШЕНИЕ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ
Отчёт по лабораторной работе 2
по дисциплине «Численные методы»
|
|
Студент гр.731-2 |
|
|
__________ Батаев А.С. |
|
|
28.10.2022 |
|
|
|
|
|
Руководитель: Доцент кафедры КИБЭВС |
|
|
__________ __________ Якимук А.Ю. |
|
|
28.10.2022 |
Томск 2022
Оглавление
Y
1 Введение 3
После была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка со значением 0, потому что при этом значении количество итераций всех методов минимально. 3
2 Ход работы 4
2.1 Этап отделения 4
Производная функции: 4
Также была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка с значением -1, потому что при этом значении количество итераций всех методов минимально. 4
2.2 Нахождение корня 5
Листинг программы представлен в Приложении А. 5
2.3 Таблица результатов 5
3 Заключение 6
1 Введение
Цель работы: получить навыки решения нелинейного уравнения с одной переменной методом ньютона, простых итераций и методом дихотомии.
Для тестирования использовать систему уравнений:
x2 + 4x − 5 = 0
Найдем производную функции:
2x + 4
После была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка со значением 0, потому что при этом значении количество итераций всех методов минимально.
Рисунок 1 – Работа программы с тестовой системой
Решения: x1 = −5; x2 = 1.
2 Ход работы
2.1 Этап отделения
Первым шагом была найдена производная индивидуальной функции. Индивидуальная функция:
0.13x2 + 0.28x + 0.1;
Производная функции:
0.26x + 0.28;
Также была экспериментально вычислена начальная граница промежутка. Для тестовой системы начальной точкой была выбрана точка с значением -1, потому что при этом значении количество итераций всех методов минимально.
Конечная граница интервала была найдена программным методом LastPoint.
2.2 Нахождение корня
Листинг программы представлен в Приложении А.
Рисунок 2 – Работа программы с реальной системой
2.3 Таблица результатов
Таблица 1 – Значения корней
Метод |
Начальная точка |
Число итераций |
Корень |
Дихотомии |
-1 |
13 |
-0,4525 |
Ньютона |
-1 |
4 |
-0,4482 |
Простых итераций |
-1 |
18 |
-0,4585 |
3 Заключение
В ходе выполнения данной лабораторной работы были получены навыки решения нелинейного уравнения с одной переменной методом ньютона, простых итераций и методом дихотомии.
Приложение A
(Обязательное)
Код приложения
using System;
namespace chislmethods3
{
class Program
{
static double Function(double x)
{
return 0.13 * x * x + 0.28 * x + 0.1;
}
static double FunctionDerivative(double x)
{
return 0.13 * x + 0.28;
}
static double SupportFunction(double x, double l)
{
return Function(x) * l + x;
}
private static double LastPoint(double lastpont)
{
for (double i = lastpont; i <= Math.PI; i++)
{
if (Function(lastpont) * Function(i) < 0)
{
return i;
}
else lastpont++;
}
return lastpont;
}
static void MethodDichotomy(double firstpoint, double lastpoint)
{
int step = 0;
double x = 0;
double medium = (firstpoint + lastpoint) / 2;
while (lastpoint - firstpoint > 0.001 || Function(medium) > 0.001)
{
medium = (firstpoint + lastpoint) / 2;
if (Function(lastpoint) * Function(medium) < 0)
{
firstpoint = medium;
x = Math.Round(firstpoint, 4);
step++;
}
else
{
lastpoint = medium;
x = Math.Round(lastpoint, 4);
step++;
}
}
Console.WriteLine("Method Dichotomy");
Console.WriteLine($"step: {step}");
Console.WriteLine($"x: {x}\n");
}
static void MethodNewton(double firstpoint, double lastpoint)
{
int step = 0;
double medium = (firstpoint + lastpoint) / 2;
if (Math.Abs(Function(medium)) >= 0.001)
{
while (Math.Abs(Function(medium)) >= 0.001)
{
medium = medium - Function(medium) / FunctionDerivative(medium);
step++;
}
}
else
{
step++;
}
Console.WriteLine("Method Newton");
Console.WriteLine($"step: {step}");
Console.WriteLine($"x: {Math.Round(medium, 4)}\n");
}
static void SimpleIterations(double firstpoint, double lastpoint)
{
double x0, l, x;
x0 = lastpoint;
l = -2 / FunctionDerivative(x0);
int step = 0;
do
{
x = x0;
x0 = SupportFunction(x, l);
step++;
}
while (Math.Abs(x0 - x) > 0.001);
Console.WriteLine("Simple Iterations");
Console.WriteLine($"step: {step}");
Console.WriteLine($"x: {Math.Round(x0, 4)}\n");
}
static void Main(string[] args)
{
double firstpoint = -1, lastpoint;
lastpoint = LastPoint(firstpoint);
if (firstpoint == lastpoint)
{
Console.WriteLine("The equation has no roots");
}
else
{
if (lastpoint < firstpoint)
(firstpoint, lastpoint) = (lastpoint, firstpoint);
MethodDichotomy(firstpoint, lastpoint);
MethodNewton(firstpoint, lastpoint);
SimpleIterations(firstpoint, lastpoint);
}
}
}
}
|
|
|