Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Лабораторна робота №1. Основи програмування в інтегрованій системі MatLab.Стр 1 из 14Следующая ⇒
Основи програмування в інтегрованій системі MatLab. Розв’язання функціональних рівнянь з однією змінною Мета роботи: ознайомитися з програмуванням в інтегрованій системі автоматизації математичних та науково-технічних розрахунків MatLab. Розглянути правила побудови функцій на прикладі одного з методів розв‘язання функціональних рівнянь з однією змінною, проаналізувати отримані помилки, сформувати робочу функцію – m -файл. Задачі лабораторної роботи: реалізувати один з методів розв‘язання функціональних рівнянь з однією змінною у відповідності з варіантом засобами програмування MatLab, продемонструвати його роботу та оцінити точність отриманих розв‘язків на прикладі розв‘язання конкретного функціонального рівняння. Перевірити отримані результати графічним способом.
1.1. Короткі теоретичні відомості по програмуванню в інтегрованій системі автоматизації математичних розрахунків MatLab. Інтегрована система автоматизації математичних та науково-технічних розрахунків MatLab є добре апробованою надійною системою розв‘язання математичних задач з поданням даних у вигляді матриць. Вона розроблена фірмою MathWorks Inc. При створенні багатьох автоматизованих систем математичних обрахунків розробники прагнули уникнути необхідності написання користувачем власних програмних кодів. Але такий підхід значно обмежував можливості користувача при розв‘язанні задач, що використовують нові методи та алгоритми. Розробники MatLab провели величезну роботу по створенню операторів і функцій для розв‘язання багатьох практичних задач. До таких функцій належать як прості (транспонування матриць, обчислення косинуса та ін.) так і складні функції, що реалізують певні методи розв‘язання задач. Число таких функцій сягає багатьох тисяч і невпинно збільшується. А для вирішення задач з використанням алгоритмів користувача, MatLab має потужну математично-орієнтовану мову програмування високого рівня. Тому інтегрована система автоматизації математичних MatLab з успіхом застосовується в багатьох країнах Європи для розв‘язання нових, нестандартних та найбільш складних математичних задач. Мова програмування в системі MatLab нагадує Паскаль. Запис коду програми відбувається у редакторі системи, що викликається з рядка головного меню MatLab командами File ® New ® M-file, але попередньо може бути написаний у будь-якому текстовому редакторі. Файл коду програми називається m -файлом і має розширення. m, тобто можемо записати: filename.m Система MatLab має власний редактор і відладчик. Формули створюваних методів записуються у формі, притаманній мовам програмування, але ця незручність компенсується високою швидкістю обрахунків, яка наприклад на порядок вища ніж у системи MathCad. Мова програмування системи MatLab використовує майже всі відомі засоби програмування, в тому числі об‘єктно-орієнтоване і візуальне програмування. У програмному коді можна використовувати також внутрішні функції MatLab. Це забезпечує великі можливості при створенні програм як початківцям так і досвідченим програмістам.
В системі MatLab реалізовані два підходи до розв’язання задач: ü з використанням внутрішніх функцій, що реалізовані розробниками MatLab, ü за допомогою написаних користувачем власних програм, код яких формується у вигляді m -файлів. Щоб скористатися першим способом розв‘язання задач, достатньо задати значення змінної, набрати потрібне ім‘я внутрішньої функції з обов‘язковими параметрами у рядку запрошення вікна «Command Window» і натиснути «Enter» (рис.1). Якщо у ході розв’язання задачі використовуються кілька методів, то слід викликати їх послідовно, вказуючи необхідні параметри та розділяючи їх крапкою з комою (;). Кожен сеанс роботи в MatLab (у середовищі прийнято іменувати їх сесіями) відображається у вікні «Command Window», він вміщує змінні, значення яких задавалися під час сесії, функції, що викликалися, і всі наслід-ки «проб і помилок» користувача. Як правило при збереженні сеансу користувача цікавлять лише значення змінних та результати обчислень, їх запам‘ятовують у вигляді mat-файлів з використанням функції save filename. Якщо потрібно записати значення лише одної або кількох змінних, то їх імена вказують наприкінці команди запам‘ятовування, наприклад: save filename X; save filename X Y Z. Якщо ж потрібно зберегти весь сеанс з відображенням всіх функцій, повідомлень про помилки та ін., то користуються функцією diary filename. Всі записані таким чином дані відкриваються у вікні «Command Нistory» (рис.1).
Для реалізації власних алгоритмів і методів розв‘язання задач скористайтеся редактором і відладчиком, які дозволяють отримати власну функцію для розв‘язання задачі у вигляді m -файлу. При написанні власного коду і роботі над помилками користувач має викликати її у вікні «Command Window» із вказуванням необхідних параметрів, при цьому у рядку «Current Directory» (рис.1) потрібно вказати повний шлях до папки, в якій знаходиться m-файл. Якщо створений m -файл має помилки, то їх зміст і номер рядка з помилкою виводяться у поточному рядку командного вікна. Серед m -файлів розрізняють файли коду та файли-сценарії. У файлах коду міститься програмний код, який може складатися з однієї чи кількох функцій. У файлах–сценаріях послідовно записують значення змінних, імена внутрішніх функцій та m -файлів, які використовуються для розрахунків. Файли коду. У m -файлі, що містить код, ім‘я вихідної функції повинно співпадати з іменем m -файлу (рис. 2). Внутрішня мова програмування MatLab дуже схожа з мовою програмування Pascal, в ній використовуються ті ж мовні конструкції, відмінності маються лише при зверненні до елементів матриць. Наприклад, якщо потрібно послідовно звертатися до елементів рядка чи стовпчика матриці в MatLab, то на відповідній позиції замість змінної пи-шуть двокрапку (:), тобто М(і,:). При його створенні та перевірці редактор забезпечує синтаксич- ний контроль. Редак-тор має деякі відла-дочні можливості – він дозволяє встано-вити в тексті файлу контрольні точки, в яких призупиняється виконання програми і користувач може оцінити проміжні результати обчислень. Також є можливість покрокового виконання файлу, що особливо важливо при пошуку помилок. Редактор дозволяє зберегти файл в текстовому форматі з розширенням.m Структура m-файлу-функції може бути представлена так:
function var=f_name(список_параметрів) %Основний коментар %Додатковий коментар Тіло файлу з будь-якими виразами var=вираз
Файли, записані з розширенням.m, можуть бути файлами-сценаріями. Такі файли можуть створюватися для задавання функції, введення даних у вигляді векторів чи матриць, побудови графіків із заданими параметрами і т.і. Всі записані в файлі-сценарії дані можливо вводити і в «Command Window», але форма файлу-сценарію більш компактна і його можна зберегти у вигляді файлу. При виклику такого файлу у «Command Window» за його ім‘ям всі записані в файлі дані виводяться на екран, після чого можемо викликати файл коду, який їх використовує, реалізуючи певний метод обчислень. Файл-сценарій (Script-файл) має наступну структуру:
%Основний коментар %Додатковий коментар Тіло файлу з будь-якими виразами. Наприклад: визначимо функцію: . Файл сценарій запишемо у вигляді: function y = stepfunc(x) y = 1 + x^3/12; При виклику функції у «Command Window» відобразяться наступні записи: » stepfunc(3) ans = 3.2500 Іноді корисним є розрахунок значень функції за допомогою команди feval. У її параметрах функція повинна бути представлена, як рядок: » feval (‘stepfunc’, 3) ans = 3.2500 Матриці в середовищі MatLab. Всі дані, що вводяться в середовищі MatLab інтерпретуються, як матриці. При введенні матриць розділовим знаком між елементами рядка є пробіл, а між самими рядками – крапка з комою. Наприклад: » М = [1 2 3; 4 5 6; 7 8 9] M = 1 2 3 4 5 6 7 8 9 Для вказування певного елементу матриці, користуються індексами: » М (2; 2) ans = Можемо також задавати матриці у вигляді арифметичних виразів: » С = [1+3^2 cos(0.5) sqrt(9)] C = 10 0.8776 3 Задавати матрицю можна як змінну діапазону: » U = 0: 0.5: 3 U = 0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 При використанні її в якості аргументу отримаємо матрицю того ж розміру: » sin(U) ans = 0 0.4794 0.8415 0.9975 0.9093 0.5885 0.1411 В середовищі MatLab є функції для створення матриць з нульовими елементами (їх часто використовують, як матрицю для запису результатів обчислень) і одиничних матриць, аргументами цих функцій є їх розмір, що задається у вигляді цілих чисел. » W = zeros(4, 4); створення нульової матриці розміром 4 ´ 4 » H = ones(4, 4); створення матриці з одиничними елементами розміром 4 ´ 4 Операції над матрицями. З матрицями в середовищі MatLab можемо проводити наступні операції: + додавання - віднімання * добуток (множення) ^ піднесення до степеня ' транспонування і спряження
При розв’язанні поставленого в лабораторній роботі завдання студентові потрібно більш детально ознайомитися з особливостями програмування на внутрішній мові інтегрованої системи MatLab. Для цього у додатку В наведено відомості про особливості програмування в MatLab. 2.1. Розв‘язання функціональних рівнянь з однією змінною. 2.1.1. Постановка задачі Важливу задачу прикладного аналізу представляє розв’язок функціональних рівнянь з однією змінною, які застосовуються при описі математичних моделей у фізиці, механіці, економіці та інших науках та прикладних галузях. У загальному вигляді функціональне рівняння записується у вигляді: (1.1) де F(х) визначена і неперервна на скінченому чи нескінченному інтервалі [a, b]. Число називається коренем r кратності, якщо воно задовольняє рівнянням: (1.2) Однократний корінь називається простим. Два рівняння F(х) та G(х) називаються рівносильними, якщо будь-який розв’язок кожного з них є розв’язком і для другого. Функціональні рівняння поділяються на алгебраїчні, якщо функція є алгебраїчною (наприклад: ), та трансцендентні, якщо функція вміщує логарифмічні, тригонометричні та інші неалгебраїчні функції (наприклад: ). Алгебраїчні рівняння поділяються на лінійні й нелінійні. У лінійних рівняннях змінна має лише перший ступінь, а у нелінійних – змінна представлена у другій чи вищих ступенях. Шляхом алгебраїчних перетворень із будь-якого алгебраїчного рівняння можна отримати рівняння в канонічній формі: (1.3) де n – степінь алгебраїчного рівняння. Кожне алгебраїчне рівняння має хоча б один дійсний корінь чи пару комплексних. При зведенні алгебраїчного рівняння до канонічної форми отримаємо ті ж корені, що і для початкового рівняння, але при цьому можуть з’явитися і сторонні корені. Наприклад: (1.4) Якщо функція F(х) не є алгебраїчною, то рівняння (1.1) називається трансцендентним. Наприклад: (1.5) В деяких випадках розв’язування трансцендентних рівнянь зводиться до розв’язання алгебраїчних. Більшість функціональних рівнянь з однією змінною не розв’язуються точними методами шляхом аналітичних перетворень. До того ж, більшість функціональних рівнянь є математичними моделями певних об‘єктів чи явищ, вказати точні параметри (коефіцієнти) яких неможливо. Тому на практиці для їх розв’язання застосовують чисельні методи, більшість з яких є наближеними і дозволяє знайти розв‘язок з певною наперед заданою точністю. У теорії чисельних методів розв’язати рівняння – значить встановити, чи має воно корені на вказаному проміжку, з‘ясувати кількість коренів, відшукати значення всіх виявлених коренів із заданою точністю, тобто корені мають знаходитися у e-околі від точного розв‘язку. Задача чисельного знаходження дійсних і комплексних коренів рівняння зазвичай складається з двох етапів: · відокремлення коренів – знаходження достатньо малих околів у заданій області, в кожному з яких знаходиться тільки один корінь. · уточнення коренів – обчислення коренів із заданим ступенем точності (e) в деякому околі. Для знаходження дійсних коренів рівняння (1.1) застосовуються наступні чисельні методи: § метод половинного ділення (бісекції); § метод хорд; § метод січних; § метод дотичних (Ньютона); § комбінований метод; § метод Рибакова, знаходження всіх дійсних коренів; § метод Ейткена-Стеффенсона; § метод зворотної квадратичної інтерполяції-екстраполяції; § метод порозрядного наближення; § метод простої ітерації. При застосуванні вищенаведених методів важливо забезпечити збіжність їх до розв’язку. По швидкості збіжності до розв‘язку розрізняють: - методи поступового обмеження інтервалу пошуку кореня (методи половинного ділення), ці методи повільно сходяться до розв‘язку; - методи апроксимації функції, які передбачають заміну початкової функції більш простою, та проведення обчислень з використанням спрощеного опису функції (метод хорд, метод Ньютона), дані методи швидше сходяться до розв‘язку. Швидкість збіжності метода характеризує відношення , яке менше одиниці. У відношенні , де х – точне значення розв‘язку, хk – чергове наближення до кореня. Чим менша величина даного відношення, тим швидше збігається метод до розв‘язку.
2.1.2. Етап 1: відокремлення коренів Відокремлення коренів – вста-новлення „тісних” проміжків, кожен з яких вміщує тільки один корінь. Най-більш наочно про демонструвати цей етап можливо графічно. Враховуючи, що дійсні корені рівняння (1.1) – це точки перетину графіка функції F(х) з віссю абсцис, досить побудувати графік F(х) і відмітити на осі OX відрізки, кожен з яких вміщує по одному кореню. Рис. 1.1. Графічний спосіб відокремлення коренів.
Побудову графіка вдається значно спростити, якщо замінити рівняння (1.1) рівносильним йому рівнянням F1(х)= F2(х). В цьому випадку будують графіки функцій F1(х) та F2(х), потім на вісі OX відмічають відрізки, що вміщують абсциси точок перетину цих графіків. Рис. 1.2. Варіанти розв’язання рівняння при заміні функції рівносильними функціями F1(х) та F2(х) на проміжку [ 1, 3 ].
Зустрічаються випадки, коли не тільки на першому етапі – при виділенні проміжків, що вміщують корені рівняння, а і при подальшому розв’язанні рівняння розрахунки проводять не за основною функцією F1(x), а за наближеною до неї функцією F2(x) (рис. 1.3). Рис. 1.3. Реальна функція F1(x) та її наближений аналог-функція F2(x).
При написанні програми, яка виконує відокремлення коренів графічний спосіб не є зручним, тому застосовують найпростіший алгоритм відокремлення коренів: проміжок, на якому відшукуються розв’язки, ділять рівномірно на невеликі відрізки, на кінцях кожного відрізку розраховують значення функції, якщо функція на кінцях відрізку змінює знак – відрізок містить корінь. Величина відрізків поділу залежить від коефіцієнта гладкості функції. Для відділення коренів можемо скористатися теоремою: Якщо функція у = F(х) неперервна на інтервалі [a, b] і якщо F(а) та F(b) мають протилежні знаки, тобто F(а)× F(b) < 0, то F(х) має хоча б один дійсний корінь на інтервалі [a, b]. Якщо при цьому F(х) має першу похідну, що не змінює знак на інтервалі [a, b], то корінь єдиний.
2.1.3. Етап 2: уточнення коренів. 2.1.3.1. Метод половинного ділення. Припустимо, що рівняння (1.1) має на відрізку [ a, b ] єдиний корінь. Функція F(x) на цьому відрізку неперервна. Поділимо відрізок [ a, b ] точкою навпіл (рис. 1.4). Якщо F(c) ¹ 0, то вибираємо відрізок [ a, с ] чи [ с, b ], на якому функція змінює знак, тобто F(а)× F(с) < 0 чи F(с)× F(b) < 0. Для подальших поділів використовуємо цей відрізок. На кожному кроці процесу половинного ділення відрізок зменшується вдвоє. Рис. 1.4. Знаходження кореня рівняння методом половинного ділення.
Ітераційний процес продовжуємо, поки довжина відрізка не стане менше заданої точності e: | a – b| < e (1.6)
|