Журнал LinuxFormat - перейти на главную

LXF106:SciLab

Материал из Linuxformat
(Различия между версиями)
Перейти к: навигация, поиск
(Новая: == SciLab: Основы == : ''Компьютеры, как известно, придумывали для работы с числами, и для решения этой задачи...)
 
Строка 28: Строка 28:
 
приложение.
 
приложение.
  
 +
{{Врезка
 +
|Заголовок=Скорая помощь
 +
|Содержание=Для возврата
 +
на предыдущий
 +
уровень коллекции
 +
демонстрационных
 +
примеров следует
 +
нажать кнопку
 +
Cancel [Отмена]
 +
у нижней кромки
 +
окна.
 +
|Ширина=150px}}
 +
[[Изображение:LXF106 82 1.png|thumb|left|Главное окно SciLab с выполненными вычислениями.]]
 
После запуска вы увидите главное окно, в котором вводятся
 
После запуска вы увидите главное окно, в котором вводятся
 
команды и выводятся результаты вычислений. В его верхней находится текстовое меню. Пункт меню Control содержит команды управления процессом вычислений: Resume [продолжить], Abort [отменить] и Stop [приостановить]. Пункт Help вызывает справку, а Editor
 
команды и выводятся результаты вычислений. В его верхней находится текстовое меню. Пункт меню Control содержит команды управления процессом вычислений: Resume [продолжить], Abort [отменить] и Stop [приостановить]. Пункт Help вызывает справку, а Editor
Строка 42: Строка 55:
 
из буфера при помощи Shift+Ins, но скопировать что-то из окна SciLab
 
из буфера при помощи Shift+Ins, но скопировать что-то из окна SciLab
 
не получится. Впрочем, скоро все изменится (см. Смена версий).
 
не получится. Впрочем, скоро все изменится (см. Смена версий).
 
+
{{Врезка|center|
 +
|Заголовок=Смена версий
 +
|Содержание=В настоящее время официальной является ветка 4.х, но уже
 +
при первом запуске появляется окно с предупреждением, что
 +
она будет последней, использующей старый графический
 +
интерфейс. Впрочем, кардинальной смены GUI в SciLab 5.0 не
 +
произойдет. Все также будет основное окно для ввода команды и текстовое меню, обеспечивающее доступ к инструментам.
 +
Однако, судя по справке, пятая версия будет включать в себя
 +
многие пакеты расширений (Toolbox), которые в настоящий
 +
момент необходимо загружать и устанавливать вручную. На
 +
момент написания этой статьи на официальном сайте была
 +
доступна весьма неустойчивая в работе версия 5.0.beta1, но
 +
стабильный релиз планируется уже в мае.
 +
|Ширина=}}
 +
[[Изображение:LXF106 83 1.png|thumb|left|Окно справочной
 +
системы SciLab.
 +
Кнопка слева вверху
 +
переключает режимы
 +
структуры и поиска.
 +
Кнопки внизу окна
 +
текста справки
 +
позволяют
 +
перемещаться
 +
вперед и назад по
 +
уже открывавшимся
 +
темам.]]
 +
[[Изображение:LXF106 84 1.png|thumb|Окно коллекции
 +
демонстрационных
 +
примеров SciLab.
 +
Обязательно
 +
посетите – здесь
 +
много интересного.]]
 
Продукт поставляется с большим руководством, описывающим все
 
Продукт поставляется с большим руководством, описывающим все
 
имеющиеся функции. Для того, чтобы вызвать окно справки, необходимо выбрать пункт меню Help > Help browser либо выполнить команду help. При этом, если вы ничего не меняли, откроется внутренний
 
имеющиеся функции. Для того, чтобы вызвать окно справки, необходимо выбрать пункт меню Help > Help browser либо выполнить команду help. При этом, если вы ничего не меняли, откроется внутренний
Строка 70: Строка 114:
  
 
=== Простые вычисления ===
 
=== Простые вычисления ===
Теперь, я надеюсь, вы сможете ориентироваться в небогатом интер-
+
Теперь, я надеюсь, вы сможете ориентироваться в небогатом интерфейсе SciLab, и мы можем перейти непосредственно к работе.
фейсе SciLab, и мы можем перейти непосредственно к работе.
+
  
Итак, SciLab – это, преимущественно, система численных вычис-
+
Итак, SciLab – это, преимущественно, система численных вычислений. Средства аналитического счета есть, но, во-первых, их немного, а, во-вторых, их использование неочевидно.
лений. Средства аналитического счета есть, но, во-первых, их немно-
+
го, а, во-вторых, их использование неочевидно.
+
  
Как и в Matlab, команды набираются пользователем и выполня-
+
Как и в Matlab, команды набираются пользователем и выполняются системой последовательно. Ввод происходит в строке после
ются системой последовательно. Ввод происходит в строке после
+
 
