Главная Случайная страница


Категории:

ДомЗдоровьеЗоологияИнформатикаИскусствоИскусствоКомпьютерыКулинарияМаркетингМатематикаМедицинаМенеджментОбразованиеПедагогикаПитомцыПрограммированиеПроизводствоПромышленностьПсихологияРазноеРелигияСоциологияСпортСтатистикаТранспортФизикаФилософияФинансыХимияХоббиЭкологияЭкономикаЭлектроника






Змінні у системі MatLab та робота з ними

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

Змінним можна задавати відповідні значення за допомогою виразів, використовуючи знак = як оператор присвоєння. Формат виразу з оператором присвоєння такий:

ім’я_змінної = вираз

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

Правила написання імен змінних у системі MatLab досить прості. Ім’я змінної, або ідентифікатор, може містити будь-яку кількість символів, але запам’ятовуються та ідентифікуються з них тільки перший 31 символ. У цьому разі повинен виконуватися принцип унікальності, тобто, ім’я змінної не може збігатися з іменами інших змінних або функцій системи. Ім’я повинне починатися з літери і може містити літери, цифри або символ підкреслення (_). Неприпустимо ставити в імена змінних символи +, –, *, /, &, :, @, =, оскільки у цьому випадку правильна інтерпретація математичного виразу стає неможливою.

Є можливість вилучення імен змінних для очищення пам’яті та для підвищення ефективності роботи програми. У пам’яті комп’ютера дані користувача займають відповідне місце, яке називається робочою областю. За великої кількості змінних необхідно очищувати робочу область, вилучивши ті змінні, які для подальшої роботи не потрібні. Особливо важливо це робити, якщо такі змінні описують надмірний вектор або матрицю, і, відповідно, займають великий обсяг оперативної пам’яті. Як зазначалося у розділі 1.5.1, переглянути робочу область програми можна за допомогою команди Меню File → Show Workspace. Одна числова змінна займає у пам’яті комп’ютера 8 байт незалежно від використовуваного формату виведення чисел на екран. З одного боку, це зручно для користувачів з точки зору простоти роботи зданими, але впливати на ефективність їх розташування у пам’яті комп’ютера через визначення типів, як це зроблено у мовах програмування, програміст не може. Тому очищення робочої області через вилучення змінних є єдиною можливістю ефективного використання оперативної пам’яті комп’ютера.

Очистити робочу область можна через систему меню, якщо виконати команду File → Show Workspace, виділити за допомогою миші у вікні Workspace Browser відповідні змінні та натиснути кнопку Delete, Після виконання цієї операції значення раніше визначеної змінної a стає невизначеним, тому за спроб користувача вивести це значення на екран система видає повідомлення «Undefined function or variable «a».» («Невизначена функція або змінна а»):

>> a

??? Undefined function or variable «a».

>>

Іншим ефективним способом очищення робочої області є команда MatLab clear у різних її модифікаціях. Можливі формати команди clear:

clear — вилучення всіх описаних раніше змінних;

clear x — вилучення змінної x;

clear a,b,c — вилучення змінних a, b та c;

clear functions — вилучення функцій;

clear all — вилучення всіх змінних та функцій.

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

>> x=2*pi

x=

6,2832

>>v=[1,2,3,4]

v=

1 2 3 4

>> MAT

???Underfined function or variable “MAT”

>>MAT=[1,2;3,4]

>>MAT=

1 2

3 4

>>clear v

>>v

??? Underfined function or variable “v”

>>clear

>>x

??? Underfined function or variable “x”

>>MAT

???Underfined function or variable “MAT”

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

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

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

Функція вилучення змінних у системі MatLab деякою мірою відповідає апарату динамічних змінних усучасних мовах програмування, але використовувати її значно простіше.

Визначення матриць та векторів

Описання матриць та векторів здійснюється через визначення змінних. У цьому разі використовують три прості правила.

1. Усі елементи матриці або вектора необхідно брати у квадратні дужки.

2. Між числами, які відповідають елементам вектора або рядка матриці, можна ставити пробіл або кому.

