Essays.club - Получите бесплатные рефераты, курсовые работы и научные статьи
Поиск

Лабораторна робота з «Чисельні методи»

Автор:   •  Октябрь 31, 2023  •  Лабораторная работа  •  4,153 Слов (17 Страниц)  •  66 Просмотры

Страница 1 из 17

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

з дисципліни: «Чисельні методи»

Завдання (Варіант 4):

Напишіть програму визначення нуля заданої функції однією з алгоритмічних мов. Програма має містити чотири алгоритми, які грунтуються на таких методах: половинного ділення, хорд,Ньютона; комбінованого хорд і дотичнихВихіднідані для програми: [а, б]–інтервал ізоляції кореня; f(x) –функція, нуль якої відшукується.Результатом роботи програми є масив, який містить у собі таблицю послідовних наближень нуля функції і значень самої функції,атакож графіки функції та пошуку.

Виконання завдання:

Які методи та формули використані:

  • У всіх методах використовується інтервал [a, b] як початковий інтервал для пошуку кореня.
  • При обчисленні похибки використовується умова error >= epsilon, де epsilon - задана точність пошуку.
  1. Метод половинного ділення:
  • Використовується формула x = (a + b) / 2 для знаходження середини інтервалу.
  • У кожній ітерації перевіряється, на якому півінтервалі розташований корінь функції.
  • Вибирається новий інтервал [a, x] або [x, b] залежно від положення кореня.
  • Повторюється до досягнення заданої точності.
  1. Метод хорд:
  • Використовується формула x = (a * f(b) - b * f(a)) / (f(b) - f(a)) для знаходження нового наближення до кореня.
  • У кожній ітерації розраховується значення функції f(x) для нового x.
  • Вибирається новий інтервал [a, x] або [x, b] залежно від знаку f(x).
  • Повторюється до досягнення заданої точності.
  1. Метод Ньютона:
  • Використовується формула x = x - f(x) / f'(x) для знаходження нового наближення до кореня.
  • У кожній ітерації розраховується значення похідної функції f'(x) для поточного x.
  • Вибирається новий інтервал [a, x] або [x, b] залежно від знаку f(x).
  • Повторюється до досягнення заданої точності.
  1. Комбінований метод хорд і дотичних:
  • Поєднує принципи методів хорд і Ньютона.
  • Використовується формула x = x - f(x) * (xTangent - x) / (f(xTangent) - f(x)), де xTangent - точка перетину дотичної до графіка функції з осі абсцис з відрізком [a, b].
  • У кожній ітерації розраховується значення функції f(x) та похідної функції f'(x) для поточного x та xTangent.
  • Вибирається новий інтервал [a, x] або [x, b] залежно від знаку f(x).
  • Повторюється до досягнення заданої точності.

Код написаних функцій:

//метод половиного ділення

public static List<IterationResult> bisectionMethod(Function function, double a, double b, double epsilon) {
   List<IterationResult> results =
new ArrayList<>();
   double
fa = function.evaluate(a);
   double
fb = function.evaluate(b);

   if
(fa * fb >= 0) {
       System.
out.println("No root found in the given interval for Bisection Method");
       return
results;
   
}

   
int iteration = 0;
   double
x = a;
   double
fx = fa;
   double
error = Math.abs(b - a);

   while
(error >= epsilon) {
       
double prevX = x;
       
x = (a + b) / 2;
       
fx = function.evaluate(x);

       if
(fa * fx < 0) {
           b = x
;
           
fb = fx;
       
} else {
           a = x
;
           
fa = fx;
       
}

       error = Math.
abs(x - prevX);
       
results.add(new IterationResult(iteration, x, fx));
       
iteration++;
   
}

   
return results;
}

//метод хорд


public static List<IterationResult> chordMethod(Function function, double a, double b, double epsilon) {
   List<IterationResult> results =
new ArrayList<>();
   double
fa = function.evaluate(a);
   double
fb = function.evaluate(b);

   if
(fa * fb >= 0) {
       System.
out.println("No root found in the given interval for Chord Method");
       return
results;
   
}

   
int iteration = 0;
   double
x = a;
   double
fx = fa;
   double
error = Math.abs(b - a);

   while
(error >= epsilon) {
       
double prevX = x;
       
x = (a * function.evaluate(b) - b * function.evaluate(a)) / (function.evaluate(b) - function.evaluate(a));
       
fx = function.evaluate(x);

       if
(fa * fx < 0) {
           b = x
;
           
fb = fx;
       
} else {
           a = x
;
           
fa = fx;
       
}

       error = Math.
abs(x - prevX);
       
results.add(new IterationResult(iteration, x, fx));
       
iteration++;
   
}

   
return results;
}

...

Скачать:   txt (21.1 Kb)   pdf (341.4 Kb)   docx (359.5 Kb)  
Продолжить читать еще 16 страниц(ы) »
Доступно только на Essays.club