системного приглашения, которое имеет вид -->. После набора
 
системного приглашения, которое имеет вид -->. После набора
команды ее уже нельзя исправить, как в текстовом редакторе: необ-
+
команды ее уже нельзя исправить, как в текстовом редакторе: необходимо вернуться к ней при помощи клавиш-стрелок (как в терминале), потом внести изменения и нажать Enter, то есть вновь выполнить
ходимо вернуться к ней при помощи клавиш-стрелок (как в термина-
+
ле), потом внести изменения и нажать Enter, то есть вновь выполнить
+
 
уже исправленную команду. Благодаря сходству с консолью, строку с
 
уже исправленную команду. Благодаря сходству с консолью, строку с
 
приглашением называют «командной строкой SciLab».
 
приглашением называют «командной строкой SciLab».
Строка 93: Строка 131:
  
 
Длинные команды можно разбить на несколько строк, добавляя в
 
Длинные команды можно разбить на несколько строк, добавляя в
конце каждой из них две или более точек подряд (..). Возможен так-
+
конце каждой из них две или более точек подряд (..). Возможен также ввод поясняющего текста (комментария). Любой комментарий в
же ввод поясняющего текста (комментария). Любой комментарий в
+
 
SciLab, как и в языке C/C++, начинается с двойного символа //. Однако,
 
SciLab, как и в языке C/C++, начинается с двойного символа //. Однако,
 
следует отметить, что версия 4.1.2 не поддерживает кириллицу.
 
следует отметить, что версия 4.1.2 не поддерживает кириллицу.
  
Самым простым случаем является использование SciLab в каче-
+
Самым простым случаем является использование SciLab в качестве калькулятора. Вы вводите какое-то математическое выражение с конкретными числами, нажимаете Enter и получаете результат.
стве калькулятора. Вы вводите какое-то математическое выраже-
+
ние с конкретными числами, нажимаете Enter и получаете результат.
+
 
Например:
 
Например:
 
<source lang="matlab">--> 2.3*14 – sin(2.1) + tanh(0.2)
 
<source lang="matlab">--> 2.3*14 – sin(2.1) + tanh(0.2)
Строка 121: Строка 156:
 
ans =
 
ans =
 
31.5341659536</source>
 
31.5341659536</source>
Конечно, использование такой мощной системы в качестве про-
+
Конечно, использование такой мощной системы в качестве простого калькулятора бессмысленно. А при организации сложных
стого калькулятора бессмысленно. А при организации сложных
+
вычислений мы неизбежно приходим к переменным, то есть специальным именованным ячейками памяти для хранения исходных и
вычислений мы неизбежно приходим к переменным, то есть специ-
+
альным именованным ячейками памяти для хранения исходных и
+
 
промежуточных данных, а также результата. Например, пусть нам
 
промежуточных данных, а также результата. Например, пусть нам
 
необходимо найти длину и площадь окружности, а также объем и
 
необходимо найти длину и площадь окружности, а также объем и
Строка 142: Строка 175:
 
V =
 
V =
 
33.510322</source>
 
33.510322</source>
Вы могли заметить, что в качестве числа π используется конструк-
+
Вы могли заметить, что в качестве числа π используется конструкция, начинающаяся с символа процента. Так записываются системные переменные. Рассмотрим наиболее важные из них:
ция, начинающаяся с символа процента. Так записываются систем-
+
ные переменные. Рассмотрим наиболее важные из них:
+
 
: %i – мнимая единица ( q1);
 
: %i – мнимая единица ( q1);
 
: %e – число e=2.7182818;
 
: %e – число e=2.7182818;
Строка 157: Строка 188:
  
 
Во время работы
 
Во время работы
часто бывает необхо-
+
часто бывает необходимо сохранить выполненные действия и
димо сохранить выпол-
+
ненные действия и
+
 
результаты в файл для
 
результаты в файл для
дальнейшего исполь-
+
дальнейшего использования. Это особенно актуально в связи с
зования. Это особен-
+
но актуально в связи с
+
 
тем, что, как мы знаем,
 
тем, что, как мы знаем,
SciLab 4.x не поддер-
+
SciLab 4.x не поддерживает буфер обмена и
живает буфер обмена и
+
 
прокрутку. Для записи
 
прокрутку. Для записи
рабочей сессии суще-
+
рабочей сессии существует команда diary.
ствует команда diary.
+
 
Она принимает путь
 
Она принимает путь
 
к файлу, например,
 
