Студопедия

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

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Команди керування середовищем






 

Таблиця 1.1. Команди керування середовищем Scilab

Команда Призначення
abort Переривання виконання програми
pause Режим паузи, виклик клавіатури
resume Виконання повернення або відновлення і копіювання деяких локальних змінних
return Повернення або відновлення виконання і копіювання деяких локальних змінних
exit Завершення текучої сесії
quit Закриває SciLab або зменшує рівень паузи
clc Очистка командного вікна
debug Рівень відлагодження програми
clear Видаляє усі змінні

 

 

2. Засоби програмування. Оператори і команди

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

Символи " -> " представляють собою запрошення Scilab і відображаються автоматично, коли Scilab очікує введення чергової команди від користувача.

Набравши інструкцію s = " Hello World! " і натиснувши клавішу < Enter>, ми вкажемо Scilab виконати команду: створити змінну s, яка містить заданий текст.

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

 

Створення.sce та.sci файлів

Залежно від вмісту файлу розширенням файлів може бути.sce або.sci:

· файли з розширенням. sci містять визначення функцій Scilab – виконання таких файлів призводить до завантаження даних функцій в робоче середовище пакету, після чого їх можна використовувати точно так само, як вбудовані функції Scilab;

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

Для того щоб створити.scі файл потрібно відкрити вбудований редактор SciNotes набрати текст програми та в меню вибрати Файл -> Зберегти як ввести назву файлу та вибрати тип файлу.sci.

Приклад програми, що міститься у файлі stepin.sci

function rez=stepin (a, b)

rez=a^b;

endfunction

 

Використовуючи функцію exec в консолі, ми запускаємо дану функцію на виконання, а потім її використовуємо:

--> exec(" SciLab/stepin.sci")

--> function rez=stepin (a, b)

--> rez=a^b;

--> endfunction

--> stepin(4, 5)

ans =

1024.

Для того щоб створити.sce файл потрібно відкрити вбудований редактор SciNotes набрати текст програми та в меню вибрати Файл -> Зберегти як ввести назву файлу та вибрати тип файлу.sce.

Приклад програми, що міститься у файлі myscript.sce

a1 = 5;

a2 = 8;

a3 = a1 * a2;

disp(a3);

Використовуючи функцію exec в консолі, ми запускаємо даний скрипт на виконання:

--> exec(“myscript.sce”)

--> a1 = 5;

--> a2 = 8;

--> a3 = a1 * a2;

--> disp(a3);

exec(fun [, mode])

exec(path [, mode])

fun: ім’я файлу, в якому знаходиться Scilab функція (функція визначена безпосередньо в Scilab);

path: рядок, що містить повний шлях до файлу, що містить функцію;

mode: цілий скаляр, що може приймати наступні значення:

0: по замовчуванню

-1: нічого не друкувати

1: повідомлення (echo) для кожного командного рядка

2: prompt --> друкує

3: echoes + prompts

4: stops зупинка перед кожним " prompt"

7: stops + prompts + echoes: корисно для демонстрацій.

 

Конструкції мови

Існують такі вагомі особливості SciLab:

· Імена змінних в Scilab можуть мати довільну довжину, проте лише перші 24 символи імені є значущими, тому щоб уникнути помилок слід використовувати імена довжиною до 24 символів. Допустимими символами в іменах змінних є латинські букви, цифри, а також символи " %", " _", " #", "! ", " $", "? ". Слід зазначити, що деякі змінні, імена яких починаються символом " %", мають особливий сенс у Scilab;

· Scilab чутливий до регістру символів;

· Нумерація елементів масивів починається з одиниці;

· Коментар починається «//» і діє лише до кінця рядка.

Далі приведені ключові слова мови SciLab та їх призначення.

 

Таблиця 2.1. Оператори керування програмою

Конструкція Призначення
else Гілка оператора if, яка працює при невиконання всіх умов.
elseif Гілка оператора if, яка працює при виконання деякої умови.
empty Пуста матриця.
end Кінець конструкції.
global Визначення глобальної змінної.
catch Початок блоку catch в структурі try-catch.
break Переривання виконання циклу.
case Оператор вибору, що використовується в структурі select-case-end.
continue Передача управління наступній ітерації циклу.
do Ключове слово для циклу do.
for Ключове слово для циклу for.
if Ключове слово для умовного оператора if.
select Ключове слово оператору вибору.
then Ключове слово в структурі оператору if і select.
while Ключове слово оператору while.

