Scilab частина и програмування в scilab

позначення

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

  • жирним шрифтом вказуються ключові слова;
  • в кутових дужках вказуються <названия элементов>. які вводяться або визначаються користувачем. При цьому в сьогоденні коді кутові дужки не вводяться.
  • Що таке Scilab

    Scilab - це кроссплатформенная система комп'ютерної алгебри (СКА), що володіє подібним з Matlab синтаксисом вбудованої мови. Розробка системи Scilab ведеться співробітниками французького Національного інституту інформатики і автоматизації (INRIA - Institut National de Recherche en Informatique et Automatique) з 80-х років минулого століття.

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

    Для системи є досить велика кількість пакетів розширень, які можна знайти на офіційному сайті в розділі Toolbox center. Однак чим більше буде хороших пакетів, тим більше корисної стане система. Тому ми пропонуємо вам ознайомитися з програмуванням в Scilab і способами створення для даної СКА пакетів розширень.

    В даному циклі статей ми не будемо зупинятися на виконанні обчислень в Scilab, що не будемо також розглядати вбудовані функції і їх параметри. Цю інформацію можна знайти в Інтернеті (див. Розділ «Ресурси»), а також в довідкових матеріалах самої системи. Ми займаємося вивченням безпосередньо програмування в Scilab.

    Scilab частина и програмування в scilab

    File - тут знаходяться стандартні команди для роботи з файлами: відкрити (Open), закрити (Close file), зберегти (Save) і т. Д. А також команди імпорту файлів функцій з формату Matlab і формування довідкових матеріалів.

    Search - тут знаходяться функції пошуку по тексту.

    Debug - містить команди для організації і виконання налагодження, такі як включення точок зупину (breakpoint), додавання змінних в список спостереження (watch), настройка запуску функції і т. Д. На жаль, в Scilab 5.1 даний режим недоступний внаслідок наявності неустраненной помилки.

    Scheme - команди управління підсвічуванням синтаксису.

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

    Збереження, завантаження і виконання скриптів користувача

    Зберегти створений скрипт можна за допомогою пунктів меню File:

    • File> Save - зберегти скрипт;
    • File> Save as - зберегти скрипт під іншим ім'ям;
    • File> Save all - зберегти всі відкриті скрипти.

    Для відкриття файлу скрипта необхідно виконати File> Open, а потім перейти в каталог з необхідним файлом, вибрати його і натиснути кнопку Open. Крім того, в самому меню File є список останніх відкритих файлів.

    Щоб протестувати функцію, її необхідно передати в основне вікно Scilab (консоль). Для цього необхідно скористатися меню Execute, в якому присутні три пункти:

    • Load into Scilab - завантажити в Scilab поточний скрипт;
    • Load all into Scilab - завантажити в Scilab всі відкриті скрипти;
    • Evaluate selection - виконати в консолі Scilab тільки виділені рядки.

    Стандартні конструкції вбудованої мови

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

    Змінні не описуються, а створюються шляхом присвоєння їм початкового значення, наприклад так:

    Змінні в Scilab не мають суворої типізації, т. Е. Якщо в змінної зберігався текст, то можна на наступному кроці записати в неї число, а потім логічне значення. Scilab стежить за відповідністю типів тільки при обчисленні значень виразів.

    Внаслідок Unix-коренів системи, важливий регістр букв в імені змінних, наприклад:

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

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

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

    Лінійний процес обчислень

    Створимо стандартну, для початківців програмувати, функцію, яка буде вітати всіх на ім'я:

    Ось приклад виконання цієї функції:

    Тепер зазначимо в якості вхідного параметра не одне значення, а масив значень:

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

    У призначених для користувача скрипти можна використовувати будь-які сторонні функції, що входять до складу самої системи Scilab або її пакетів-розширень. При цьому використовуються наступні знаки дій: + (додавання), - (віднімання), * (множення), / (ділення), ^ (піднесення до степеня), '(транспонування). Спочатку ці операції служать для виконання матричних дій за правилами матричної алгебри. наприклад:

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

    Для виконання поелементного множення двох масивів необхідно використовувати ознака поелементного дії, т. Е. Поставити перед знаком дії точку (точка і знак дії пишуться разом, без пробілу):

    Те ж саме відноситься і до всіх інших дій крім операції транспонування.

    Оператори розгалуження

    Створимо тепер функцію для розрахунку логарифма числа за довільним основи:

    Однак, як відомо, логарифм числа a за основою b має сенс тільки при виконанні умов: a, b> 0, a ≠ 1. Накладемо додаткову умову: вхідні параметри повинні бути скалярними величинами, т. Е. Векторами або матрицями. Для того щоб функція не приводила до висновку повідомлення про помилку або краху системи, вхідні дані слід перевіряти на коректність. Зробити це можна за допомогою умовного оператора, загальний вигляд якого показаний нижче:

    Запишемо новий вид функції з перевіркою вхідних даних на коректність:

    У наведеному фрагменті коду використовується функція or ([масив умов]), яка повертає результат застосування логічної операції АБО до всіх, перерахованих в квадратних дужках, умовам. Подібна з нею і функція and ([список умов]), яка повертає результат застосування логічної функції І до всіх елементів списку умов. Однак можна використовувати і стандартні операції C ++, т. Е. - І, | - АБО.

    Також потребує пояснення функція error (<сообщение>). Ця функція зупиняє обчислення і повідомляє користувача про те, що сталася помилка і вказує ім'я і рядок функції, в якій ця помилка виникла. Більш м'яким рішенням може бути використання попереджень (warning), які дозволяють вивести повідомлення про виниклі проблеми, але обчислення при цьому не зупиняються. Спосіб використання простий:

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

    Іншими словами, в заголовку оператора множинного вибору вказується змінна перечислимого типу, потім вказується один з варіантів (case) значення змінної і виконується відповідне даним значенням дію. Слід зазначити, що службове слово then має перебувати на одному рядку зі словом case.

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

    Для організації повторюваних обчислень в Scilab присутній два стандартних типу циклів: рахунковий (for) і умовний (while). Перший використовується в тих випадках, коли заздалегідь відомо кількість повторень тіла циклу, другий - в зворотному випадку.

    Загальний вигляд оператора рахункового циклу наступний:

    Як вираження може виступати все що завгодно. Якщо в якості вираження вказується вектор (матриця), то змінна-лічильник послідовно приймає всі значення цього вектора (матриці). Якщо згадати, як в Scilab створюються масиви значень, то можна привести цю конструкцію до стандартного вигляду для циклу for у всіх мовах програмування:

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

    Справа в тому, що Scilab намагається перевести в рядок весь масив відразу. Тому довжина рядка виходить дуже великий. Отже, необхідно розглянути кожен з елементів. У цьому може допомогти рахунковий оператор циклу:

    Крім використання оператора циклу for, в коді функції з'явилася змінна i для нумерації елементів результату і змінна-результат укладена в квадратні дужки, щоб показати, що в результаті вийде масив. Можливий і такий варіант початку функції:

    Однак і на цьому етапі функція ще не досконала, оскільки в рядок число переводиться в тому ж вигляді, що і відображається, а це максимум дев'ять позицій, і результат 'Багато' ми ніколи не отримаємо. Тому краще буде просто порахувати кількість розрядів в числі. У цьому нам допоможе цикл while. Загальний вигляд цього оператора:

    Поки результат обчислення виразу дорівнює True, цикл виконується. Щоб відокремити вираз-умова від тіла циклу, можна використовувати ключові слова then або do, але вони повинні знаходитися на тому ж рядку, що і while. Крім того, перед end можна вставити блок else, інструкції якого будуть виконані після того, як вираз-умова стане брехнею (False).

    Отже, замість рядків

    можна вставити наступне:

    Остаточну версію функції ви можете завантажити за посиланням в розділі «Завантаження».

    висновок

    Схожі статті