Matlab 5.1 - симфонія алгоритмів

Борис Манзон

Розгромна замовна стаття на початку 60-х років і швидко збільшує свою потужність комп'ютерна техніка дозволяє вирішувати багато наукових і інженерні завдання, які не піддавалися аналітичним методам. До середини 70-х років були накопичені цілі бібліотеки алгоритмів чисельного рішення таких задач. До числа кращих з них слід віднести бібліотеки матричних алгоритмів LINPACK і EISPACK Департаменту енергетики США. Вони являють собою зібрання ретельно перевірених і оптимізованих алгоритмів, розроблених протягом багатьох років провідними світовими фахівцями. Але з їх появою з'явилася необхідність в забезпеченні найкоротшого доступу широкої аудиторії інженерних і наукових працівників до цього достатку алгоритмів. Власне кажучи, створення мови Matlab (скорочено від Matrix Laboratory - "матрична лабораторія") і було обумовлено цією необхідністю.

Коли в 1978 р Клів Моулер (Cleve Moler), розробник системи Matlab, запропонував в якості основного об'єкта мови Matlab використовувати двомірний масив (матрицю), що не вимагає завдання розмірності, напевно, він і гадки не мав, наскільки ефективним виявиться новий мову для написання матричних алгоритмів.

Matlab за минулі роки набув великої популярності, поступово перемістившись з великих обчислювальних систем на персональні комп'ютери, сама ж програма разом зі всіма професійними програмами перетворилася на потужну систему, що охопила широкий спектр наукових, інженерних та економічних програм.

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

Комплект поставки

Matlab 5.х компанії MathWorks включає CD-ROM з установочними файлами програм Matlab, Simulink і 20 додатковими професійними програмами (Toolboxes). Кожна зі згаданих програм встановлюється самостійно тільки в разі придбання ліцензії на неї. На диску знаходиться також повна електронна документація на вказані програми в форматах HTML і Adobe Acrobat (PDF).

Крім CD-ROM в комплект поставки входить паперова документація: підручник для початківців (Getting Started with Matlab); керівництво для розробки графічного інтерфейсу (Building GUIs with Matlab); керівництво по установці і використанню Matlab Notebook - документа Matlab, що використовує в якості редактора текстовий процесор Microsoft Word; керівництво щодо забезпечення взаємодії із зовнішніми програмами, такими, як Сі, Фортран, і комунікаційними програмами (Appliccation Program Interface Guide); керівництво по новим функціям пакету та забезпечення сумісності зі старими версіями (Matlab 5 - New Features); два об'ємних керівництва з використання Matlab (Using Matlab і Using Matlab Graphics). Придбавши ліцензію на Simulink і професійні додатки, ви додатково отримуєте і документацію по цих продуктах.

платформи

Matlab 5.х може працювати на комп'ютерах IBM PC під управлінням Windows 3.1 (з додатково встановленої підсистемою win32s), Windows 95 і Windows NT, на комп'ютерах Macintosh і більш потужних машинах під керуванням UNIX. Читачам цієї статті пропонується опис Windows-версії програми.

Вимоги до апаратного та програмного забезпечення

Версія під Windows 95 займає на жорсткому диску від 25 до 115 Мб в залежності від розміру кластерів і кількості встановлюваних файлів допомоги; необхідна оперативна пам'ять - 8 Мб, рекомендується 16 Мб. Бажані графічний акселератор, звукова плата, компілятори Сі і Фортрана.

Для роботи Matlab Notebook необхідний текстовий редактор Microsoft Word версій 6.0 або 7.0 або Microsoft Office 97. Для перегляду файлів допомоги можна використовувати Internet-браузер (Microsoft Internet Explorer 3.0, Netscape Navigator 3.0) або переглядач PDF-файлів (Adobe Acrobat).

Відмінність Matlab від інших програм автоматизації математичних розрахунків

