Деньги, как известно, имеют различные функции. Одной из них является непрестанное движение денег в обращении, обслуживание процесса обращения. Без выполнения деньгами этой функции торговля была бы невозможна.

Рішення нелінійних рівнянь в Matlab

  1. Загальна інформація
  2. Стандартні функції Matlab
  3. Метод перебору Matlab
  4. Метод простих ітерацій Matlab
  5. Метод половинного ділення Matlab
  6. висновок

Доброго часу доби. У цій статті ми розберемо рішення простих нелінійних рівнянь за допомогою засобів Matlab. Подивимося в дії як стандартні функції, так і самі запрограмуємо три найпоширеніші методи для вирішення нелінійних рівнянь.

Загальна інформація

Рівняння, які містять змінні, що знаходяться в ступенях, що відрізняються від одиниці, або мають нелінійні математичні вирази (корінь, експонента, логарифм, синус, косинус і т.д.), а також мають вигляд f (x) = 0 називаються нелінійними. Залежно від складності такого рівняння застосовують методи для вирішення нелінійних рівнянь.

У цій статті, крім стандартних функцій Matlab, ми розглянемо такі методи:

  • метод перебору
  • Метод простих ітерацій
  • Метод половинного ділення

Розглянемо коротко їх алгоритми і застосуємо для вирішення конкретного завдання.

Стандартні функції Matlab

Для вирішення нелінійних рівнянь в Matlab є функція fzero. Вона приймає в якості аргументів саму функцію, яку вирішуємо, і відрізок, на якому відбувається пошук коренів нелінійного рівняння.

І відразу ж розберемо приклад:

Вирішити нелінійне рівняння x = exp (-x), попередньо визначивши інтервали, на яких існують рішення рівняння.

Отже, для початку слід привести рівняння до потрібного вигляду: x - exp (-x) = 0, а потім визначити інтервали, в яких будемо шукати рішення рівняння. Методів для визначення інтервалів безліч, але так як приклад досить простий ми скористаємося графічним методом.

x = -4.0: 0.001: 4.0; y = x - exp (-x); plot (x, y); grid on;

Тут задали приблизні межі по осі x, щоб можна було побудувати графік і подивитися як поводиться функція. Ось графік:
Тут задали приблизні межі по осі x, щоб можна було побудувати графік і подивитися як поводиться функція
З графіка видно, що на відрізку [0; 1] є корінь рівняння (там, де y = 0), відповідно в подальшому будемо використовувати цей інтервал. Чим точніше обраний інтервал, тим швидше метод прийде до вирішення рівняння, а для складних рівнянь правильний вибір інтервалу визначає похибка, з якою буде отримана відповідь.

x0 = fzero ( '(x - exp (-x))', [0.0 1.0]); x0 = 0.5671

За допомогою стандартної функції Matlab знаходимо корінь нелінійного рівняння і виводимо. Тепер для перевірки відобразимо всі це графічно:

plot (x, y); grid on; hold on; plot (x0,0, 'r *');

Як ви бачите, все досить точно просчиталось. Тепер ми досліджуємо цю ж функцію за допомогою інших методів і порівняємо отримані результати.

Метод перебору Matlab

Найпростіший метод, який полягає в тому, що спочатку задається якийсь наближення x (бажано зліва від передбачуваного кореня) і значення кроку h. Потім, поки виконується умова f (x) * f (x + h)> 0, значення x збільшується на значення кроку x = x + h. Як тільки умова перестало виконуватися - це значить, що рішення нелінійного рівняння знаходиться на інтервалі [x; x + h].

Тепер реалізуємо метод перебору в Matlab:

f = inline ( 'x - exp (-x)'); h = 0.0001; % Задаємо крок x = 0,0; % Початкове наближення i = 0; % Лічильник ітерацій while (f (x) * f (x + h))> 0 x = x + h; i = i + 1; end x% виводимо рішення i% і витрачений кількість ітерацій

Найкраще створити новий m-файл, в якому і прописати код. Після виклику отримуємо такий висновок:

x = 0.5671 i = 5671

Функцію оголошуємо за допомогою дуже корисною команди inline, в циклі поки виконується умова відсутності коренів (або їх парного кількості), додаємо до x значення кроку. Очевидно, що чим точніше початкове наближення, тим менше ітерацій необхідно затратити.

Метод простих ітерацій Matlab

Цей метод полягає в тому, що функцію перетворять до вигляду: x = g (x). Ці перетворення можна зробити різними способами, в залежності від виду початкової функції. Крім цього слід задати інтервал, в якому і буде проводитися ітераційний процес, а також початкове наближення. Сам процес будується за схемою xn = g (xn-1). Тобто ітераційно проходимо від попереднього значення до наступного.

Процес закінчується як тільки виконається умова: Процес закінчується як тільки виконається умова:   , Тобто, як тільки буде досягнута задана точність , Тобто, як тільки буде досягнута задана точність. І відразу ж розберемо реалізацію методу простих ітерацій в Matlab для прикладу, який був наведений вище.

f = inline ( 'x - exp (-x)'); x0 = 0,0; % Початкове наближення eps = 0.00001; % Точність N = 100; % Кількість ітерацій, щоб не було зациклення g = inline ( 'exp (-x)'); x1 = g (x0); % Перше значення for i = 1: N% робимо максимум 100 ітерацій if abs (x1 - x0) <= eps break end x0 = x1; x1 = g (x0); end x1 i

Тут має бути все зрозуміло, крім одного: навіщо ставити число ітерацій? Це потрібно для того, щоб програма не зациклюватися і не виконувала непотрібні ітерації, а також тому що не завжди програма може прорахувати рішення з потрібною точністю - тому слід обмежувати число ітерацій.

А ось і висновок програми:

x1 = 0.5671 i = 22

Очевидно, що метод простих ітерацій працює набагато швидше і отримує точне рішення.

Метод половинного ділення Matlab

Метод досить простий: існує відрізок пошуку рішення [a; b], спочатку знаходять значення функції в точці середини c, де c = (a + b) / 2. Потім порівнюють знаки f (a) і f (c). Якщо знаки різні - то рішення знаходиться на відрізку [a; c], якщо немає - то рішення знаходиться на відрізку [c; b]. Таким чином ми скоротили область в 2 рази. Таке скорочення відбувається і далі, поки не досягнемо заданої точності.

Перейдемо до реалізації методу в Matlab:

f = inline ( 'x - exp (-x)'); eps = 0.00001; a = 0,0; b = 1.0; i = 0; while abs (a - b)> eps c = (a + b) / 2; if ((f (c) * f (a)) <0) b = c; else a = c; end i = i + 1; end c i

Все найважливіше відбувається в циклі: послідовно скорочуємо область знаходження рішення, поки не буде досягнута задана точність.
Ось що вийшло у висновку:

c = 0.5671 i = 17

Цей метод добре працює, коли правильно визначено інтервал, на якому знаходиться рішення. Проте, метод простих ітерацій вважається найбільш точним і швидким.

висновок

Сьогодні ми розглянули рішення нелінійних рівнянь в Matlab. Тепер нам відомі методи перебору, половинного ділення, простих ітерацій. А також, коли нам не важливо реалізація методу, то можна використовувати стандартну функцію в Matlab.

На цьому все - спасибі за увагу. У наступній статті ми розберемо рішення систем нелінійних рівнянь в matlab .

схоже