3. Між рядками матриці ставлять крапку з комою.

Приклади визначення матриць та векторів:

>> v=[1, 2, 3, 4]

v=

1 2 3 4

>> MAT =[1,2;3,4]

M=

1 2

3 4

>>

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

>> v(1)=

>> M(1,1)=

>>

Найважливіше, що є у системі MatLab і чого немає в інших системах програмування та математичних САПР — це можливість виконання арифметичних дій із матрицями та векторами та їх використання як параметрів математичних функцій. У цьому разі обчислення проводяться з кожним елементом матриці бо вектора. З основ програмування відомо, що в кожній з мов програмування запис типу sin(v) або exp(M) , де М — матриця, v — вектор, був би некоректним. Щоб виконати будь-яку математичну дію з елементами вектора або матриці, потрібно організувати цикл. Обчислення функції від всіх елементів вектора або матриці є можливим у системі MathCAD, але там це робиться через спеціальну функцію векторизації. З точки зору точного математичного опису в цьому є певна рація, оскільки у математиці такі операції заборонені. Але під час розробки реальних програм найчастіше необхідно обробляти масиви великих чисел саме таким чином, наприклад, поелементно додавати, множити поелементно або на константу, обчислювати функції від елементів масиву. А такі дії, як множення матриць або векторний добуток двох векторів, потрібні програмісту значно рідше, тому їх можна реалізувати через внутрішні функції системи. Розробники MatLab виходили, ймовірно, саме із цих міркувань, адже система створювалася для професіоналів?програмістів. Тому у MatLab використані записи типу exp(M) або sin(v) як поелементні дії з матрицями та векторами. Адже програмісту зручно працювати саме так, хоча такий запис неправильний з математичної точки зору. До того ж, такий підхід відповідає всій ідеології системи, тому що вона розроблена для роботи з матрицями, і вони розглядаються як звичайні числа. А спеціальні матричні та векторні операції тут також введені, але через окремі функції.

Тому множення, ділення, піднесення у степінь умові MatLab реалізовані як за правилами лінійної алгебри, так і для поелементних операцій, але запис цих функцій різний. Якщо визначені дії слід виконувати поелементно, використовуються оператори .* для поелементного множення, ./ для по елементного ділення та .^ для поелементного піднесення у ступінь, у цьому разі розмірність масивів для поелементних операцій має бути однаковою. При використанні операторів */ та ^математичні дії виконуються за правилами лінійної алгебри. У випадку множення вектора або матриці на числову константу по елементні операції повністю збігаються з операціями лінійної алгебри.

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

Приклад

>> format short

>> v=[1,2,3,4];

>> sin(v)

ans=

0,8415 0,9093 0.1411 ?0,7568

>> 3*v

ans=

3 6 9 12

>> v^2

???Error using= =>^Matrix must be square.

>> v.^2

ans=

1 4 9 16

>> v+2

ans=

3 4 5 6

MAT=[1,2;3,4]

MAT =

1 2

3 4

>> sin (MAT)

ans =

0.8415 0.9093

0.1411 ?0.7568

>> MAT^2

ans =

7 10

15 22

>> MAT.^2

ans =

1 4

9 16

>> 3*MAT

ans =

3 6

9 12

>> 2+MAT

ans =

3 4

5 6

>>

У наведеному прикладі повідомлення ???Error using =>^ Matrix must be square (Помилкове використання оператора ^. Повинна бути квадратна матриця) означає, що використання операції множення векторів за правилами лінійної алгебри неможливе, можна множити одну на одну тільки квадратні матриці. Як бачимо, для квадратної матриці система дійсно не видає помилку і виконує операцію множення матриці саму на себе за правилами лінійної алгебри, але результат суттєво відрізняється від поелементного множення. Усі результати поелементних операцій для вектора v та матриці MAT однакові оскільки містять ті самі елементи.


 

Последнее изменение этой страницы: 2016-06-09

lectmania.ru. Все права принадлежат авторам данных материалов. В случае нарушения авторского права напишите нам сюда...