Подібно мов вищого рівня, пристосованим для розробки програм чисельного моделювання, таким, як Сі або Фортран, Matlab має ефективні засоби для процедурного, об'єктно-орієнтованого та візуального програмування, потужні засоби налагодження програм і розробки призначеного для користувача інтерфейсу. Все це дає підставу вважати Matlab високопродуктивним мовою технічного програмування. Однак є і суттєві відмінності:

- основним елементом, яким оперує Matlab, є не число, а двомірний масив - матриця, це дозволяє багато технічних обчислювальні завдання, особливо в матричної і векторної формулюваннях, вирішувати набагато швидше, ніж при написанні програм на скалярному неінтерактивному мовою, якими є Сі або Фортран ;

- Matlab - інтерактивна система, мова Matlab - це мова команд, що представляють собою готові алгоритми тих чи інших обчислень (наприклад, однією командою можна вирішити систему лінійних рівнянь або побудувати графік складної функції);

- мова Matlab спеціально призначений для вирішення науково-технічних завдань, чисельного моделювання систем і процесів.

Володіючи можливостями графічної візуалізації, порівнянними із засобами універсальних пакетів для автоматизації математичних розрахунків, таких, як Mathematica або Maple, Matlab істотно відрізняється і від них:

- при тім, що мова Matlab не пристосований для створення програм символьних обчислень, він більш зручний і ефективний при написанні програм чисельного моделювання (один з пакетів Matlab містить символьний модуль Maple, правда, він не настільки ефективний, як програма Maple, і не дозволяє створювати символьні програми);

- програма Matlab не має "здібностей" уявлення формул з високим поліграфічним якістю, що необхідно для оформлення науково-технічної публікації (поставляється з останньою версією програми модуль Matlab Notebook, інтегруючий Matlab з текстовим процесором Microsoft Word, кілька згладжує цей недолік). У той же час, на відміну від згаданих універсальних математичних пакетів, вона має розвинені засоби для створення графічних інтерфейсів до програм технічного моделювання.

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

Математика і обчислення в середовищі Matlab

Програма Matlab не так зручна для проведення математичних розрахунків в інтерактивному режимі, як, наприклад, Mathematica або Maple V, оскільки не дозволяє редагувати введені команди і розташовувати на робочому документі текст і графіки. Однак вона дає можливість записувати послідовність команд і їх результати. Для цього за допомогою команди diary <ім'я файлу> потрібно відкрити файл запису. Закрити його (закінчити запис) можна, використовуючи команду diary off.

Лінійна алгебра

Як уже згадувалося, Matlab - пакет матричної математики. Основним об'єктом, з яким він оперує, є матриця, яка не потребує завдання розмірності; будь-яке ім'я або число, введене в командний рядок, також за замовчуванням передбачається матрицею. Саме тому математика лінійної алгебри - найбільш потужна частина програми. Matlab вміє виробляти всі необхідні операції з матрицями: складати, множити, звертати матриці і знаходити їх визначники, знаходити власні вектори і значення, матричні експоненти і логарифми, обчислювати корені з матриць, вирішувати системи лінійних рівнянь і т. Д.

Запис багатьох операцій з матрицями відповідає загальноприйнятій нотації аналогічних численних операцій. Поелементне додавання і віднімання масивів записується так само, як додавання і віднімання чисел; множення матриць позначається символом *, для поелементного множення і ділення матриць використовуються відповідно знаки. * та ./. Розподіл матриці A на матрицю B позначається як A / B (праве ділення - рішення рівняння x * A = B) або AB (ліве поділ - рішення рівняння A * x = B).

У програмі є команди для створення випадкових і відомих стандартних матриць. Наприклад, командами

[A = rand (4,4), V = rand (4,1)]

[A =

0.9501 0.8913 0.8214 0.9218

0.2311 0.7621 0.4447 0.7382

0.6068 0.4565 0.6154 0.1763

0.4860 0.0185 0.7919 0.4057]

[V =

0.9355

0.9169

0.4103

0.8936]

створюються випадкові матриця A розмірністю 3х3 і вектор V розмірністю 3.