Короткий синтаксис і приклади основних конструкцій.

Умовний оператор if

Найпростіший випадок – для виконання блоку команд, якщо виконується деяка умова:


синтаксис:

if умова then

команди SciLab

End

приклад:

if ((a > = 0.90) & (d > = 60)) then

pass = 1;

end;


Складніший варіант для - для організації алгоритмів розгалуження:

у дві гілки:


синтаксис:

if умова then

команди SciLab

Else

команди SciLab

End

приклад:

if ((a > = 0.90) & (d > = 60)) then

pass = 1

else

pass=0

end;


 

у декілька гілок:


синтаксис:

if умова1 then

команди SciLab

Else

if умова2 then

команди SciLab

Else

if умова3 then

команди SciLab

Else

команди SciLab

End

End

End

 

приклад:

if a< b then

x = a

else

if b< a then

x = b

else

if c< a+b then

x = c

else

x = d

end

end

end

 


у декілька гілок, без вкладених операторів if:


синтаксис:

if умова1 then

команди SciLab

elseif умова2 then

команди SciLab

elseif умова3 then

команди SciLab

Else

команди SciLab

End

 

приклад:

if a< b then

x = a

elseif b< a then

x = b

elseif c< a+b then

x = c

else

x = d

end


В залежності від виконання однієї з умов, працює відповідна гілка програми, якщо ж всі умови невірні, то виконуються команди після else. Кількість гілок може бути довільною, їй відповідає кількість elseif, або кількість вкладених операторів if.

 

Оператор select

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


синтаксис:

select вираз

case вираз1

команди SciLab

case вираз2

команди SciLab

...

Else

команди SciLab

End

 

 

приклад:

select (a+b)

case 0

disp(‘a+b= 0’)

case 1

disp(‘a+b=1’)

case 2

disp(‘a+b= 2’)

else

disp(‘a+b> 2’)

end


 

Оператор циклу for

Оператор for застосовується для повторення деякої дії задане число разів. Найчастіше використовується числовий лічильник, що пробігає ряд значень.

синтаксис:

for змінна циклу = початкове значення: крок: кінцеве значення

команди SciLab

End

приклад:

for m = -1: 0.1: 2

for n = 1: 10

a(n) = 1/(m+n -1);

end

end

якщо крок циклу пропущений, то він становить 1 (за замовчуванням).

 

Оператор циклу while

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


синтаксис: Приклад

while умова

команди SciLab

End

Приклад:

eps = 1;

x = 4;

while (1+eps+x) > 1

eps = eps/2;


x=x-0.2;

end

eps = eps*2



Оператори break, continue

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

 


приклад:

eps = 1;

x=4;

while (1+eps+x) > 1

eps = eps/2;

x=x-0.2;

if x==0

break

end

end

приклад:

for m = -1: 0.1: 2

for n = 1: 10

a(n) = 1/(m+n -1);

if a(n)< =-10

break

end

end

end

 


Інструкція continue дозволяє негайно перейти до виконання наступної ітерації, пропустивши команди, наступні після continue в тілі циклу.

Зустрівши команду continue, інтерпретатор Scilab переходить до заголовку циклу, перевіряє умову продовження, і, якщо воно істинне, робить наступну ітерацію.

Наступний приклад демонструє обчислення суми s = 1 +3 +5 +7 +9 = 25. Використана тут функція modulo (i, 2) повертає 0 за умови, якщо i парне. У даному випадку скрипт нарощує значення i та використовує инструкцію continue для переходу до наступної ітерації:

 

приклад:

s = 0

i = 0

while (i < 10)

i = i + 1

if (modulo (i, 2) == 0) then

continue

end

s = s + i

end

 

Обробка виняткових ситуацій - оператор try … catch.

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

 


синтаксис:

try

команди SciLab, виконання яких може привести до помилки

catch

команди SciLab, які треба виконати при виникненні помилки в блоці між try і catch

End

приклад:

try

a=load(‘my_file’);

pie(a)

catch

disp(‘file not found’)

end;

x=[1.3, 2, 3]

x=2*x

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

 


 


Основні команди і оператори мови SciLab та їх призначення

Таблиця 2.2. Основні команди та оператори SciLab

