Scilab
Scilab (произношение: saɪləb, сокращение от Scientific Laboratory на английском языке) — свободное программное обеспечение для численных вычислений, кроссплатформенная программа, предоставляющая вычислительную среду для научных приложений. Изначально разрабатывался исследователями из INRIA и ENPC, а с середины 2022 года поддерживается компанией Dassault Systèmes. Программа написана на языках C, C++, Fortran и Java, а также включает собственный интерпретируемый язык Scilab. Последняя стабильная версия — 2025.1.0 (май 2025 года).
Что важно знать
| Scilab | |||
|---|---|---|---|
| Тип | Численные вычисления | ||
| Авторы | INRIA и ENPC (группа Scilab)[1] | ||
| Разработчик | Dassault Systèmes[2] | ||
| Написана на | C, C++, Fortran, Java, язык Scilab[3] | ||
| Интерфейс | Графический и командная строка[4] | ||
| Движки | Интерпретатор языка Scilab, LAPACK, LINPACK, Xcos[3] | ||
| Операционные системы | Windows, Linux, MacOS | ||
| Языки интерфейса | многоязычный | ||
| Первый выпуск | 2 января 1994[1] | ||
| Аппаратные платформы | x86-64, ARM64[5] | ||
| Последняя версия | 2025.1.0[6] (22 мая 2025[6]) | ||
| Репозиторий | gitlab.com/scilab | ||
| |||
| |||
| Состояние | активное | ||
| Лицензия | GPLv2, ранее CeCILL v2 | ||
| Сайт | scilab.org | ||
Описание
Включает язык программирования, ориентированный на численные вычисления высокого уровня. Может использоваться для обработки сигналов, статистического анализа, обработки изображений, симуляций динамики жидкостей, численной оптимизации, а также моделирования и симуляции явных и неявных динамических систем.
Доступен для Windows, MacOS, GNU/Linux и BSD.
Синтаксис и возможности Scilab схожи с MATLAB, однако эти программы не совместимы, хотя существует конвертер с MATLAB на Scilab[9].
История
История Scilab начинается в 1980-х годах с программного обеспечения Blaise, которое было создано в исследовательском институте INRIA Франсуа Делебеком (François Delebecque) и Сержем Стиром (Serge Steer). В 1984 году INRIA основал стартап Simulog для коммерциализации продукта под названием Basile.
В начале 1990-х годов, после прекращения распространения Basile, проект был возрождён под названием Scilab в результате сотрудничества исследователей INRIA и ENPC. В команду разработчиков, известную как «Scilab Group», входили Клод Гомес, Морис Гурса, Рамин Никуха, Серж Стир, Франсуа Делебек из INRIA и Жан-Филипп Шанселье из ENPC. Первая версия, Scilab 1.1 (изначально Ψlab[10]), была выпущена как свободное ПО с открытым исходным кодом 2 января 1994 года.
В начале 2003 года INRIA создал Консорциум Scilab при поддержке компаний и академических организаций для поддержки растущего числа пользователей и обеспечения будущего и развития Scilab. В рамках индустриального развития в 2008 году консорциум Scilab вошёл в Фонд научного сотрудничества Digiteo для обеспечения устойчивого роста проекта.
В 2010 году была создана компания Scilab Enterprises[11], которая с 2012 года полностью взяла на себя разработку Scilab, чтобы развивать бесплатное программное обеспечение и предоставлять платные профессиональные услуги[11].
В феврале 2017 года ESI Group приобрела Scilab Enterprises и интегрировала её команду. С февраля 2019 года (начиная с версии Scilab 6.0.2) версия для MacOS собирается и распространяется Технологическим университетом Компьеня[12].
В августе 2022 года Scilab был приобретён компанией Dassault Systèmes[13].
Начиная с 2023 года, Scilab перешёл на новую схему нумерации версий, при которой мажорные релизы (X.0.0) выходят в октябре, а минорные (X.1.0) — в мае следующего года.
2023 год
- Scilab 2023.0.0 (10 марта 2023) — первый релиз по новой схеме, включавший более 100 исправлений[14]. Среди нововведений: свойство auto_stretch для осей графиков и функция toJSON[15].
- Scilab 2023.1.0 (22 мая 2023) — стабильное обновление с улучшениями, в том числе для функции редактирования кривых edit_curv[15] и функции конкатенации cat[16].
- Scilab 2024.0.0 (24 октября 2023) — крупный релиз, выпущенный, несмотря на номер, в 2023 году[17]. Ключевые нововведения:
2024 год
- Scilab 2024.1.0 (23 мая 2024) — стабильное обновление, добавившее графическую утилиту uiimport для импорта данных из CSV-файлов и функцию bezier для вычисления кривых Безье[18].
2025 год
- Scilab 2025.0.0 (октябрь 2024) — версия, принёсшая значительные технические улучшения[19]:
- Включение сглаживания (anti-aliasing) по умолчанию для графиков[19].
- Нативная сборка для macOS на архитектуре ARM64 (Apple M1/M2), что удвоило производительность по сравнению с эмуляцией[20].
- Обновление всех зависимостей Java до версии 17[20].
- Новая функция kmeans для кластеризации методом k-средних[19].
- Scilab 2025.1.0 (22 мая 2025) — последняя стабильная версия, расширившая функциональность[21]:
Разработка следующей крупной версии, Scilab 2026.0.0, запланирована на октябрь 2025 года[23].
Лицензия
Scilab распространяется бесплатно и с открытым исходным кодом через Интернет с 1994 года. Однако до 2008 года он не являлся свободным ПО по определению FSF. Старая лицензия Scilab запрещала коммерческое распространение изменённых версий, что классифицировало его как полусвободное ПО[24].
В 2008 году, с выходом версии 5.0, Scilab перешёл на лицензию CeCILL v2, совместимую с GNU GPL, и стал полностью свободным программным обеспечением. Начиная с версии 6.0, Scilab распространяется под лицензией GPLv2[25].
Архитектура
Scilab представляет собой комплексную систему, архитектура которой состоит из нескольких ключевых компонентов. Программа написана на нескольких языках программирования, что позволяет сочетать высокую производительность вычислений с кросс-платформенностью графического интерфейса.
Ключевые компоненты архитектуры:
- Языки программирования: Основные компоненты и функции для высокопроизводительных численных расчётов написаны на языках C, C++ и Fortran[26]. Для реализации графического пользовательского интерфейса (GUI) и других платформенно-независимых элементов используется Java[26].
- Интерпретатор: Центральным элементом системы является интерпретатор собственного высокоуровневого матрично-ориентированного языка Scilab, который обрабатывает и выполняет команды пользователя и скрипты[27].
- Научные библиотеки: Для выполнения численных операций Scilab опирается на набор проверенных и оптимизированных библиотек с открытым исходным кодом, таких как LAPACK, LINPACK, ODEPACK и ATLAS. Эти библиотеки предоставляют надёжные алгоритмы для решения задач линейной алгебры, дифференциальных уравнений и других математических операций.
- Компонент моделирования: В состав Scilab входит Xcos (ранее известный как Scicos) — инструмент для графического моделирования и симуляции динамических систем, являющийся аналогом Simulink в MATLAB.
Архитектура Scilab спроектирована как открытая и расширяемая система, позволяющая пользователям добавлять собственные модули и функции, написанные на C, C++, Fortran и Java, а также создавать интерфейсы к внешнему коду.
Системные требования и поддерживаемые платформы
Scilab является кроссплатформенным программным обеспечением, современные версии которого ориентированы на 64-битные аппаратные архитектуры. Программа официально поддерживает следующие операционные системы и платформы:
- macOS
- Поддерживаемые ОС: macOS 10.13 High Sierra и более новые версии.
- Архитектура процессора: 64-битные процессоры Intel и ARM64 (Apple Silicon M1, M2 и т. д.). Начиная с версии 2025.0.0, Scilab имеет нативную сборку для macOS на архитектуре ARM64, что обеспечивает значительный прирост производительности по сравнению с эмуляцией. Сборка для macOS предоставляется при содействии Технологического университета Компьеня (UTC).
В прошлом старые версии Scilab поддерживали более широкий спектр Unix-систем и 32-битные архитектуры, однако современные версии сфокусированы на 64-битных платформах[31].
Краткое описание использования
Scilab может выполнять инструкции в командной строке, а также командные файлы (скрипты) с инструкциями (текстовый формат). Можно запускать программы на Fortran или C из Scilab. Также возможно использовать движок Scilab из внешнего приложения через API call_scilab. Scilab дополняется графической средой Xcos (основанной на Scicos), аналогичной графической среде Simulink, поставляемой с Matlab.
Scilab обладает гибридным пользовательским интерфейсом, который сочетает многооконную графическую среду и интерфейс командной строки, обеспечивая гибкость как для интерактивной работы, так и для разработки приложений.
Основное окно программы по умолчанию включает в себя несколько закреплённых компонентов:
- Консоль (Console) — основной элемент для интерактивной работы, где пользователь вводит команды (после приглашения -->) и видит текстовые результаты вычислений или сообщения об ошибках[32].
- Редактор SciNotes — встроенный текстовый редактор, предназначенный для написания, отладки и выполнения скриптов (файлов с расширением `.sce`) и функций[32].
- Обозреватель переменных (Variable Browser) — отображает все переменные, созданные в текущей сессии, их тип, размер и значение.
- Обозреватель файлов (File Browser) — позволяет просматривать файлы и каталоги на компьютере и управлять ими.
- История команд (Command History) — хранит историю введённых в консоли команд, которые можно вызвать и выполнить повторно.
Все графики и диаграммы, создаваемые командами Scilab, отображаются в отдельном графическом окне (Graphics Window). Пользователь может настраивать рабочее пространство, перемещая, группируя и открепляя эти окна. Начиная с версии 2024.1.0, в Scilab встроена графическая утилита uiimport для упрощённого импорта данных из CSV-файлов.
Помимо стандартного интерфейса, Scilab предоставляет инструменты для создания собственных графических приложений (GUI)[33]. Это позволяет разрабатывать интерактивные программы с кнопками, ползунками и полями для ввода, делая их доступными для пользователей, не владеющих языком Scilab[34]. Для создания GUI используются функция `uicontrol()` для программного добавления элементов управления[35], а также специализированные модули, такие как GUI Builder. В версии 2025.1.0 был добавлен новый элемент управления «Browser».
Приглашение командной строки (prompt) — это «стрелка»: два дефиса и знак больше -->. Инструкция вводится и подтверждается клавишей ввода. Результат отображается сразу, если только строка не заканчивается точкой с запятой, в этом случае результат скрывается. Например:
-->a = 1;
-->A = 2;
-->a + A
ans =
3.
Первая команда присваивает значение «1» переменной «a» (результат скрыт), вторая — значение «2» переменной «A» (синтаксис чувствителен к регистру), третья вычисляет сумму двух переменных (ans — сокращение от answer, «ответ» по-английски).
Можно писать несколько инструкций в одной строке, разделяя их запятыми или точкой с запятой, если не требуется вывод результата. Также можно переносить инструкцию на несколько строк (например, для оформления), поставив три точки «...» перед нажатием клавиши ввода.
Scilab использует стандартные функции и операторы (+, -, *, /, ^ или **, sqrt() — квадратный корень, cos() — Косинус, int() — целая часть, round() — округление до ближайшего, abs() — модуль и др.; например, rand — случайное число от 0 до 1). Функция who выводит объявленные переменные. Переменная ans содержит последний результат.
Десятичный разделитель — точка. Для ввода мнимой единицы i используется %i; в результатах отображается как «i». Начиная с версии 2025.0.0, синтаксис для работы с комплексными числами был упрощён. Для бесконечности ∞ — %inf; отображается как «inf». Значение π — %pi, e — %e.
Для присваивания булевого значения используется %T для «истина» (true) и %F для «ложь» (false). Результат операции отображается как T или F.
Оператор ИЛИ — "|" (пайп), И — «&» (амперсанд), НЕ — «~» (тильда). Пример:
-->(%T & %F) | %F
ans =
F.
Булево значение также можно получить сравнением двух значений: равенство ==, неравенство <> или ~=, а также порядковые отношения <, <=, >, >=.
Речь идёт не о полиномиальных функциях, а о формальных многочленах.
Объявление многочлена осуществляется двумя функциями. Первая — x = poly(0, "x") определяет «x» как переменную многочлена, затем задаётся сам многочлен. Пример:
-->x = poly(0, "x"); p = x ^ 2 + 2 * x + 1
p =
2
1 + 2x + x
Функция roots(p) возвращает корни многочлена p, coeff(p) — матрицу коэффициентов многочлена p. varn(p) возвращает имя переменной многочлена (здесь — x).
Команда x = poly(0, "x") определяет, что x — простейший многочлен с переменной «x» и корнем 0, то есть моном x. x = poly(2, "x") — простейший многочлен с корнем 2, то есть x — 2.
Эта функция позволяет задать многочлен с несколькими корнями, используя строку-матрицу вместо числа. Например, x=poly([1 2], "x") определяет многочлен с корнями 1 и 2, то есть x2 — 3x + 2.
Можно также сгенерировать многочлен по коэффициентам из строки-матрицы, добавив символ 'c' в конец аргументов. Например, x = poly([a0, a1, …, an], "x", "c") определяет многочлен a0 + a1·x +... + an·xn.
Scilab аналогично работает с рациональными дробями. Достаточно объявить моном с помощью poly() и затем определить дробь. Пример:
-->x = poly(0, "x"); f = (1 + x) / (1 - x)
f =
1 + x
-----
1 - x
-->1/f
ans =
1 - x
-----
1 + x
Числитель дроби f — f.num, знаменатель — f.den.
Функция derivat(p) вычисляет производную многочлена или дроби p. simp(q) упрощает дробь q.
Использовать многочлен или дробь как функцию можно с помощью horner. Название функции horner связано с методом Горнера для вычисления значения многочлена с минимальным числом умножений: .</ref>: horner(p,2) вычисляет p(2).
Одиночные символы или строки заключаются в одинарные кавычки или двойные кавычки: 'abc' или "abc".
Одинарная кавычка завершает строку; чтобы вставить кавычку в строку, пишут две подряд '', для двойной кавычки — "".
Сложение + для строк означает конкатенацию. Строку можно интерпретировать как команду Scilab с помощью evstr().
Scilab изначально предназначен для матричных вычислений. Все функции применяются к матрицам; например, если M — матрица, то log(M) возвращает матрицу из логарифмов элементов M. Элементы матриц могут быть любого типа (вещественные, комплексные, булевы, Многочлен, Рациональная дробь, Строка и др.).
Для задания матрицы по элементам их заключают в квадратные скобки […]. Элементы строки разделяются пробелом или запятой, строки — точкой с запятой. При выводе матрица отображается как таблица без рамки (кроме строковых матриц, которые обрамляются восклицательными знаками). Пример:
-->[1, 2, 3 ; 0, 1, 0 ; 0, 0, 1]
ans =
1. 2. 3.
0. 1. 0.
0. 0. 1.
Пустая матрица обозначается []. Выражение M(i,j) — элемент (i, j) матрицы M. Символ : (двоеточие) — «все индексы», например M(1, :) — первая строка (это вектор-строка). Символ $ (доллар) — последний индекс (строки или столбца).
Выражение N1:N' создаёт вектор-строку от N1 до N', шаг 1. N1:шаг:N2 — с заданным шагом. Например:
-->1.1:5.2
ans =
! 1.1 2.1 3.1 4.1 5.1 !
--> 1:2:5
ans =
! 1 3 5 !
-->"a":"d"
ans =
abcd
zeros(m,n) создаёт матрицу m×n из нулей; ones(m,n) — из единиц. eye(n,n) — единичная матрица n×n. Можно передать матрицу M в эти функции — создаётся матрица той же размерности. Например, M = zeros(M) обнуляет все элементы M.
Если ƒ — внешняя функция (определена через deff или function), а x и y — векторы, то feval строит матрицу z = ƒ(x, y):
z = feval(x, y, f), где z(i, j) = ƒ(x(i), y(j))
size(M) возвращает размер матрицы как матрицу 2×1: число строк и столбцов.
Операции с матрицами:
- транспонирование: точка и апостроф
.’; только апостроф'— сопряжённое транспонирование (сопряжённый оператор); - матричное умножение:
*; - поэлементные произведение и деление:
.*и./; - Тензорное произведение:
.*.; - определитель квадратной матрицы M:
det(M)(determ()— для матриц многочленов,detr()— для матриц дробей); - след квадратной матрицы M:
trace(M); - обратная матрица M:
inv(M).
Вектор — это строка или столбец (матрица 1×n или n×1); V(i) — i-я компонента V. Если V1 и V2 — векторы-столбцы, скалярное произведение V1.' * V2; если векторы-строки, V1 * V2.'.
Начиная с версии 2024.0.0, в Scilab были введены два новых типа данных для работы с наборами данных: timeseries (временные ряды) и table (таблицы). Эти структуры данных предназначены для удобной обработки и анализа табличных и индексированных по времени данных. Одновременно были добавлены функции для их обработки, такие как retime (изменение временной шкалы), pivot (создание сводных таблиц) и stackedplot (построение графиков для нескольких переменных).
Функциональность для работы с таблицами была расширена в версии 2025.1.0, в которой появились новые функции, включая addvars (добавление столбцов), join (объединение таблиц по ключам) и removevars (удаление столбцов).
Scilab выполняет численные вычисления.
Можно использовать как Калькулятор, просто вводя выражения.
Функция deff позволяет определять новые функции («внешние функции»), которые выражаются через уже определённые операторы («примитивные функции»). Передаются две строки: первая — имя функции и переменные, вторая — формула. Например, функция
- ƒ(x) = 2 · x
определяется так:
deff("[y] = f(x)", "y = 2 * x")
(см. также раздел Программирование).
- Интегрирование
integrate("выражение", "x", x0, x1)численно вычисляет интеграл функции, заданной строкой (например,"sin(x)"), по переменной x от x0 до x1.
- Решение уравнений
- В Scilab есть несколько примитивов для решения уравнений (см. Решатель уравнений), в том числе:
linsolve— решение системы линейных уравнений,
синтаксис:[x0, kerA] = linsolve(A, b)
где A — матрица коэффициентов, b — вектор констант; решения A × x + b = 0 имеют вид x0 + w × kerA, w — произвольное число;solve— символьное решение линейной системы,
синтаксис:w = solve(A, b)
где A — верхнетреугольная матрица символов (коэффициенты), b — вектор символов (правая часть), w — результат (A × w = b);ode— решение обыкновенного дифференциального уравнения (англ. ordinary differential equation). Начиная с версии 2024.0.0, в Scilab интегрированы современные решатели ОДУ и ДАУ на основе библиотеки SUNDIALS. Стандартный синтаксис для вычисления y(t) из уравнения dy/dt = ƒ(t):y = ode(y0, t0, t, f)
где y0 и t0 — начальные значения, t — вектор точек, y — вектор решений (plot(t, y)строит график);
odeподдерживает аргументы для специальных случаев:"roots"— добавляет уравнение g(t, y) = 0,"discrete"— вычисляет рекурсивно y(k + 1) = ƒ(k, y(k)) с начальным состоянием y(k0).
- Есть и другие примитивы для специальных систем.
В последних версиях Scilab был расширен набор функций для численного анализа и обработки данных. В частности, были добавлены:
kmeans— функция для кластеризации данных методом k-средних (версия 2025.0.0).polyfitиpolyval— функции для аппроксимации данных полиномом и вычисления его значения (версия 2025.1.0).bezier— функция для вычисления кривых Безье (версия 2024.1.0).
Построение графика функции состоит из двух этапов:
- задать диапазон переменной и шаг, в виде вектора-столбца, например
x = [начало:шаг:конец]'; - построить график командой
plot(x, f(x)), если ƒ — функция.
Можно строить несколько функций одновременно, поместив их в матрицу, например plot(x, [f1(x) f2(x) f3(x)]).
ƒ(x) сама по себе вектор. Обычно задают вектор x и вектор y, и plot(x, y) строит облако точек.
Если ƒ — внешняя функция (например, определена через deff или function), можно построить график напрямую fplot2d(x, f). Можно также определить y через y = feval(x, f), затем plot(x,y).
xgrid включает сетку по делениям.
Функции plot2di (вместо plot) позволяют менять стиль графика:
plot2d— обычная линия; аналогичнаplot, но поддерживает маркеры;plot2d2— ступенчатая линия;plot2d3— столбчатый график;plot2d4— стрелки (для векторных полей);
Функции plot2di принимают аргументы для настройки графика: plot2di(x, y, аргументы). Аргументы — ключ = значение, разделяются запятыми.
Для маркеров используют style = n, где n — целое число (например, plot2d(x, y, style = 1)); отрицательное — маркеры (звёздочка для −10, кружки для −9 и т. д., список — getsymbol), положительное — сплошная линия определённого цвета.
Если несколько кривых (матрица Y), style — матрица, каждый элемент — стиль кривой, например:
Y = [cos(x), sin(x)]; plot2d(x, Y, style = [-2, -1])
Для подписей используют legend(), например:
legend("cosinus", "sinus")
Для логарифмической шкалы — logflag = тип, где тип — строка из двух символов: «n» (нормальная) или «l» (логарифмическая), первый символ — ось x, второй — ось y. Например:
plot2d(x, y, logflag = "nl")— x линейная, y логарифмическая;plot2d(x, y, logflag = "ll")— обе логарифмические.
Тип осей — axesflag = n, где n — целое: 0 — без осей, 1 — обычные оси внизу справа, 4 — в центре, 5 — в (0, 0) и т. д.
Число делений и подделений — nax = [nx, Nx, ny, Ny], где Nx — число делений по x, nx — подделений и т. д.
rect = [xmin, ymin, xmax, ymax] ограничивает область графика. Начиная с версии 2023.0.0, для осей графиков было добавлено свойство auto_stretch, которое позволяет автоматически подбирать оптимальные границы отображения.
polarplot строит график в полярных координатах: polarplot(theta,r), где r и theta — матрицы одинакового размера.
Начиная с версии 2025.0.0, для улучшения визуального качества графиков по умолчанию включено сглаживание (anti-aliasing).
Если x — вектор-столбец из m элементов, y — вектор-столбец из n элементов, z — матрица m×n, то
grayplot(x, y, z)
отображает карту цветов: каждой точке (x(i), y(j)) соответствует цвет по значению z(i, j).
Уровни цвета задаются функцией
xset('colormap', cmap)
где cmap — матрица с тремя столбцами, каждая строка — цвет в RGB (от 0 до 1). Первая строка — минимальный уровень, последняя — максимальный. Матрицу можно сгенерировать функциями …colormap, например graycolormap(n) (n оттенков серого), jetcolormap(n) (от синего к красному), hotcolormap(n) (от красного к жёлтому).
Например, xset("colormap", graycolormap(32)) — 32 оттенка серого. Градиент от чёрного к красному:
cmap = graycolormap(32); cmap(:, 2:3) = 0
или
r = linspace(0, 32, 32)'; cmap = [r zeros(32, 2)]
Градиент от синего к белому:
cmap = graycolormap(32); cmap(:, 2:3) = 1
или
r = linspace(0, 32, 32)'; cmap = [r ones(32, 2)]
Уровни цвета также используются при построении нескольких кривых на одном графике. В этом случае градиенты не дают хорошего контраста; стандартные уровни можно получить get(sdf(), "color_map").
Кривую уровней строит функция
contour2d(x, y, z, n)
где n — число уровней; можно задать значения уровней вектором:
contour2d(x, y, z, [z1, z2, …, zn])
Можно построить векторное поле: матрица vx — компоненты по x, vy — по y, функция:
champ(x, y, vx, vy)
champ1 — все векторы одинаковой длины, модуль задаётся цветом (см. grayplot).
Scilab строит поверхности в трёх измерениях (x, y, z). Если x — вектор-столбец из m элементов, y — из n, z — матрица m×n, то
plot3d(x, y, z)
строит поверхность по точкам (x(i), y(j), z(i, j)). Если поверхность — график функции ƒ, то
- z(i, j) = f(x(i), y(j)).
Если ƒ — внешняя функция (deff или function), z можно получить через feval или fplot3d(x, y, f).
param3d(fx(t), fy(t), fz(t)) строит параметрическую кривую; t — вектор значений параметра.
plot3d1, fplot3d1, param3d1 используют уровни цвета для значения z. Использование аналогично plot3d, уровни цвета задаются через
xset("colormap", cmap)
(см. выше).
Вид 3D-поверхности задаётся двумя углами в градусах: θ — поворот вокруг оси Z, α — вокруг оси Y (см. также Углы Эйлера): plot3d(x, y, z, theta, alpha), param3d(x, y, z, theta, alpha) и др.;
plot3d(x, y, z, 0, 0)— вид сверху (XY), проекция на XY по оси Z;plot3d(x, y, z, 90, 0)— вид спереди (XZ), проекция на XZ по оси Y;plot3d(x, y, z, 0, 90)— вид сбоку (YZ), проекция на YZ по оси X;plot3d(x, y, z, 45, 45)— вид по умолчанию, изометрическая перспектива.
Можно задать пределы осей через ключ ebox:
plot3d(x, y, z, ebox=[xmin, xmax, ymin, ymax, zmin, zmax])plot3d(x, y, z, theta, alpha, ebox=[xmin, xmax, ymin, ymax, zmin, zmax])
Если x — вектор, histplot(n, x), где n — целое, разбивает диапазон значений x на n равных интервалов и строит гистограмму. Если n — вектор строго возрастающих значений, они задают границы интервалов.
Если x — матрица, hist3d(x) строит 3D-гистограмму: параллелепипед в (i, j) имеет высоту x(i, j). Как и для всех 3D-графиков, можно задать угол обзора θ и α.
Можно рисовать геометрические фигуры на графике.
xpoly(x, y, "lines", 1) строит многоугольник, x — список абсцисс вершин (вектор или матрица), y — ординаты (той же размерности). xfpoly(x, y, "lines", 1) — закрашенный многоугольник.
xrect(x, y, l, h) — прямоугольник с верхним левым углом (x, y), ширина l, высота h. xfrect(x, y, l, h) — закрашенный прямоугольник.
xstring(x, y, "строка") — надпись на графике, левый нижний угол текста — (x, y).
xarc(x, y, l, h, a1, a2) — дуга эллипса в прямоугольнике с верхним левым углом (x, y), ширина l, высота h. Каждый градус делится на 64 сектора, дуга от угла a1×64° до (a1+a2)×64°. xfarc(x, y, l, h) — закрашенная дуга эллипса.
Для изменения свойств линий используют set("свойство", значение). Основные свойства:
line_style— тип линии: 0 — сплошная, 2 — длинные штрихи, 3 — короткие штрихи, 4 — штрихпунктир и т. д.;thickness— толщина линии (целое положительное);mark_size— размер маркеров (если есть).
Можно связать переменную с объектом через переменная = get("hdl") (hdl — «дескриптор»). Для задания свойства:
переменная.свойство = значение
Обе методики работают для любого объекта (кривая, многоугольник, дуга и т. д.).
Пример:
xarc(0, 1, 0.5, 0.5, 0, 360*64) // эллипс
set("line_style", 2) // штриховая линия
или
xarc(0, 1, 0.5, 0.5, 0, 360*64) // эллипс
a=get("hdl")
a.line_style=2 // штриховая линия
xset задаёт оформление:
- шрифт делений и заголовков:
xset("font", тип, размер), где- размер — размер шрифта (произвольная единица);
- тип — тип шрифта: 1 — греческие буквы (Symbol), 2-5 — с засечками (Times: 2 — обычный, 3 — курсив, 4 — жирный, 5 — жирный курсив); 6-9 — без засечек (Arial: 6 — обычный, 7 — курсив, 8 — жирный, 9 — жирный курсив);
- толщина осей и линий:
xset("thickness", e), где e — толщина; - размер маркеров:
xset("mark size", размер).
Как и для других объектов, свойства осей можно менять через переменную: var = get("current_axes"). Основные свойства:
x_locationиy_location:"top","middle","bottom"— ось сверху, по центру, снизу;isoview:'on'— одинаковый масштаб по осям,"off"— свободный;sub_ticks: матрица[nx, ny], где nx, ny — число подделений (4 подделения — деление на 5).
Пример:
a = get("current_axes")
a.x_location = "middle"
a.y_location = "middle"
a.isoview = "on"
a.sub_ticks = [4,4]
Можно размещать несколько графиков рядом с помощью subplot:
subplot(m, n, i)размещает следующий график в i-й ячейке (по европейскому порядку) таблицы m×n; график может включать несколько командplot,xset,xtitle.
xtitle("название графика", "ось x", "ось y") — заголовок графика и осей. titlepage("заголовок") — заголовок по центру. clf очищает графическое окно.
Ниже приведён график, получаемый следующими командами:
clear; clf;
deff("[z] = f(x, y)", "z = sin(x) * cos(y)")
xset("colormap", jetcolormap(32))
x = %pi * [-1:0.05:1]';
y = x;
z = feval(x, y, f);
subplot(2, 2, 1)
grayplot(x, y, z)
subplot(2, 2, 2)
contour2d(x, y, z, 5)
subplot(2, 2, 3)
plot3d1(x, y, z, 0, 90)
subplot(2, 2, 4)
plot3d1(x, y, z, 70, 70)
Инструкции Scilab можно помещать в текстовый файл с расширением .sce. Такой файл называется скриптом Scilab.
Scilab поддерживает ряд управляющих конструкций:
- условное выполнение:
if условие then, …, else, …, end - цикл:
for переменная = начало : конец, …, endилиfor переменная = начало : шаг : конец, …, end - цикл с предусловием:
while условие do, …, endилиwhile условие do, …, else, …, end
Можно определять функции с параметрами. Функция — подпрограмма с собственными переменными, может содержать циклы, условия и т. д. Например, функция f(x):
function [y] = f(x)
…
endfunction
Параметр x передаётся функции; возвращаемое значение — то, что присвоено y.
В более поздних версиях язык Scilab был расширен новыми возможностями. Например, начиная с версии 2024.0.0, для стандартизированной проверки входных аргументов функций было введено ключевое слово arguments, которое позволяет определять типы, размеры и другие свойства ожидаемых параметров. Также была добавлена функция toJSON для преобразования переменных в формат JSON (версия 2023.0.0), функциональность которой была расширена в версии 2025.1.0 для корректной обработки специальных значений, таких как %inf и %nan.
Если файл содержит только определения функций, ему дают расширение .sci. Это позволяет создавать библиотеки функций для разных скриптов, что облегчает сопровождение (улучшения доступны всем скриптам, ошибки быстрее обнаруживаются и исправляются). Такой файл .sci загружается командой exec("путь/имя_файла").
Можно сохранить окружение (все переменные, включая функции) командой save("файл"). Это создаёт бинарный файл (расширение не добавляется). Окружение можно загрузить функцией load("файл").
Также можно писать инструкции в текстовом файле и копировать их в командную строку Scilab. Исходный код может содержать комментарии, начинающиеся с //.
В Scilab окружение — это все определённые переменные (включая функции); часть переменных предопределена. Все переменные выводятся командой who.
При вызове функции выполнение происходит в новом окружении — копии исходного. Изменённые переменные не влияют на исходное окружение (используются только локальные переменные), возвращается только результат.
Можно явно открыть окружение с помощью pause; приглашение меняется на -1->, что означает первый уровень подокружения. Такая ситуация возникает и при прерывании функции (например, CTRL + C). Для возврата к предыдущему окружению — команда return.
Если return без аргументов, переменные не передаются в родительское окружение. Можно передать переменные a1, a2, ..., an с помощью (x1, x2, …, xn) = return(a1, a2, …, an), где x1, x2, ..., xn — имена переменных в родительском окружении.
Команда clear очищает окружение, удаляя все переменные.
Scilab спроектирован как открытая и расширяемая система, позволяющая взаимодействовать с кодом, написанным на других языках программирования. Это даёт возможность как вызывать внешние подпрограммы из Scilab, так и встраивать его вычислительный движок в сторонние приложения.
Программа предоставляет интерфейсы для интеграции и вызова функций, написанных на C, C++, Fortran и Java. Пользователи могут создавать собственные модули (тулбоксы) на этих языках для расширения базовой функциональности.
Scilab также предоставляет встроенные функции для взаимодействия со скриптовым языком Tcl/Tk. Функция TCL_EvalFile() выполняет скрипты Tcl/Tk, которые, в свою очередь, могут вызывать функции Scilab с передачей параметров через команду ScilabEval, что позволяет, например, создавать для Scilab-вычислений пользовательские графические интерфейсы на основе Tk.
Пример: Вычисление расстояния, где значения x, y или z можно менять с помощью ползунка в графическом интерфейсе на Tcl-Tk.
Создаются три файла (lancement.sce, distance.sci, gui.tcl).
Два файла Scilab:
// lancement.sce - запуск приложения
exec distance.sci;
TCL_EvalFile("gui.tcl");
// distance.sci - функция Scilab
function dist = distance(x, y, z)
dist = sqrt(x*x + y*y + z*z)
endfunction
И код Tcl-Tk:
# gui.tcl - графический интерфейс
global x y z dist
set x 10; set y 10; set z 10; set dist " "
toplevel .w
scale .w.scx -from 0 -to 200 -length 200 -resolution 1 -label "X" \
-orient horiz -bd 1 -showvalue true -variable x \
-command CalculDistance
scale .w.scy -from 0 -to 200 -length 200 -resolution 1 -label "Y" \
-orient horiz -bd 1 -showvalue true -variable y \
-command CalculDistance
scale .w.scz -from 0 -to 200 -length 200 -resolution 1 -label "Z" \
-orient horiz -bd 1 -showvalue true -variable z \
-command CalculDistance
label .w.lt -text Distance
label .w.ldist -textvariable dist -bg lightblue
eval pack [winfo children .w]
proc CalculDistance w {
global x y z dist
ScilabEval "dist = distance($x,$y,$z) ; TK_SetVar('dist',string(dist));"
}
Scilab поддерживает работу с разнообразными форматами файлов для импорта и экспорта данных, хранения скриптов, моделей и графики.
Для написания и сохранения кода Scilab использует текстовые файлы с собственными расширениями:
- .sce — файлы-сценарии (скрипты), содержащие последовательность команд для выполнения.
- .sci — файлы, как правило, содержащие определения функций, которые загружаются в рабочее пространство для последующего использования.
Scilab предоставляет гибкие возможности для импорта и экспорта данных из различных источников:
- CSV (.csv) и текстовые файлы (.txt) — для импорта табличных данных используются функции csvRead() и read_csv(), а также графическая утилита uiimport[36].
- Microsoft Excel (.xls) — импорт данных возможен с помощью функций readxls() и xls_read(). Поддерживается только формат BIFF8 (Excel 97-2003). Для импорта из более новых файлов .xlsx требуется предварительное сохранение в формате .xls[37][38].
- SOD (Scilab Open Data) — собственный бинарный формат Scilab, основанный на HDF5, используемый для эффективного сохранения и загрузки переменных рабочего пространства с помощью команд save() и load()[39].
- Экспорт графиков — созданные диаграммы и графики могут быть экспортированы в различные растровые (JPG, PNG, GIF, BMP) и векторные (PDF, SVG, EPS, PS, EMF (только в Windows)) форматы[40].
- Модели Xcos — блок-схемы, созданные в среде моделирования Xcos, сохраняются в файлах с расширениями .xcos и .zcos[41].


