Частина тексту файла (без зображень, графіків і формул):
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»
/
Лабораторна робота №1
з навчальної дисципліни: "Комп’ютерні методи дослідження інформаційних процесів та систем"
на тему «МЕТОДИ УТОЧНЕННЯ КОРЕНІВ
НЕЛІНІЙНИХ РІВНЯНЬ»
Мета роботи – ознайомлення з методами уточнення коренів нелінійних рівнянь з одним невідомим.
Метод хорд
Метод забезпечує швидшу збіжність, ніж метод поділу навпіл. Ідея методу в тому, що на проміжку дугу кривої заміняють хордою, яка її стягує. За наближене значення кореня приймають точку перетину хорди з віссю абсцис (точка А на Рис.2)
Рис.2
Рівняння прямої, яка проходить через точки і :
Точка А є наближеним коренем , яка була знайдена з рівняння прямої, якщо покласти , :
Далі застосовуємо метод хорд до відрізку :
Таким чином, ітераційна формула методу хорд має вигляд:
(4)
За наведеними формулами обчислюють корені також і тоді, коли ; ; ; . Тобто коли - застосовують (4).
У випадку, коли перша і друга похідні мають різні знаки, тобто , ітераційна формула має інший вигляд:
(5)
Метод хорд – це метод одностороннього наближення. Один край відрізку фіксується, а інший змінюється. Зауважимо, що формули (4) та (5) тотожні. Узагальнити їх можна так. Якщо виконується співвідношення (6):
, (6)
фіксується точка а: . В іншому випадку фіксується точка b: . При цьому ітераційна формула методу хорд має вигляд:
, (7)
де початкове значення - край відрізка , протилежний до обраного
Обчислення виконуються доти, доки різниця між черговими i не стане меншою за задану граничну абсолютну похибку Е:
ЗАВДАННЯ ДО ЛАБОРАТОРНОЇ РОБОТИ
Знайти корінь рівняння з граничною абсолютною похибкою Е = 10–4, відокремлений на відрізку [a, b]. Методи чисельного розв’язування задаються викладачем.
11
x3 – x2 + 3 = 0
[–2;–1]
Блок-схема алгоритму
Текст програми
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace metodHord
{
class Program
{
static void Main(string[] args)
{
double x0 = -2;
double x1 = -1;
double e = 0.0001;
double x = method_chord(x0, x1, e);
Console.WriteLine(x);
Console.ReadLine();
}
public static double method_chord(double x_prev, double x_curr, double e)
{
double x_next = 0;
double tmp;
do
{
tmp = x_next;
x_next = x_curr - f(x_curr) * (x_prev - x_curr) / (f(x_prev) - f(x_curr));
x_prev = x_curr;
x_curr = tmp;
} while (Math.Abs(x_next - x_curr) > e);
return x_next;
}
public static double f(double x)
{
return Math.Pow(x, 3) - Math.Pow(x, 2) + 3;
}
}
}
MATLAB
/
z = -1.1745596184491
Результат виконання програми
/