к файлу, например,
diary('/home/username/
+
diary('/home/username/session1.txt'). В конце,
session1.txt'). В конце,
+
следует подать команду diary(0), которая
следует подать коман-
+
ду diary(0), которая
+
 
останавливает запись.
 
останавливает запись.
 
Тогда все команды и результаты будут сохранены в /home/username/session1.txt в обычном текстовом формате.
 
Тогда все команды и результаты будут сохранены в /home/username/session1.txt в обычном текстовом формате.
Строка 186: Строка 209:
 
создать свою собственную функцию или файл-демонстрацию, но об
 
создать свою собственную функцию или файл-демонстрацию, но об
 
этом поговорим в другой раз.
 
этом поговорим в другой раз.
 +
 +
{{Врезка|center|
 +
|Заголовок=Немного истории
 +
|Содержание=Начало разработке предка SciLab положил сотрудник INRIA
 +
Франсуа Делебескью [Francois Delebecque]. Проект назывался Blaise (позднее Basile) и распространялся на коммерческой
 +
основе. Он содержал не только среду интерпретации команд и
 +
базовые операции с матрицами, но также пакеты имитационного моделирования и оптимизации. Basile успешно продавался
 +
во Франции до конца 80-х. В 1990 группа Meta2 в INRIA инициировала создание свободной версии Basile – так родился SciLab.
 +
В ходе развития свободной версии были переработаны многие
 +
компоненты, дабы избавиться от проблем с лицензиями, а сама
 +
команда разработчиков была преобразована в SciLab team,
 +
которая и выпустила первую версию SciLab в 1994 году. SciLab
 +
team отвечала за разработку и информационное обеспечение
 +
SciLab до 2003 года. Были выпущены две книги (на английском и французском языках), организована группа новостей.
 +
В течение этого периода система была портирована в Windows
 +
(1999, J. Ph. Chancelier), были разработаны TCL/TK интерфейс
 +
(Bertrand Guiheneuf) и многие пакеты расширений, интегрирован редактор файлов-функций.
 +
 +
В 2003 году «шефство» над SciLab приняла команда разработки SciLab [Scilab development team] под покровительством
 +
консорциума SciLab [Scilab Consortium]. С тех пор усилия были
 +
направлены на разработку новых пакетов расширений, нового графического интерфейса, Java-интерфейса приложений и
 +
ядра обработки графики. На официальном сайте вы можете
 +
найти план развития SciLab до 2010 года, то есть до версии
 +
6.1.
 +
 +
Если у вас появилось желание поучаствовать в этом процессе, то посмотрите на странице http://wiki.scilab.org/How_to_contribute_to_Scilab, чем вы можете быть полезны проекту.
 +
|Ширина=}}
  
 
=== Векторы и матрицы ===
 
=== Векторы и матрицы ===
 
В Linux существует много продвинутых научных калькуляторов. Так
 
В Linux существует много продвинутых научных калькуляторов. Так
 
чем же SciLab лучше? А тем, что он прекрасно работает с матрицами,
 
чем же SciLab лучше? А тем, что он прекрасно работает с матрицами,
векторами и вообще массивами чисел. Для того, чтобы создать стро-
+
векторами и вообще массивами чисел. Для того, чтобы создать строку (математически – вектор-строку) чисел, вам достаточно ввести их,
ку (математически – вектор-строку) чисел, вам достаточно ввести их,
+
 
разделяя пробелом или запятой и заключив в квадратные скобки, а
 
разделяя пробелом или запятой и заключив в квадратные скобки, а
 
чтобы ввести столбец (вектор-столбец), необходимо разделять числа
 
чтобы ввести столбец (вектор-столбец), необходимо разделять числа
Строка 212: Строка 261:
 
7. 8. 9.</source>
 
7. 8. 9.</source>
 
К любому элементу вектора или матрицы можно обратиться
 
К любому элементу вектора или матрицы можно обратиться
посредством индекса, заключенного в круглые скобки; если это эле-
+
посредством индекса, заключенного в круглые скобки; если это элемент матрицы, то индексы разделяются запятой. Например, изменим
мент матрицы, то индексы разделяются запятой. Например, изменим
+
 
главную диагональ введенной матрицы:
 
главную диагональ введенной матрицы:
 
<source lang="matlab">-->matr(1,1) = 0;matr(2,2)=0;matr(3,3)=0;
 
<source lang="matlab">-->matr(1,1) = 0;matr(2,2)=0;matr(3,3)=0;
Строка 223: Строка 271:
 
Вы можете обратиться не только к элементу, но и к строке или
 
Вы можете обратиться не только к элементу, но и к строке или
 
столбцу, при этом вы должны указать его номер, а на месте второго
 
столбцу, при этом вы должны указать его номер, а на месте второго
индекса поставить : (двоеточие). Давайте поменяем местами пер-
+
индекса поставить : (двоеточие). Давайте поменяем местами первую строку с третьим столбцом. При этом нам придется столкнуться
вую строку с третьим столбцом. При этом нам придется столкнуться
+
 
еще с одной операцией – транспонированием. Для ее выполнения
 
еще с одной операцией – транспонированием. Для ее выполнения
необходимо ввести символ одинарной кавычки рядом с переменной-
+
необходимо ввести символ одинарной кавычки рядом с переменной-матрицей:
матрицей:
+
 
<source lang="matlab">-->tr=matr(1,:); tc=matr(:,3); // выделяем 1-ю строку и 3-й столбец
 
<source lang="matlab">-->tr=matr(1,:); tc=matr(:,3); // выделяем 1-ю строку и 3-й столбец
 
-->matr(1,:)=tc'; matr(:,3)=tr'; // транспонируем и записываем в
 
-->matr(1,:)=tc'; matr(:,3)=tr'; // транспонируем и записываем в
Строка 237: Строка 283:
 
4. 0. 2.
 
4. 0. 2.
 
7. 8. 3.</source>
 
7. 8. 3.</source>
Следует помнить и еще об одном правиле: при работе с век-
+
Следует помнить и еще об одном правиле: при работе с векторами и матрицами действуют матричные правила выполнения арифметических действий. Например, умножение векторов
торами и матрицами действуют матричные правила выполне-
+
ния арифметических действий. Например, умножение векторов
+
 
Vec_x и Vec_y дает разные результаты в зависимости от порядка
 
Vec_x и Vec_y дает разные результаты в зависимости от порядка
 
множителей:
 
множителей:
Строка 252: Строка 296:
 
4. 8. 12. 16.</source>
 
4. 8. 12. 16.</source>
 
как и должно быть по правилам матричной алгебры. Для того, чтобы
 
как и должно быть по правилам матричной алгебры. Для того, чтобы
выполнить поэлементное арифметическое действие (то есть пере-
+
выполнить поэлементное арифметическое действие (то есть перемножение не самих векторов, а только их соответствующих элементов: первый на первый, второй на второй и т. д.) используется символ
множение не самих векторов, а только их соответствующих элемен-
+
операции с точкой в начале, при этом перемножаемые векторы должны иметь одинаковую размерность:
тов: первый на первый, второй на второй и т. д.) используется символ
+
операции с точкой в начале, при этом перемножаемые векторы долж-
+
ны иметь одинаковую размерность:
+
 
<source lang="matlab">-->Vec_x .* Vec_y
 
<source lang="matlab">-->Vec_x .* Vec_y
 
!--error 9999
 
!--error 9999
Строка 289: Строка 330:
  
 
=== Построение графиков ===
 
=== Построение графиков ===
Вектора и матрицы можно не только вводить вручную, но и фор-
+
Вектора и матрицы можно не только вводить вручную, но и формировать автоматически, используя конструкцию <начальное
мировать автоматически, используя конструкцию <начальное
+
значение>:<шаг>:<конечное значение>. Например, сформируем вектор из чисел от 1 до 3 с шагом 0.2:
значение>:<шаг>:<конечное значение>. Например, сформируем век-
+
тор из чисел от 1 до 3 с шагом 0.2:
+
 
<source lang="matlab">-->vec=1:0.2:3
 
<source lang="matlab">-->vec=1:0.2:3
 
vec =
 
vec =
Строка 303: Строка 342:
 
Сформированный вектор может использоваться как обычная
 
Сформированный вектор может использоваться как обычная
 
переменная, то есть участвовать в математических операциях и быть
 
переменная, то есть участвовать в математических операциях и быть
аргументом функций. В последнем случае получится вектор, каж-
+
аргументом функций. В последнем случае получится вектор, каждый элемент которого есть результат действия функции на элемент
дый элемент которого есть результат действия функции на элемент
+
 
исходного вектора.
 
исходного вектора.
 
<source lang="matlab">-->Y=sin(vec2)
 
<source lang="matlab">-->Y=sin(vec2)
 
Y =
 
Y =
 
0.8414710 0.9092974 0.1411200</source>
 
0.8414710 0.9092974 0.1411200</source>
Таким образом можно довольно просто создавать таблицы функ-
+
Таким образом можно довольно просто создавать таблицы функций, а от них два шага и до графика: достаточно просто сгенерировать вектор значений переменной и подать команду plot2d с указанием функции или перечня функций, заключенных в квадратные скобки и разделенных пробелом. При построении важно помнить, что на
ций, а от них два шага и до графика: достаточно просто сгенериро-
+
вать вектор значений переменной и подать команду plot2d с указани-
+
ем функции или перечня функций, заключенных в квадратные скоб-
+
ки и разделенных пробелом. При построении важно помнить, что на
+
 
вход команды plot2d необходимо подавать вектор-столбцы значений
 
вход команды plot2d необходимо подавать вектор-столбцы значений
функций, поэтому автоматически созданный вектор обычно необхо-
+
функций, поэтому автоматически созданный вектор обычно необходимо транспонировать.
димо транспонировать.
+
 
<source lang="matlab">-->x=[0:0.1:2*%pi]'; //создаем вектор и транспонируем его
 
<source lang="matlab">-->x=[0:0.1:2*%pi]'; //создаем вектор и транспонируем его
 
-->plot2d(x, [sin(x) cos(x) sin(x).*cos(x)]) //строим графики</source>
 
-->plot2d(x, [sin(x) cos(x) sin(x).*cos(x)]) //строим графики</source>
Если не указывать первый параметр (переменная х), то на графи-
+
Если не указывать первый параметр (переменная х), то на графике по оси х будут отображаться просто порядковые номера значений
ке по оси х будут отображаться просто порядковые номера значений
+
 
в массиве. Обратите внимание, что для получения третьей функции
 
в массиве. Обратите внимание, что для получения третьей функции
 
мы использовали поэлементное умножение.
 
мы использовали поэлементное умножение.
  
 +
[[Изображение:LXF106 85 1.png|thumb|Результат выполнения команды plot3d.]]
 
Теперь давайте построим трехмерную поверхность. Для начала
 
Теперь давайте построим трехмерную поверхность. Для начала
создадим два вектора с координатами x и y, затем – матрицу зна-
+
создадим два вектора с координатами x и y, затем – матрицу значений функции, причем здесь очень важен порядок множителей
чений функции, причем здесь очень важен порядок множителей
+
 
(вспомните комментарий выше): первым должен быть столбец (то
 
(вспомните комментарий выше): первым должен быть столбец (то
 
есть любая из переменных), а вторым – строка (транспонированная
 
есть любая из переменных), а вторым – строка (транспонированная
Строка 343: Строка 375:
 
и, конечно же, покопайтесь во встроенной справке. До новых
 
и, конечно же, покопайтесь во встроенной справке. До новых
 
встреч!
 
встреч!
 +
{{Врезка|center|
 +
|Заголовок=Источники информации
 +
|Содержание=http://www.scilab.land.ru – прекрасное руководство на русском языке для желающих ознакомиться с основами SciLab. Руководство сделано для Windows-версии 4.0 и является самым свежим в рунете.
 +
 +
http://scilab.psati.ru/rukovodstvo/index.html – еще одно руководство на русском языке, оформленное в виде вопросов и ответов, но создавалось оно перед самым выходом версии 3.0, так что кое-что уже устарело. Описывается Windows-версия.
 +
 +
http://www.wolffdata.se/index.html – множество учебных примеров, демонстрирующих применение SciLab для решения задач
 +
физики, обработки сигналов и др.
 +
 +
http://wiki.scilab.org – официальный Wiki.
 +
|Ширина=}}

Версия 17:00, 2 мая 2009

Содержание

SciLab: Основы

Компьютеры, как известно, придумывали для работы с числами, и для решения этой задачи были созданы самые различные программы. Александр Бикмеев покажет вам одну из них – свободный аналог Matlab.

В научной и инженерной среде хорошо известны так называемые CAS – Computer Algebra System; в русскоязычной литературе их часто называют СКМ – системами компьютерной математики. Одним из ярких представителей данного класса продуктов является Matlab, который с успехом применяется во многих областях науки и техники, более того, существует в виде Linux-версии. Но даже на Западе Matlab по карману не каждому вузу. И вот тут-то на сцене появляется супермен из мира свободного ПО – SciLab (http://www.scilab.org).

SciLab – это система компьютерной математики с открытым кодом. На момент написания статьи стабильной была версия 4.1.2. В установочный комплект включена подробнейшая справка, доступная на английском и французском языках: желающие могут загрузить ее с официального сайта в PDF-формате.

Задачей данной серии статей является обратить ваше внимание на данный продукт, показать некоторые его возможности и, если получится, избавить вас от Matlab-зависимости. Очень бы хотелось, чтобы статьи попали в руки тех преподавателей вузов, которые все еще ведут занятия на пиратском Matlab – быть может, SciLab станет для них более законным решением.

Подготовка к работе и запуск

Установить SciLab можно из RPM/Deb-пакета (http://rpmfind.net поможет в поиске первых), архива с исходными текстами или в виде бинарной сборки. Процедура во всех случаях будет стандартной. Для старта системы необходимо набрать в консоли команду scilab или, что значительно удобнее, создать на рабочем столе или в меню ссылку на приложение.


(thumbnail)
Главное окно SciLab с выполненными вычислениями.

После запуска вы увидите главное окно, в котором вводятся команды и выводятся результаты вычислений. В его верхней находится текстовое меню. Пункт меню Control содержит команды управления процессом вычислений: Resume [продолжить], Abort [отменить] и Stop [приостановить]. Пункт Help вызывает справку, а Editor открывает окно редактора файлов-сценариев. Пункт меню Graphic Windows # позволяет открывать и создавать графически окна, а также переключаться между ними. Самым интересным пунктом является Demos, выбор которого приводит к появлению окна со списком коллекции демонстрационных примеров. Погуляйте по ней – здесь есть очень много красивых проектов, особенно в разделе Simulation (рекомендую Demos > Simulation > Bike Simulation). Для знающих английский язык будет очень полезен первый пункт коллекции – Introduction to SCILAB, представляющий собой небольшой учебник.

Система SciLab является кросс-платформенной, но интерфейс ветки 4.х зависит от типа ОС. Так, в Windows он более приятный, имеет панель инструментов, а также поддерживает двунаправленную работу с буфером обмена. Linux-версия SciLab лишена этих возможностей. Как и при работе с графической консолью, вы можете вставить текст из буфера при помощи Shift+Ins, но скопировать что-то из окна SciLab не получится. Впрочем, скоро все изменится (см. Смена версий).

(thumbnail)
Окно справочной системы SciLab. Кнопка слева вверху переключает режимы структуры и поиска. Кнопки внизу окна текста справки позволяют перемещаться вперед и назад по уже открывавшимся темам.
(thumbnail)
Окно коллекции демонстрационных примеров SciLab. Обязательно посетите – здесь много интересного.

Продукт поставляется с большим руководством, описывающим все имеющиеся функции. Для того, чтобы вызвать окно справки, необходимо выбрать пункт меню Help > Help browser либо выполнить команду help. При этом, если вы ничего не меняли, откроется внутренний обозреватель справки. Однако, поскольку документация представляет собой набор html-файлов, вы можете изменить настройки и читать ее в любом удобном вам web-браузере. Для выбора приложения просмотра справки следует воспользоваться пунктами меню Help > Configure. Обычно вам предлагаются Firefox, Nautilus, Netscape, Opera и два варианта SciLab Browser – старый (old) и обычный. Наиболее удобен, на мой взгляд, обычный SciLab Browser, потому что только он предоставляет возможность поиска по всем файлам справки.

Вы можете также искать по части слова в описании или названии функции. Для этого следует выбрать пункт Help > Apropos, ввести в появившемся диалоге искомую подстроку и нажать кнопку OK. Откроется окно выбранного вами обозревателя справки с перечнем пунктов, удовлетворяющих условию поиска. Например, если вам необходимо узнать, как считаются интегралы, то для поиска можно ввести слово integral. После нажатия кнопки OK, мы увидим около десяти пунктов справки, содержащих данное слово.

Стандартное справочное описание содержит четыре раздела:

  • Calling Sequence [описание вызова] – шаблон вызова данной функции или процедуры
  • Parameters [Параметры] – описание всех возможных параметров текущей функции или процедуры
  • Description [Описание] – описание смысла самой функции или процедуры с примером использования.
  • See Also [Смотри также] – перечень схожих функций или процедур. Каждый предлагаемый вариант представляет собой гиперссылку, позволяющую перейти к его описанию.

Дополнительные пакеты расширений могут иметь свои собственные разделы, так что их полное перечисление здесь не имеет смысла. И пусть справка практически абсолютно не пригодна для изучения пакета – это именно справка – но постоянно обращение к ней поможет быстрее освоить систему.

Простые вычисления

Теперь, я надеюсь, вы сможете ориентироваться в небогатом интерфейсе SciLab, и мы можем перейти непосредственно к работе.

Итак, SciLab – это, преимущественно, система численных вычислений. Средства аналитического счета есть, но, во-первых, их немного, а, во-вторых, их использование неочевидно.

Как и в Matlab, команды набираются пользователем и выполняются системой последовательно. Ввод происходит в строке после системного приглашения, которое имеет вид -->. После набора команды ее уже нельзя исправить, как в текстовом редакторе: необходимо вернуться к ней при помощи клавиш-стрелок (как в терминале), потом внести изменения и нажать Enter, то есть вновь выполнить уже исправленную команду. Благодаря сходству с консолью, строку с приглашением называют «командной строкой SciLab».

После каждой команды в рабочем окне появляется результат. Если это не требуется (например, вы просто определяете значение переменной или функцию), то в конце команды следует поставить символ ; (точка с запятой). Если переменная-приемник не указана, то результат заносится в ans.

Длинные команды можно разбить на несколько строк, добавляя в конце каждой из них две или более точек подряд (..). Возможен также ввод поясняющего текста (комментария). Любой комментарий в SciLab, как и в языке C/C++, начинается с двойного символа //. Однако, следует отметить, что версия 4.1.2 не поддерживает кириллицу.

Самым простым случаем является использование SciLab в качестве калькулятора. Вы вводите какое-то математическое выражение с конкретными числами, нажимаете Enter и получаете результат. Например:

--> 2.3*14 – sin(2.1) + tanh(0.2)
ans =
31.534166

Математические выражения строятся при помощи стандартных арифметических операций: «+» – сложение, «-» – вычитание, «*» – умножить, «/» – разделить, «^» – возведение в степень. Кроме того, вы можете использовать элементарные математические функции, только следует помнить, что SciLab разрабатывался за рубежом и использует западную нотацию, то есть, tan вместо tg, log вместо ln и так далее.

По умолчанию результат имеет семь цифр после запятой, но вы можете изменить это при помощи функции форматирования printf, синтаксис которой полностью схож с языком С. Например, для того, чтобы вывести результат предыдущего выражения с 10 знаками после запятой, введите:

--> printf("%1.10f",2.3*14 – sin(2.1) + tanh(0.2))
ans =
31.5341659536

Конечно, использование такой мощной системы в качестве простого калькулятора бессмысленно. А при организации сложных вычислений мы неизбежно приходим к переменным, то есть специальным именованным ячейками памяти для хранения исходных и промежуточных данных, а также результата. Например, пусть нам необходимо найти длину и площадь окружности, а также объем и площадь поверхности шара по известному радиусу. В этом случае мы можем ввести переменную R для хранения значения радиуса:

-->R=2; // Значение радиуса
-->l = 2*%pi*R
l =
12.566371
-->s = %pi*R^2
s =
12.566371
-->S3D = 4*%pi*R^2
S3D =
50.265482
-->V = 4/3*%pi*R^3
V =
33.510322

Вы могли заметить, что в качестве числа π используется конструкция, начинающаяся с символа процента. Так записываются системные переменные. Рассмотрим наиболее важные из них:

 %i – мнимая единица ( q1);
 %e – число e=2.7182818;
 %inf – машинный символ бесконечности (∞);
 %NaN – неопределенный результат (0/0, ∞/∞, 1∞ и т. п.);
 %eps – условный ноль %eps=2.220Е-16.

Переменные пользователя сохраняют свое значение до конца сеанса, либо до тех пор, пока не будут уничтожены командой clear. Просмотреть список всех активных переменных можно при помощи команды who. Команда whos() выводит более подробный перечень с указанием типа переменных (детали см. в справке).

Во время работы часто бывает необходимо сохранить выполненные действия и результаты в файл для дальнейшего использования. Это особенно актуально в связи с тем, что, как мы знаем, SciLab 4.x не поддерживает буфер обмена и прокрутку. Для записи рабочей сессии существует команда diary. Она принимает путь к файлу, например, diary('/home/username/session1.txt'). В конце, следует подать команду diary(0), которая останавливает запись. Тогда все команды и результаты будут сохранены в /home/username/session1.txt в обычном текстовом формате.

Кроме того, SciLab ведет историю введенных команд (но не результатов). Ее тоже можно записать в файл командой savehistory('путь и имя файла'). Записанная история загружается командой loadhistory('путь и имя файла'), стереть ее можно командой resethistory, ну а вывести на экран – командой gethistory. Запись истории команд в файл полезна в том случае, когда вы пытаетесь создать свою собственную функцию или файл-демонстрацию, но об этом поговорим в другой раз.


Векторы и матрицы

В Linux существует много продвинутых научных калькуляторов. Так чем же SciLab лучше? А тем, что он прекрасно работает с матрицами, векторами и вообще массивами чисел. Для того, чтобы создать строку (математически – вектор-строку) чисел, вам достаточно ввести их, разделяя пробелом или запятой и заключив в квадратные скобки, а чтобы ввести столбец (вектор-столбец), необходимо разделять числа символом точка с запятой (;):

-->Vec_x=[1 2 3 4]
Vec_x =
1. 2. 3. 4.
-->Vec_y=[1;2;3;4]
Vec_y =
1.
2.
3.
4.

Ввод матрицы происходит по строкам (они разделяются точкой с запятой), между элементами строк ставятся запятые или пробелы.

-->matr=[1 2 3; 4 5 6; 7 8 9]
matr =
1. 2. 3.
4. 5. 6.
7. 8. 9.

К любому элементу вектора или матрицы можно обратиться посредством индекса, заключенного в круглые скобки; если это элемент матрицы, то индексы разделяются запятой. Например, изменим главную диагональ введенной матрицы:

-->matr(1,1) = 0;matr(2,2)=0;matr(3,3)=0;
-->matr
matr =
0. 2. 3.
4. 0. 6.
7. 8. 0.

Вы можете обратиться не только к элементу, но и к строке или столбцу, при этом вы должны указать его номер, а на месте второго индекса поставить : (двоеточие). Давайте поменяем местами первую строку с третьим столбцом. При этом нам придется столкнуться еще с одной операцией – транспонированием. Для ее выполнения необходимо ввести символ одинарной кавычки рядом с переменной-матрицей:

-->tr=matr(1,:); tc=matr(:,3); // выделяем 1-ю строку и 3-й столбец
-->matr(1,:)=tc'; matr(:,3)=tr'; // транспонируем и записываем в
// 1-ю строку элементы 3-го столбца
// в 3-й столбец элементы 1-ой строки
-->matr
matr =
3. 6. 0.
4. 0. 2.
7. 8. 3.

Следует помнить и еще об одном правиле: при работе с векторами и матрицами действуют матричные правила выполнения арифметических действий. Например, умножение векторов Vec_x и Vec_y дает разные результаты в зависимости от порядка множителей:

-->Vec_x*Vec_y
ans =
30.
-->Vec_y*Vec_x
ans =
1. 2. 3. 4.
2. 4. 6. 8.
3. 6. 9. 12.
4. 8. 12. 16.

как и должно быть по правилам матричной алгебры. Для того, чтобы выполнить поэлементное арифметическое действие (то есть перемножение не самих векторов, а только их соответствующих элементов: первый на первый, второй на второй и т. д.) используется символ операции с точкой в начале, при этом перемножаемые векторы должны иметь одинаковую размерность:

-->Vec_x .* Vec_y
!--error 9999
inconsistent element-wise operation
-->Vec_x .* Vec_y'
ans =
1. 4. 9. 16.

В первом случае мы пытались выполнить поэлементное умножение строки на столбец и потому была выдана ошибка: размерность Vec_x – 1x4, а Vec_y – 4х1. Во втором случае мы транспонировали столбец и оба множителя стали одинаковой размерности – 1х4.

Выполним одно из простых действий – решим систему линейных уравнений методом обратной матрицы. Пусть дана система:

<math> \left\{\begin{array}{lcc} x-2y+z=2 \\ 2x+y-3z=-1 \\ x+3y+z=1 \\ \end{array}\right. </math>

тогда для ее решения нам потребуется подать следующие команды (для сокращения выводится только результат):

-->A=[1 -2 1; 2 1 -3; 1 3 1];
-->b = [2; -1; 1];
-->x = inv(A)*b
x =
0.8
- 0.2
0.8

Построение графиков

Вектора и матрицы можно не только вводить вручную, но и формировать автоматически, используя конструкцию <начальное значение>:<шаг>:<конечное значение>. Например, сформируем вектор из чисел от 1 до 3 с шагом 0.2:

-->vec=1:0.2:3
vec =
1. 1.2 1.4 1.6 1.8 2. 2.2 2.4 2.6 2.8 3.

Если шаг не указывается, то он принимается равным единице, скажем:

-->vec2=1:3
vec2 =
1. 2. 3.

Сформированный вектор может использоваться как обычная переменная, то есть участвовать в математических операциях и быть аргументом функций. В последнем случае получится вектор, каждый элемент которого есть результат действия функции на элемент исходного вектора.

-->Y=sin(vec2)
Y =
0.8414710 0.9092974 0.1411200

Таким образом можно довольно просто создавать таблицы функций, а от них два шага и до графика: достаточно просто сгенерировать вектор значений переменной и подать команду plot2d с указанием функции или перечня функций, заключенных в квадратные скобки и разделенных пробелом. При построении важно помнить, что на вход команды plot2d необходимо подавать вектор-столбцы значений функций, поэтому автоматически созданный вектор обычно необходимо транспонировать.

-->x=[0:0.1:2*%pi]'; //создаем вектор и транспонируем его
-->plot2d(x, [sin(x) cos(x) sin(x).*cos(x)]) //строим графики

Если не указывать первый параметр (переменная х), то на графике по оси х будут отображаться просто порядковые номера значений в массиве. Обратите внимание, что для получения третьей функции мы использовали поэлементное умножение.

(thumbnail)
Результат выполнения команды plot3d.

Теперь давайте построим трехмерную поверхность. Для начала создадим два вектора с координатами x и y, затем – матрицу значений функции, причем здесь очень важен порядок множителей (вспомните комментарий выше): первым должен быть столбец (то есть любая из переменных), а вторым – строка (транспонированная переменная). После того, как мы получили все, что нужно, подаем команду plot3d:

-->x=[0:0.1:2*%pi]';
-->y=x;
-->z=sin(4*x)*cos(y'/2);
-->plot3d(x,y,z)

Результат вы можете посмотреть на рисунке.

Хочется заметить, что многие из описываемых команд имеют дополнительные параметры, но мы не можем описать здесь их синтаксис полностью. Так что, если вам нужна дополнительная информация, то пройдитесь по приведенным во врезке ссылкам и, конечно же, покопайтесь во встроенной справке. До новых встреч!

Персональные инструменты
купить
подписаться
Яндекс.Метрика