командою

[X = AV]

[X =

-0.8224

0.0123

1.2599

0.7278]

знаходиться рішення системи лінійних рівнянь A * X = V.

У версію Matlab 5.0 додані нові алгоритми для операцій з матрицями: команда cholinc неповної факторизації Чолеску; команда gallery, що викликає більше 50 різних тестових матриць; команда luinc неповної LU-факторизації; команда repmat для багаторазового дублювання і музичного розміщення масиву і, нарешті, команда sprand для створення випадкових однорідно розподілених розріджених матриць.

наприклад:

[Gallery ( 'krylov', A)]

[Ans =

1.0000 3.5846 8.4382 19.5100

1.0000 2.1761 4.5684 10.3922

1.0000 1.8550 4.6103 10.7382

1.0000 1.7021 3.9420 9.4357]

поліноми

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

[P = V ']

[P =

0.9355 0.9169 0.4103 0.8936]

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

Наприклад, командою

roots (P)

ans =

-1.2445

0.1322 + 0.8661i

0.1322 - 0.8661i

можна знайти коріння певного вище полінома.

П'ята версія доповнена новими функціями багатовимірної інтерполяції: interp3 - тривимірна інтерполяція даних; interpn - багатовимірна інтерполяція (звернення до таблиці); ndgrid - створення масивів для багатовимірних функцій і інтерполяції.

Наступна команда виробляє чотирикратну кубічну інтерполяцію даних, заданих матрицею A, командою mesh будується отримана інтерполююча поверхню (рис.1):

zi = interp2 (A, 4, 'cubic');

mesh (zi)

Мал. 1. Поверхня, інтерполююча дані, задані у вигляді матриці

функції

Matlab містить більше 500 математичних, статистичних та інших функцій науково-технічного призначення.

Бібліотека математичних функцій Matlab являє собою великі збори обчислювальних алгоритмів - від елементарних функцій (таких, як сума, синус, косинус) і комплексної арифметики до складних операцій з матрицями, спеціальних функцій (скажімо, функцій Бесселя), швидкого перетворення Фур'є і т. Д.

Функції в Matlab вводяться в знайомої математичної нотації, причому в застосуванні до масиву вони діють на кожен його елемент - наприклад, так будується графік поверхні z = sin (x * y).

спочатку командою

[X, y] = meshgrid (-3: 0.1: 3, -3: 0.1: 3);

створюються допоміжні масиви x і y, необхідні для побудови графіка (координатна сітка). потім командою

[Z = sin (x. * Y);]

знаходяться значення функції в точках координатної сітки і, нарешті, командою

[Surfl (z)]

будується графік поверхні z = sin (x * y) (рис. 2).

Мал. 2. Графік поверхні z = sin (x * y)

У версію 5.0 програми увійшли нові елементарні і спеціальні функції: airy - функції Ейрі; besselh - функції Бесселя третього роду (функції Ханкеля); dblquad - чисельне подвійне інтегрування; mod - обчислення по модулю; normest - оцінка норми матриці; нові функції для операцій з датами і часом: calendar, datenum, datestr, datetick, datevec, eomday, now, weekday і деякі інші.

Звичайні диференціальні рівняння

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

В останню версію програми включені нові чисельні методи: ode45, ode23, ode113, ode23s, ode15s, а також команди: odefile - для постановки завдань рішення звичайних диференціальних рівнянь; odeset - для створення і редагування вхідних аргументів команд рішення звичайних диференціальних рівнянь; odeget - для вилучення опцій вхідних аргументів, створених командою odeset.

Як приклад покажемо, як Matlab вирішує відому систему звичайних диференціальних рівнянь Лоренца. Спочатку запишемо m-файл для обчислення правих частин системи (рис. 3) і запам'ятаємо його під ім'ям lorenz.

3) і запам'ятаємо його під ім'ям lorenz

Мал. 3. m-файл для вирішення системи звичайних диференціальних рівнянь Лоренца

Введемо вектор початкових значень