Арифметичні операції
+ Унарне додавання для скалярних даних і масивів. Масиви повинні бути однакового розміру. Один з операндів може бути скаляром
- Унарне віднімання для скалярних даних і масивів. Масиви повинні бути однакового розміру. Один з операндів може бути скаляром
* Множення скалярів або матриць відповідних розмірів.. Один з операндів може бути скаляром
/ Ділення скалярів. Поелементне ділення матриці на скаляр. Якщо обидва оператори – матриці, то A/B=A*inv(B), де inv(B) – обернена матриця.
^ Піднесення скаляру до степеня. Знаходження степеня квадратної матриці.
\ Ліве ділення матриць. Якщо А є квадратною матрицею, то A\B=inv(А)*В.
.* Поелементне множення масивів однакової довжини. Наприклад, c=a.*b Приводить до с(i, j)=a(i, j)*b(i, j)
./ Поелементне ділення масивів однакової довжини. Наприклад, c=a./b Приводить до с(i, j)=a(i, j)/b(i, j)
.\ Поелементне ліве ділення масивів однакової довжини. Наприклад, c=a.\b Приводить до с(i, j)=b(i, j)/a(i, j)
.^ Поелементне піднесення матриця до степенів, які є елементами іншої матриці, такого ж розміру. Наприклад, c=a.^b Приводить до с(i, j)=a(i, j)^b(i, j)
Знаходження спряженої матриці
.’ Транспонування матриці

 

Логічні операції і оператори
> Більше
> = Неменше
> Менше
< = Небільше
== Рівне
~= нерівне
& Логічне «і». Може виконуватися як над скалярами, так і над масивами. Застосування до масивів значень приведе до по елементного виконання дії над масивами, результатом буде масив того ж розміру, що й вихідні. Якщо А=[1, 2; 3, 4] B=[0, 2; -3, 4], то С=A& B приведе до: С=[0, 1; 0, 1]
| Логічне «або». Використання аналогічне до «і»
~ Логічне заперечення
Логічні (бітові) функції
bitand Логічне І.
bitcmp Побітове доповнення.
bitget Значення біта в заданій позиції.
bitor Логічне АБО.
bitset Встановлення біта в задану позицію.
bitxor Логічне ВИКЛЮЧНЕ АБО.

 

 

Спеціальні символи
= Оператор присвоювання
[] 1. Використовуються для утворення масивів.
2. Використовуються для конкатенації векторів і матриць
4. Дозволяють викликати функцію з декількома вихідними аргументами.
() Визначають порядок виконання арифметичних і логічних операцій. Крім того, індекси масивів і вхідні аргументи функцій задаються в ().
: 1. Дозволяє звернутися до під масиву.
2. Дозволяє створити вектор, компоненти якого змінюються з постійним кроком.
. 1. Десяткова точка.
2. Відокремлення поля структури від імені.
, Служить для відокремлення:
індексів масивів
аргументів функцій
кількох команд, зібраних в одному рядку
; Відокремлює рядки матриці при наборі елементів, всередині квадратних дужок.
Наявність «;» в кінці виразу забороняє вивід результату цього виразу в командному вікні.
$ Останній індекс масиву.

 

Таблиця 2.5. Елементарні математичні функції SciLab

