Відмінності між версіями «Основи роботи в MATLAB»
(→Формування векторів і матриць) |
|||
Рядок 209: | Рядок 209: | ||
1 1 | 1 1 | ||
2 2 | 2 2 | ||
+ | [['''Тести''']] |
Версія за 07:16, 5 червня 2009
Зміст
Довідка про MatLab
Matlab – одна з найстаріших, ретельно пророблених і провірених часом систем автоматизації математичних розрахунків, побудована на розширеному представленні і застосуванні матричних операцій. Звідси й пішла назва системи – MATrix LABoratory – матрична лабораторія.
Matlab поставляється як комплекс Matlab + Simulink + Toolbox + Blockset, де розділами системи Toolbox і Blockset корпорація MathWorks називає пакети розширення для систем Matlab і Simulink, відповідно.
Однією із основних задач системи Matlab завжди було надання користувачам потужної мови програмування, орієнтованої на технічні і математичні розрахунки і здатної перевершити можливості традиційних мов програмування, котрі багато років використовувались для реалізації чисельних методів. При цьому особлива увага приділялась як підвищенню швидкості обчислень, так і адаптації системи до розв’язку самих різноманітних задач користувачів.
Запуск системи і робота в діалоговому режимі
На початку запуску автоматично виконується команда matlabrc, яка виконує завантажувальний файл matlabrc.m. Цей файл виконує початкове налаштування термінала системи і задає ряд її параметрів. У томі числі, можуть бути вказані шляхи доступу до інших файлів, необхідних для коректної роботи системи.
Сеанс роботи з Matlab прийнято називати сесією (session). Сесія, по суті, являється поточним документом, відображаючим роботу користувача в системі. Вона включає рядки вводу, виводу та повідомлень про помилки. Вхідні в сесію визначення змінних функцій, розміщених в буфері, але не саму сесію, можна записати на диск (файли формату .mat). Фрагменти сесії можна оформити у вигляді щоденника (за допомогою команди diary).
Система створена таким чином, що будь-які обчислення можна виконати в режимі прямих обчислень, тобто без підготовки програми. Такий підхід відбувається по правилу «задав питання, отримав відповідь»:
>> x=1; >> cos(x)^2+sin(x)^2 ans = 1 >> 2*log(ans)^3-... 5/tan(2*sqrt(4)) ans = -4.3185 >> w=2*log(1)^3-5/tan(2*sqrt(4)) w = -4.3185
З цього лістінгу можна зробити висновки:
В деяких випадках зручно записати математичне значення декількома рядками. Це можна зробити використовуючи знак переносу «…» (багатокрапка).
Основні об’єкти Matlab
Центральним поняттям всіх математичних систем являється математичний вираз. Він задає те, що має бути обчислене в числовому (рідше в символьному) вигляді. Приклади простих математичних виразів:
2-4 3.256*exp(8) 2+sin(x)/(4*cos(y))
Математичні вирази будуються на основі чисел, констант, змінних, операторів, функцій та різних спец знаків.
Числа
Число – найпростіший об’єкт мови Matlab, який представляє кількісні дані. Числа можна вважати константами, імена яких співпадають з їх значеннями. Вони можуть бути цілими, дробовими, з фіксованою і плаваючою крапкою. Можливе представлення з вказанням мантиси та порядку числа. В мантисі ціла частина відділяється від дробової комою, а не крапкою. Для відокремлення порядку числа від мантиси використовується символ е.
Числа можуть бути комплексними : z = Re(x) + Im(x) * i. Уявна частина має множник i або j, що означає корінь квадратний з -1:
>> i ans = 0 + 1.0000i >> j ans = 0 + 1.0000i >> k=3+7i k = 3.0000 + 7.0000i >> real(k) ans = 3 >> imag(k) ans = 7
За замовчуванням Matlab повертає числа в короткому записі в форматі з фіксованою комою (5 знаків). Тому при роботі з числовими даними можна задавати різні формати представлення чисел. Але обчислення завжди проводяться в форматі чисел з подвійною точністю. Для установки формату представлення чисел використовується команда
>> format name
де name – ім.’я формату. Для числових даних name може бути наступним:
Short (default) - Короткий запис в форматі з фіксованою комою (5 знаків)
Long - Довгий запис в форматі з фіксованою комою (15 знаків)
Short e - Короткий запис в форматі з плаваючою комою (5 знаків +3 знаки порядку)
Long e - Довгий запис в форматі з плаваючою комою (15 +3 знаки)
Hex - Запис в вигляді шістнадцяткового числа
Bank - Запис до сотих частин (грошові одиниці)
+ - Записується тільки знак числа
Rational - Запис у вигляді раціонального дробу
Число всередині системи зберігається з усіма введеними цифрами. Виводяться на екран числа у формі встановленого формату. Введене значення і результати обчислень зберігаються з похибкою, що становить приблизно (точне значення в 15-ти десяткових розрядах). Діапазон дійсних чисел знаходиться в межах від Неможливо розібрати вираз (невідома помилка): 10 ^-308)
до Неможливо розібрати вираз (невідома помилка): 10 ^308)
.
Константи
Константа – наперед визначене числове або символьне значення, представлене унікальним іменем. Числа (наприклад 1, -256 і 0.024) являються безіменними числовими константами. Інші види констант в Matlab прийнято називати системними змінними. Вони задаються системою при завантаженні, але можуть переозначатись. Основні системні змінні:
i, j – уявна одиниця;
Pi – число π (пі);
Eps – похибка операцій над числами з плаваючою комою (2-52);
Realmin – найменше число з плаваючою комою (2-1022);
Realmax - найбільше число з плаваючою комою (21023);
Inf – значення машинної нескінченності;
Ans – результат останньої операції;
NaN – вказує на нечисловий характер даних (Not-a-Number);
>> 2*pi ans = 6.28 >> eps %формат bank ans = 0.00 >> format short e >> eps ans = 2.2204e-016 >> 1/0 Warning: Divide by zero. ans = Inf >> 0/0 Warning: Divide by zero. ans = NaN
Символьна константа – це ланцюжок символів, записаних між апострофами, наприклад:
>> '3+cos(z)/log(5)' ans = 3+cos(z)/log(5) >> '25.05.2009 о 14:00 - здача курсової роботи' ans = 25.05.2009 о 14:00 - здача курсової роботи
Текстові коментарі
Оскільки Matlab використовується для достатньо складних обчислень, важливе значення має їх наглядний опис. Це досягається за допомогою текстових коментарів. Коментарі вводяться за допомогою символа %, наприклад так:
%it is factorial function
Зазвичай перші рядки m-файлів служать для опису їх призначення, яке виводиться на екран після команди
>> help Ім’я_файлу
Змінні
Змінні – це іменовані об’єкти, здатні зберігати деякі дані. В залежності від цих даних змінні можуть бути числовими або символьними, векторними або матричними. Щоб присвоїти змінній деяке значення, треба виконати операцію присвоювання:
Ім’я_змінної = Вираз
Типи змінних наперед не декларуються. Вони приймають тип присвоюваного виразу. Ім’я змінної (її ідентифікатор) може містити яку завгодно кількість символів, але запам’ятовуються і ідентифікуються тільки перші 31.
Ім’я має бути унікальним, повинне починатися з букви, може містити букви, цифри та символ підкреслювання _. Недопустимо включать в імена змінних пробіли і спеціальні знаки, наприклад +,-,/,* і т. п.
В пам’яті комп’ютера змінні займають місце - робочу область. Для очистки робочої області використовується функція clear:
>> clear – знищує означення всіх змінних; >> clear x – знищує означення змінної x; >> clear a, y, z – знищує означення декількох змінних.
Оператори
Оператор – це спеціальне позначення для певної операції над даними – операндами. Найпростішими арифметичними операторами є знак суми +, віднімання –, множення * та ділення /. Слід відмітити, що більшість операторів відноситься до матричних операцій. Наприклад, оператори множення * та ділення / обчислюють добуток та частку від двох масивів, векторів або матриць. Є ряд спеціальних операторів, наприклад оператор \ означає ділення справа наліво, а оператори .* і ./ означають поелементне множення та поелементне ділення масивів.
Дуже часто необхідно виконати формування впорядкованих числових послідовностей. Такі послідовності потрібні для створення векторів чи значень абсциси при побудові графіків. Для цього в Matlab використовується оператор : (двокрапка).
Початкове_значення:Крок:Кінцеве_значення;
Дана послідовність створює зростаючу послідовність чисел, котра починається з початкового значення, йде з вказаним кроком і завершується кінцевим значенням. Якщо крок не задано, то по замовчуванню він рівний 1. Якщо початкове значення більше за кінцеве, то виводиться повідомлення про помилку. Приклади застосування даного оператора:
>> i=1:4 i = 1 2 3 4 >> i=0:0.2:1 i = 0 0.2000 0.4000 0.6000 0.8000 1.0000 >> j=5:-1:1 j = 5 4 3 2 1 >> 4:2 ans = Empty matrix: 1-by-0
Повний список операторів можна отримати виконавши команду
>> help ops
Функції
Функції – унікально іменовані об’єкти, що виконують визначені перетворення своїх аргументів, і при цьому повертають результати своїх перетворень. Результат обчислення функції з одним вихідним параметром підставляється на місце її визову, що дозоляє використовувати функції в математичних виразах. Функції в загальному випадку мають список аргументів (параметрів). Якщо функція повертає декілька значень, то вона записується у вигляді
[Y1, Y2, …] = func(X1, X2, …)
де Y1, Y2, … - список вихідних параметрів, і X1, X2, … - список вхідних аргументів.
Функції можуть бути вбудованими і зовнішніми, або m-функціями. Вбудованими є найбільш поширені елементарні функції, наприклад, sin(x) і exp(x), тоді як функція sinh(x) є зовнішньою функцією. Зовнішні функції містять свої означення в m-файлах. Вбудовані функції зберігаються в відкомпільованому ядрі системи Matlab, тому вони виконуються дуже швидко.
Мова програмування системи Matlab пропонує ряд ефективних можливостей для задання функцій користувача. Одна з таких можливостей залючається в застосуванні функції inline, аргументом якої треба в апострофах задати вираз, що задає функцію однієї чи декількох змінних. В приведеному прикладі задана функція двох змінних:
>> func1=inline('sin(x).^2+cos(y).^2') func1 = Inline function: func1(x,y) = sin(x).^2+cos(y).^2 >> func1(1,0) ans = 1.7081
Можна також задавати свої функції у вигляді m-файлів. У вікні редактора m-файлів (File – Nev – M-File) створити m-файл з ім’ям func3 і лістингом:
function y=func3(x,y) y=sin(x).^2+cos(y).^2
Записавши його на диск, командою
type func3
можна вивести лістинг функції. Звертання до функції відбувається як до звичайної, підставляємо в список параметрів потрібні змінні.
Формування векторів і матриць
Matlab – система, спеціально призначена для проведення складних обчислень над векторами, матрицями та масивами – в томі числі багатовимірними. При цьому вона по замовчуванню вважає, що кожна задана змінна – це вектор, матриця або масив. Все визначається конкретним значенням змінної. Наприклад, якщо задано x=1, то це значить, що x – це вектор з єдиним елементом, що приймає значення 1. Якщо треба задати вектор із декількох елементів, то їх значення варто перечислити в квадратних дужках, відокремлюючи пробілами. Наприклад, присвоювання
>> V = [1 2 3 4] V = 1 2 3 4
Задає вектор V, що має 4 елементи.
Для визначення матриці треба вказати декілька рядків. Для їх відокремлення слугує знак ; (крапка з комою). Ввід
>> M=[1 2 3;3 2 4; 0 3 0] M = 1 2 3 3 2 4 0 3 0
задає квадратну матрицю. Також можливо вводити елементи матриць та векторів у вигляді арифметичних виразів, що містять будь-які доступні для системи функції.
Для вказання окремого елемента вектора чи матриці використовуються вирази виду V(k) чи M(i, j). Наприклад, якщо задати
>> M(3, 2) ans = 3
Якщо треба присвоїти елементу нове значення, треба записати
>> M(3, 2)=10 M = 1 2 3 3 2 4 0 10 0
Вираз M(i) з одним індексом дає доступ до елементів матриці, розвернутим в один стовпчик. Така матриця отримується, якщо в початковій записати стовпці підряд. Це ілюструє наступний приклад.
>> M=[1 2 3;4 5 6;7 8 9] M = 1 2 3 4 5 6 7 8 9 >> M(2) ans = 4 >> M(8) ans = 6
Можна задавати вектори і матриці з комплексними елементами, наприклад:
>> i=sqrt(-1); >> CM=[1 2;3 4]+i*[5 6;7 8] CM = 1.0000 + 5.0000i 2.0000 + 6.0000i 3.0000 + 7.0000i 4.0000 + 8.0000i
Поряд з операціями над окремими елементами матриць і векторів система дозволяє виконувати операції множення, ділення та піднесення до степеня зразу над всіма елементами, тобто над масивами. Для цього перед знаком операції ставиться крапка (.*, ./, .^). Існує також ряд спеціальних функцій для задання векторів та матриць. Наприклад, функція magiс(n) задає магічну матрицю n×n.
Для формування матриць і виконання ряду матричних операцій виникає необхідність видалення окремих стовпців і рядків матриці. Для цього використовується пусті квадратні дужки. Видалимо другий стовпчик матриці A
>> A=[1 1 1;2 2 2;3 3 3] A = 1 1 1 2 2 2 3 3 3 >> A(:,2)=[] A = 1 1 2 2 3 3
Тепер видалимо третій рядок:
>> A(3,:)=[] A = 1 1 2 2'''Тести'''