[X0 = [- 0.7 -0.7 1];] і часовий діапазон

[T0 = 0;]

[Tf = 100;]

Тепер можна викликати команду рішення диференціальних рівнянь (використовуємо метод Рунге - Кутта 4 - 5-го порядку):

[[T, x] = ode45 ( 'lorenz', [t0, tf] ', x0');]

Можна намалювати траєкторію руху точки (рішення) в тривимірному просторі за допомогою наступної команди (рис. 4):

[Comet3 (x (:, 1), x (:, 2), x (:, 3))]

[Comet3 (x (:, 1), x (:, 2), x (:, 3))]

Мал. 4. Тректорія руху точки (рішення) в тривимірному просторі

Математика розріджених матриць

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

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

5 показано, як за допомогою команди SPY на дисплей виводиться зображення ненульових елементів симетричною розрідженій матриці

Мал. 5. Ненульові елементи розрідженій матриці

У версію Matlab 5.x додані команди: bicg - метод бісопряженних градієнтів; bicgstab - стабілізуючий метод бісопряженних градієнтів; cgs - квадратичний метод сполучених градієнтів; eigs - команда, що знаходить кілька власних векторів і власних значень; gmres - узагальнений метод мінімальних залишків; pcg - метод предобусловленних сполучених градієнтів; qmr - метод квазімінімальних залишків; svds - команда, що знаходить кілька сингулярних значень.

Обробка, аналіз і візуалізація даних

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

За допомогою команд, що входять в основну бібліотеку Matlab, дані можна сортувати (команда sort), знаходити максимальне (max), мінімальне (min) і середнє (mean) значення, а також стандартну дисперсію (std), суму (sum) і твір ( prod), обчислювати наближене значення інтеграла (trapz - метод трапецій) та похідної (diff) і т. д.

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

Ряд команд призначений для Фур'є-аналізу (дискретне одномірний і багатомірний, пряме і зворотне швидке перетворення Фур'є).

Наприклад, командою

[C = cov (A)]

[C =

0.0892 0.0330 0.0405 0.0253

0.0330 0.1505 -0.0186 0.0931

0.0405 -0.0186 0.0305 0.0056

0.0253 0.0931 0.0056 0.1112]

знаходимо ковариационную матрицю C від змінних, що є стовпцями матриці A, а командою

[D = sqrt (diag (C))]

[D =

0.2987

0.3879

0.1747

0.3335]

знаходимо вектор стандартних дисперсій.

Нова версія доповнена наступними функціями статистичного аналізу даних: convhull - опукла оболонка; cumtrapz - накопичувальне чисельне інтегрування методом трапецій; delaunay - тріангуляція Делоне; dsearch - пошук найближчої точки; factor - розкладання на прості множники; inpolygon - визначення точок всередині багатокутної області; nchoosek - число поєднань n елементів по k; perms - число перестановок; polyarea - площа багатокутника; primes - список простих чисел; sortrows - сортування рядків в порядку зростання; tsearch - пошук замкнутої тріангуляції Делоне; voronoi - діаграма Вороного.

Є кілька професійних додатків, які містять команди розширюють функціональні можливості Matlab по обробці даних: Optimization, Signal Processing, Spline, Statistics, Sistem Identification, Wavelet.

Розробка алгоритмів в середовищі Matlab

Мова Matlab - це високорівнева матричний мова з умовними твердженнями, функціями, структурами даних, введенням-виведенням і можливістю об'єктно-орієнтованого програмування. Він забезпечує як інтерактивне програмування для швидкого створення невеликих програм, так і поглиблене - для створення великих і складних програм-додатків.

Робоче середовище Matlab являє собою набір інструментів і засобів, з якими взаємодіє користувач програми. У неї входять засоби для управління змінними, імпорту і експорту даних, а також для розробки, управління та налагодження програм, написаних на мові Matlab.

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

Як уже згадувалося, серед модулів Matlab є багатофункціональний відладчик (рис. 3) з текстовим редактором, що дозволяє ефективно програмувати процедури Matlab.