Деякі елементарні математичні функції
acos, acosd, acosh, acoshm, acosm, acot, acotd, acoth, acsc, acscd, acsch, asec, asecd, asech, asin, asind, asinh, asinhm, asinm, atan, atand, atanh, atanhm, atanm, cos, cosd, cosh, coshm, cosm, cotd, cotg, coth, cothm, csc, cscd, csch, sec, secd, sech, sin, sinc, sind, sinh, sinhm, sinm, tan, tand, tanh, tanhm, tanm Арккосинус, арккосинус в градусах, гіперболічний арккосинус. Матричний гіперболічний арккосинус, матричний арккосинус. Арккотангенс, арккотангенс в градусах, гіперб. арккотангенс. Арккосеканс, арккосеканс в градусах, гіперб. арккосеканс. Арксеканс, арксеканс в градусах, гіперболічний арксеканс. Арксинус, арксинус в градусах, гіперболічний арксинус. Матричний гіперболічний арксинус, матричний арксинус. Арктангенс, арктангенс в градусах, гіперболічний арктангенс. Матричний гіперболічний арктангенс, матричний арктангенс. Косинус, косинус в градусах, гіперболічний косинус. Матричний гіперболічний косинус, матричний косинус. Котангенс в градусах, котангенс, гіперболічний котангенс. Матричний гіперболічний котангенс, косеканс, косеканс в град. Гіперболічний косеканс, секанс, секанс в градусах. Гіперболічний секанс, синус, функція sinc. Синус в градусах, гіперболічний синус, матричний гіпер.синус. Матричний синус, тангенс, тангенс в градусах. Гіперболічний тангенс, матричний гіпер.тангенс, матр.тангенс.
expm Квадратна матриця експоненціальної функції.
exp Експоненційна функціїя.
log Натуральний логарифм.
log2 Логарифм за основою два.
log10 Десятковий логарифм.
sqrt Корінь квадратний.
abs Знаходження модуля числа.
complex Утворює комплексне число за заданою дійсною та уявною частинами.
conj Повертає комплексно-спряжене число.
real Повертає дійсну частину комплексного числа.
imag Повертає уявну частину комплексного числа.
i, j Ознака уявної частини, тобто sqrt(-1).
fix Заокруглення до найближчого цілого, по напрямку до нуля.
floor Заокруглення до найближчого цілого, по напрямку до мінус нескінченності.
ceil Заокруглення до найближчого цілого, по напрямку до плюс нескінченності.
round Заокруглення до найближчого цілого.
modulo Остача від цілочисельного ділення.
sign Повертає знак числа.
factor Розклад числа на прості множники
det Знаходження визначника матриці.

 

Таблиця 2.6. Функції для роботи з рядками

Функції для роботи з рядками
stripblanks str = stripblanks (s) – знищення пробілів в кінці рядка s і запис нового рядка у змінну str. Якщо s – масив, то str теж буде масивом нових рядків.
strstr k = strstr(str1, str2) – пошук підрядка у рядку. Вихідний аргумент k містить позиції, з яких підрядок починається в рядку. Вхідні аргументи str1 і str2 є рядками, або рядковими змінними. Підрядком вважається вхідний аргумент меншої довжини.
convstr t = convstr(s, ’l’) –перетворення у малий регістр символів рядку s. t = convstr(s, ’u’) - перетворення у великий регістр символів рядку s та запис нового рядка у змінну t.
strcat t = strcat(s1, s2, s3,...) – об’єднання рядків s1, s2, s3,... у новий рядок t. Пробіли в кінці кожного рядка ігноруються.
strcmp k = strcmp(s1, s2) – порівняння рядків s1 і s2. k =0 якщо рядки не однакові, k=1 якщо рядки рівні.
strsubst str = strsubst(str1, str2, str3) – заміна в рядку str1 підрядка str2 на підрядок str3 та запис нового рядка у змінну str.
strtok t = strtok(str) – розділення рядка на лексеми.
strrev s = strrev(s1) – перевершення рядка.
isnum k= isnum(str) – перевірка чи рядок str є числом
length k= length(str) – довжина елемента
strsplit v = strsplit(str, ind) – розділення рядка на вектор підрядків після кожного символа, на який вказує індекс
char y=char(x) – перетворення в масив символів
strtod d=strtod(str) - перетворення рядка в число подвійної точності

 

Таблиця 2.7. Функції перетворення систем числення

Перетворення систем числення
bin2dec bin2dec(binarystr) – перетворення рядка з двійковим числом в десяткове число
dec2bin str = dec2bin(d) – перетворення десяткового числа d в рядок str з двійковим представленням.
dec2hex str = dec2hex(d) – перетворення десяткового числа d в рядок str з шістнадцятковим представленням.
hex2dec d = hex2dec('hex_value') - перетворення рядка з шістнадцятковим представленням числа в десяткове число.
base2dec s = base2dec(s, b) - перетворення числа за основою b в число за основою 2.
dec2base str = dec2base(d, base) - перетворення десяткового числа d в число за основою base.
oct2dec d=oct2dec(o) – перетворення з вісімкової системи числення в десяткову
dec2oct o=dec2oct(d) – перетворення з десяткової системи числення в вісімкову

 


 

3. Робота з векторами і матрицями

Всі дані в системі SciLab є масивами. Масив – це впорядкована, пронумерована сукупність однорідних даних. Масив повинен мати ім’я. Масиви розрізняються за кількістю вимірів: одновимірні, двовимірні, багатовимірні. Розміром масиву називають кількість елементів, вздовж кожного виміру. Доступ до елементів здійснюється за допомогою індексу.

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

В SciLab нумерація елементів масивів починається з одиниці, тобто індекси повинні бути більші або рівні одиниці.

 

Створення векторів та матриць

Ввід векторів і матриць з командного рядка відбувається в квадратних дужках - «[]», при чому стовпці (тобто елементи в рядку) відділяються комою - «,» або пробілом – «», а самі рядки крапкою з комою – «;».

 

Таблиця 3.1. Приклади створення векторів і матриць

Команда Результат виконання Коментар
a=[1.3; 5.4; 2] a = 1.3 5.4 Утворився вектор-стовпець
a=[1.3 5.4 2] a = 1.3 5.4 2 Утворився вектор-рядок
a=[1.3, 5.4, 2] a = 1.3 5.4 2 Утворився вектор-рядок
c=[12, 13, 14; 1 3 8] c = 12 13 14 1 3 8 Утворилася матриця розміру 2× 3

 

Ввід можна здійснювати і іншим чином. Кожен новий рядок матриці(або вектору-стовпця) можна вводити з нового рядка, наприклад, в командному рядку вводимо: B=[1 2 3 далі натискаємо клавішу «Enter». При цьому SciLab не виконує жодних дій, а чекає на продовження вводу. Після останнього введеного рядка слід набрати закриваючу квадратну дужку, що є ознакою завершення вводу і «Enter».

Ще один спосіб вводу матриці полягає в тому, що матрицю можна трактувати як вектор-рядок, кожен елемент якого є вектором-стовпцем, або навпаки.

Таблиця 3.2. Створення матриць

Команда Результат виконання Коментар
b=[1 2 45 1 0 3 0 0 2] b = 1 2 45 1 0 3 0 0 2 Утворилася матриця розміру 3× 3
a=[1 7] a = Утворився вектор-стовпець
c=[[3; 4] [-2; 1], [0; 5]] c = 3 -2 0 4 1 5 Утворилася матриця розміру 2× 3
с2=[[3, 4]; [-2, 1]; [0 5]] с2 = 3 4 -2 1 0 5 Утворилася матриця розміру 3× 2

 

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

 

Таблиця 3.3 Функції визначення розміру і розмірності матриці

Команда Результат виконання Коментар
ndims(a) ans = Розмірність вектора «а» становить 2
size(a) ans = 3 1 Розмір вектора «а» становить 3 рядки і 1 стовпець(3× 1).
ndims(c) ans = Розмірність матриці «с» становить 2
size(c) ans = 2 3 Розмір матриці «с» становить 2 рядки і 3 стовпці (2× 3)
ndims(c2) ans = Розмірність матриці «с2» становить 2
size(c2) ans = 3 2 Розмір матриці «с2» становить 3 рядки і 2 стовпці (3× 2)

 

Звертання до елементів матриць і векторів

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

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

Доступ до елементів матриці відбувається за допомогою двох індексів – номерів рядка та стовпця, також в круглих дужках після імені матриці. Розміщення елементів матриці в пам’яті визначає ще один спосіб звертання до них. Матриця А розміру m на n зберігається у виді вектору довжиною m, в якому елементи матриці розташовані один за одним, по рядках:

[A(1, 1) A(1, 2) …A(1, n) … A(m, 1) A(m, 2) …A(m, n)].

Тому, для доступу до елементів матриці можна використовувати лише один індекс, який задає порядковий номер елементу матриці в загальному векторі.

Зручним є також спосіб звертання до цілих блоків елементів векторів або матриць. Для цього використовується індексація за допомогою двокрапки – «:». При цьому до двокрапки вказується перший елемент блоку, після – останній. Якщо треба виділити з матриці цілий рядок або стовпець, то в якості одного з індексів слід вказати номер цього рядка, або стовпця, а інший індекс замінити двокрапкою.

 

Таблиця 3.4. Звернення до елементів матриці

Команда Результат виконання Коментар
v=[1, 5, 6, 7] v = 1 5 6 7 Утворився вектор-рядок
v(4) ans = Звертання до 4-го елементу вектора «v».
v(2)=0 v = 1 0 6 7 Зміна значення 2-го елементу, приводить зо зміни у векторі.
u=[v(3); v(1); v(4)] u = Формування нового вектору «u» з елементів «v»
ind=[4 2 1] ind = 4 2 1 Формування вектору індексів
w=v(ind) w = 7 0 1 Утворення нового вектора «w» з елементів «v», у послідовності вказаній у векторі «ind».
w2=[w, v] w2 = 7 0 1 1 0 6 7 Об’єднання векторів «w» та «v» у новий вектор - «w2»
w2(3: 5) ans = 1 1 0 Звертання до блоку елементів вектора «w2».

Таблиця 3.5. Прикади операцій над матрицями

Команда Результат виконання Коментар
m=[3 4 5 6 21 -4] m = 3 4 5 6 21 -4 Утворення матриці «m»
m(2, 3) ans = -4 Доступ до елемента матриці.
m(1, 2)*m(2, 2) ans = Вираз з елементів матриці
m(5)   ans = Індексація за допомогою порядкового номеру
m1=[m; m-2] m1 = 3 4 5 6 21 -4 1 2 3 4 19 -6 Утворення нової матриці «m1» на основі «m»
m2=m1(2: 3,:) m2 = 6 21 -4 1 2 3 Утворення нової матриці «m2» з блоку елементів «m1»
v=[1, 5, 6, 7] v = 1 5 6 7 Утворився вектор-рядок
m3=[m3; v(2), v(3)] m3 = 21 -4 2 3 19 -6 5 6 Об’єднання матриці «m3» і частини вектора «v».
m3=[m3, v'] m3 = 21 -4 1 2 3 5 19 -6 6 5 6 7 Об’єднання матриці «m3» і транспонованого вектора «v».
m3(1: 4, 2: 3)=1 m3 = 21 1 1 2 1 1 19 1 1 5 1 1 Заповнення частини матриці заданим значенням.

 

Логічні функції над масивами

 

Таблиця 3.6. Логічні функції над масивами

or Перевірка на наявність нульового елементу в масиві. F=all(A) – повертає TRUE, якщо в масиві А всі елементи ненульові, і FALSE, якщо є хоча б один елемент, рівний нулю. якщо: a=[1 2 3 4] то all(a) поверне T.   якщо: a=[1 2 3 0] то all(a) поверне F.
and Перевірка на наявність ненульового елементу в масиві. F=and(A) – повертає TRUE, якщо в масиві А є хоча б один елемент нерівний нулю і FALSE, якщо всі елементи рівні нулю. якщо: a=[1 2 3 0]   то any(a) поверне T.   якщо: a=[0 0 0 0] то any(a) поверне F.
find Знаходження індексів і значень ненульових елементів масивів. k = find(X) в вектор k заносяться номери ненульових елементів масиву х. Якщо х є матрицею, то вона трактується як вектор, складений з її стовпців. [i, j] = find(X) у вектори і та j записуються індекси ненульових елементів матриці х.     якщо: x=[1 2; 4 0; 0 1] то: k=find(x) поверне:   k = 1 [i, j]=find(x) поверне:  
i = 1 j = 1
 

 

Знищення рядків, стовпців, елементів

В SciLab парні квадратні дужки – «[]» позначають пустий масив, який дозволяє знищувати стовпці і рядки матриці, або елементи вектору. При цьому розмір результуючої матриці буде менший, ніж вхідної.

 

Таблиця 3.7. Операції знищення елементів матриці

Команда Результат виконання Коментар
v=[2 3 4 7 ] v = 2 3 4 7 Утворення вектору «v»
v(1)=[] v = 3 4 7 Знищення першого елементу «v»
m=[2 0 3 1 1 4 6 1 3] m =   2 0 3 1 1 4 6 1 3 Утворення матриці «m»
m(1,:)=[] m = 1 1 4 6 1 3 Знищення першого рядка матриці «m»
m(:, 2: 3)=[] m = Знищення частини стовпців матриці «m»

 

Створення матриць спеціального виду

Таблиця 3.8. Створення матриць спеціального виду

zeros(n, m) zeros(n). Створення матриці нулів
ones(n, m) ones(n). Створення матриці одиниць
eye(n, m) або eye(n) Створення одиничної матриці
rand(n, m) або rand(n) Матриця заповнена випадковим чином між нулем і одиницею.
diag Створення діагональної матриці
diag(n, m) Створення матриці з заповненою бічною діагоналлю
diag(n) Виділення діагоналі матриці в вектор

 

Інші операції над масивами

Таблиця 3.9. Інші операції над масивами

cat Об’єднання масивів, відповідні розміри повинні співпадати.
A(:, $: -1: 1) Перестановка стовпців матриці А зліва направо.
A($: -1: 1,:) Перестановка рядків матриці А зверху вниз.
tril Виділення нижнього трикутника матриці
triu Виділення верхнього трикутника матриці
repmat Створення блочної матриці з однакових блоків M= repmat(A, m, n) – матриця М буде складатися з m блоків по вертикалі і n блоків по горизонталі, кожен блок є матрицею А
matrix Зміна форми матриці або вектора. A=matrix(x, m, n) – формування матриці m на n з елементів масиву х, довжиною m*n. Елементи х вибираються послідовно, утворюючи стовпці А

Елементарні операції над векторами і матрицями

Додавання, віднімання над векторами і матриця однакового розміру відбувається так, ніби вони є скалярними величинами. Для цього використовуються відповідні позначення арифметичних операцій: «+» і «-». Також, всі елементарні математичні функції в SciLab пристосовуються до виду вхідних аргументів і якщо вони є векторами чи матрицями, то результат буде відповідно. Вектором або матрицею. Крім того, існує можливість примусово задати поелементну роботу з масивами.

 

Таблиця 3.10. Елементарні операції над векторами і матрицями

Команда Результат виконання Коментар  
v=[2 3 4 7 ]   w= [ 1 5 6 9]   x=v+w   v = 2 3 4 7 w = 1 5 6 9 x = 3 8 10 16 Додавання векторів  
m1=[1 2; 5 8]     m2=[-1 2; 0 6]     y=m1-m2   m1 = 1 2 5 8 m2 = -1 2 0 6 y = 2 0 5 2 Віднімання матриць  
y1=2*m1 y1 = 2 4 10 16 Множення матриці на константу  
  x1=v-4 x1 = -2 -1 0 3 Віднімання константи від вектора
  sin(x1)   ans = -0.9093 -0.8415 0 0.1411 Знаходження синусів елементів вектора.
  v=[2 3 4 7 ]   w= [ 1 5 6 9]   f=v.*w v = 2 3 4 7 w = 1 5 6 9 f= 2 15 24 63 Поелементне множення векторів
  Y=y.*y1 Y = 4 0 50 32 Поелементне множення матриць
             

 

Множення і ділення векторів і матриць

Як відомо, операції множення і ділення для векторів і матриць не є тривіальними.

Вектор можна помножити на вектор скалярно (внутрішній добуток), векторно, або утворити так званий зовнішній добуток. Результатом скалярного добутку є число, векторного – вектор, а зовнішнього – матриця.

Скалярний добуток векторів a, b довжиною N, що містять дійсні числа, визначається формулою: . Тому, для знаходження такого добутку слід знайти поелементний добуток векторів, а далі додати отримані результати. В SciLab це можна зробити одною командою: якщо a і b вхідні вектори, то їх скалярний добуток буде обраховано командою sum(a.*b).

Зовнішнім добутком векторів a, розміру N і b, розміру M називається матриця С, розміру , елементи якої знаходяться за формулою: . Фактично, слід помножити вектор – стовпець на вектор рядок. Для цього в SciLab досить виконати команду c=a*b’, де ’ – операція транспонування матриці.

Для множення матриць слід пам’ятати, що відповідні розмірності в них повинні співпадати множення виконується за допомогою оператора «*».

Транспонування матриці виконується за допомогою «.’», а знаходження спряженої матриці за допомогою «’».

Піднесення до степеня квадратної матриці, виконується за допомогою оператора «^».

Поелементне піднесення до степеня матриці, виконується за допомогою оператора «.^».

Для ділення елементів одної матриці на відповідний елемент другої, використовується «./», а другої на першу, відповідно «.\».

Функції обробки даних для матриць і векторів

Таблиця 3.11. Функції обробки для матриць і векторів

prod Знаходження добутку елементів вектора. Для матриці знаходяться добутки по стовпцях. Щоб знайти добуток по рядках слід вказати prod(M, 2), де М – матриця
cumprod Знаходження нагромаджуючого добутку. Для матриці знаходяться нагромаджуючих добутків по стовпцях.
sum Знаходження суми елементів вектора. Для матриці знаходяться суми по стовпцях. Щоб знайти суму по рядках слід вказати sum(M, 2).
cumsum Знаходження нагромаджуючої суми. Для матриці знаходяться нагромаджуючі суми по стовпцях. Щоб знайти суму по рядках слід вказати sum(M, 2)..
min Знаходження мінімального елементу у векторі. Для матриця відбувається знаходження мінімумів у кожному стовпці
max Знаходження максимального елементу у векторі. Для матриця відбувається знаходження максимальних елементів у кожному стовпці
length Знаходження довжини вектора.

 

 


4. Можливості вводу і виводу неграфічної інформації

Для вводу даних з клавіатури, або за допомогою миші, під час виконання програми існують такі найпростіші вбудовані засоби:

 

Функція input

Дозволяє ввід довільних даних з клавіатури, під час виконання програми. Запит на ввід відображається в командному вікні. Має таке застосування:

синтаксис:

змінна = input(' рядок тексту, що виведеться ')

змінна = input(' рядок тексту ', 's')

приклад: а = input('введітьзначення змінної А: ')

b= input('продовжити роботу? Y/N', 's')

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

В другому випадку довільні введені значення будуть трактуватися як рядок символів.

 

Функція x_dialog

синтаксис:

змінна = x_dialog( 'title', ’value’ )

Функція x_dialog виводить на екран діалогове вікно з ім’ям title, після чого користувач може клацнути ОК, і тоді рядок value повернеться в якості результату у змінну. Або ввести нове значення замість value, яке і повернеться в якості результату у змінну.

приклад: а = x_dialog('введітьзначення змінної А: ', ’value’)

 

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

Найпростіший з них – це відсутність в кінці рядка знаку «;». При цьому відбувається автоматичне відображення в командному вікні обрахованих, або просто вказаних даних.

Наприклад:

--> a=12;

--> b=13;

--> c=25;

--> x=a+b;

--> x=a+b

x =

--> c

c =

 

Функція disp

Ще один спосіб відображення даних – використання функції « disp » з параметром, який вказує, що слід вивести. При цьому назва параметра не виводиться.

--> disp(x)

Функція print

Функція print записує значення змінних у файл.

Синтаксис:

print('file-name', x1, [x2,...xn])
5. Робота з графікою

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

 

Таблиця 5.1. Основні графічні функції SciLab

plot двохвимірний графік
surf трьохвимірний графік
contour контурний графік
pie кругова діаграма
histplot гістограма
bar стовпчикова діаграма
barh горизонтальна стовпчикова діаграма
hist3d трьохвимірна гістограма
polarplot графік в полярних координатах
Matplot кольоровий двохвимірний графік матриці
legend задає легенду текучого графіку
title відображає заголовок текучого графіку
xtitle Відображає заголовок і підписи осей текучого графіку

 

Команда figure

Ця команда призначено для створення пустого графічного вікна і відображення його на екрані. Це вікно стає активним, тобто всі наступні графічні функції будуть здійснювати побудову графіків саме в ньому. Для отримання нового графічного вікна, слід знову використати команду figure. Щоб мати можливість переходу між вікнами, варто скористатися його номером, тобто використовувати команду з параметром: figure(номер). При цьому в будь який момент програми можна зробити активним довільне графічне вікно. Номер графічного вікна є також, вказівником на це вікно, тобто команда In=figure приведе до того, що у змінній In буде зберігатися номер(вказівник) активного вікна. Для очищення всього активного вікна існує команда clf (clear figure), а для того, щоб очистити лише графік, але залишити осі, заголовок і назви осей, використовується команда cla (clear axes). Ці команди також можна використовувати з параметром, який вказує номер потрібного вікна.

Будь-яка команда створення графіку(plot, bar, і т.ін.) автоматично створює одне графічне вікно. Якщо не користуватися командою figure, то кожен наступний вивід буде здійснюватися в єдине вікно, знищуючи попередній графік.

 

Команда subplot

Дана команда дозволяє розбити графічне вікно на декілька підграфіків з власними осями координат. Вона розташовує підграфіки у виді матриці:






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.