Для создания процедури Matlab достаточно Записати текст програми в текстовому редакторі. Ця запис зберігається у вигляді неформатированного текстового файлу з розширенням .m, який викликається з командного рядка або з іншого m-файлу.

Потрібно відзначити, що існує два типи m-файлів: script-файл, який не потребує введення або повернення аргументів, і функціональний m-файл, для якого необхідно і те й інше.

Script-файл оперує в робочому середовищі Matlab і використовується для багаторазового повторення кроків обчислень.

Функціональний m-файл потрібен для розширення мови Matlab, зокрема, новими алгоритмами. У змісті цього файлу повинна стояти ключове слово - function, за яким слідує назва функції, наприклад, як зображено на рис. 3. Функціональний m-файл під час першого виклику автоматично компілюється.

В m-файл можна ввести рядки, що пояснюють його призначення і порядок використання. Ці рядки починаються з символу "%", а на дисплей можуть викликатися командою help <ім'я m-файлу>.

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

Матриці чисел бувають двох типів: з числами подвійної точності (вони можуть бути розрідженими) і восьмирозрядні; останні в основному використовуються з додатком Image Processing.

За замовчуванням будь-який об'єкт Matlab вважається двомірним масивом (матрицею) чисел подвійної точності.

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

Мова Matlab дозволяє вводити призначені для користувача типи даних, створювати і оперувати об'єктами, інакше кажучи, він забезпечує об'єктно-орієнтоване програмування.

Крім того, система Matlab має функції управління пам'яттю в процесі виконання процедур.

До складу програми входить бібліотека (Application Program Interface, API), яка дозволяє створювати програми на мовах Сі та Фортран, які взаємодіють з Matlab (MAT-файли). Є кошти виклику підпрограм з Matlab (динамічні зв'язки), виклику Matlab як обчислює процесора, а також кошти читання MAT-файлів.

Що нового

Серед удосконалень програмного мови Matlab версії 5.0 можна відзначити наступні. По-перше, додані багатовимірні масиви даних, нові функції для операцій з багатовимірними масивами; введені нові типи даних - масиви осередків і структур, а також команди для створення цих об'єктів і оперування ними. По-друге, символьні масиви (рядки) займають менше пам'яті, оскільки використовують 16 розрядів на один символ (проти 64 розрядів в попередній версії). По-третє, введені нові функції для операцій з символьними масивами, дозволяють перетворювати матриці в рядки, двійковий або восьмеричний формат - в десятковий і навпаки, об'єднувати рядки в горизонтальному і вертикальному напрямках, порівнювати їх і знаходити можливі збіги символів.

У мову також введені нові оператори умовних переходів - switch, case, otherwise, - що дозволяють уникнути великого числа тверджень elseif в складних розгалуження, і крім того, в ньому підвищена ефективність виразів, що містять оператор if. Для операцій з новими структурами даних - масивами осередків і структур - додані нові логічні оператори, а для операцій з m-файлами - додаткові команди, що дозволяють додати або змінити каталог для пошуку файлів, ввести m-файл в редактор відладчика, привласнити або обчислити значення змінної в робочому середовищі і т. п.

Висновок

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

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

Хотілося б звернути увагу викладачів російських вищих навчальних закладів на чудову програму Matlab компанії MathWorks, ознайомившись з якою, випускники - науковці, інженери, економісти - цілком зможуть на рівних конкурувати із західними фахівцями.

На жаль, за рамками нашої статті залишився широкий спектр областей застосування Matlab, що включає чисельне моделювання самих різних наукових, технічних і економічних завдань. Про ці областях застосування і розроблених спеціально для них професійних додатках Matlab ми розповімо в одному з наступних номерів PC Week / RE.

На закінчення хочу подякувати директора корпорації Softline Ігоря Боровикова за люб'язно надану можливість ознайомитися з програмою Matlab 5.1

Версія для друку

Новости
Слова жизни
Фотогалерея