Scilab - один из самых интересных свободных математических программ.
Scilab - система компьютерной
математики, которая предназначена для выполнения инженерных и научных
вычислений. По возможностям пакет Scilab практически не уступает
Mathcad, а по
интерфейсу близок к Matlab. В Scilab
реализованы численные методы решения
следующих задач вычислительной
математики, среди которых можно выделить
следующие:
задачи линейной алгебры,
нелинейные уравнения и систем,
задачи оптимизации, при решении которых следует обратить внимание на несколько нестандартный синтаксис,
дифференцирование и интегрирование,
обработка экспериментальных данных (интерполяция и метод наименьших квадратов),
обыкновенные дифференциальные уравнения и системы.
В Scilab есть встроенные
функции для численного решения большинства
стандартных математических задач. Для
решения нестандартных задач в Scilab
есть довольно мощный объектно-ориентированный
язык программирования (sci-язык), с помощью
которого пользователь может создавать
свои визуальные приложения (с использованием
встроенных функций), которые могут
выполняться, как отдельные программы
в среде Scilab.
Графические возможности Scilab не уступают проприетарным
математическим пакетам. Следует обратить внимание на то, что в состав
Scilab входит Xcos - система компьютерного
моделирования, аналогичная Simulink.
Cвободно распространяемый пакет Scilab должен занять достойное место на
компьютере специалиста, чья деятельность связана с решением задач
вычислительной математики.
Мое знакомство с пакетом началось 5 лет назад c ресурса http://scilab.psati.ru/rukovodstvo/index.html, за эти годы был разработан курс лекций (совместно с Чесноковой О.В.) по пакетуScilab 4.
Затем в содружестве с компанией ALT Linux была написана и издана книга.
Это первая, и на сегодняшний день единственная книга по пакету, изданная на
русском языке.
Е. Р. Алексеев, Е. А. Чеснокова, Е. А. Рудченко. Scilab: Решение
инженерных и математических задач. Полный текст книги по Scilab находится
на этой странице сайта Alt Linux, прямая ссылка для скачивания книги.
На сегодняшний вышел Scilab 5.2, в нем появилось много изменений, в частности значительно изменилась система моделирования, которая теперь называется Xcos. Список изменений в версии 5.0 по сравнению с 4.1 можно увидеть здесь(на английском языке)
Изменения в версии 5.2 представлены на официальном сайте программы в виде
pdf файла.
Очень надеюсь, что в ближайшее время я напишу обзор нововведений Scilab 5.0-5.2. Есть мечта и о втором издании книги, дополнив его новыми возможностями и системой моделирования Xcos. Но, наверное, только мечта. Хотя, если Alt Linux или кто другой возьмётся за издание, то почему нет. Написать не проблема.
Алексеев Евгений Ростиславович. Родился 13 сентября 1964 года в Советском
Союзе (г. Кранослободск Волгоградской области). Работаю в Донецком национальном
техническом университете доцентом кафедры "Вычислительная математика и
программирование" (ВМиП). В 1986 г. окончил с отличием Донецкий политехнический
институт по специальности 0647 "Прикладная математика". В 1986 -1991 гг.
работал инженером в СКТБ СУ Института прикладной математики АН УССР. С 1992 г.
работает на кафедре ВМиП в должности ассистента, старшего преподавателя,
доцента. В 2003 г. успешно защитил кандидатскую диссертацию в Донецком
национальном техническом университете. Автор более пятидесяти научных и
методических работ, десяти книг. Есть страничка на википедии.
Область научных интересов - свободно распространяемое программное
обеспечение, методы вычислительной математики, использование математических
пакетов для решения инженерных и научно-технических задач.
Контакты: e-mail: ERAlekseev на mail точка ru
Персональная страница на сайте www.vkontakte.ru - http://vkontakte.ru/id7785282,
клуб фанатов - http://vkontakte.ru/club7765665.
Начало работы в SciLab
Главное окно программы имеет вид:
Основной режим работы в Scilab — выполнение команд в консоли. Кроме этого в Scilab интегрирован текстовый редактор Scinotes,
с помощью которого удобно создавать скрипты. Для анализа и редактирования переменных, используемых в текущей сессии,
можно использовать встроенный редактор переменных. Пользователь может просматривать историю команд, присутствует встроенная справочная система.
С помощью механизма ATOMS пользователь может скачивать и устанавливать дополнительные модули.
Рассмотрим выполнение простейших операций в консоли Scilab.
Работа в Scilab производится с помощью команд, набираемых после приглашения
-->
Выполнение команды осуществляется с помощью нажатия клавиши Enter.
Например, для вычисления 2+2 необходимо набрать 2+2 и нажать Enter.
-->2+2
ans =
4.
-->
Переменная ans (от англ. answer — ответ) содержит результат операции.
Если в конце команды стоит символ ";", то результат операции вычисляется, но не выводится на экран. Это удобно при вводе нескольких команд.
-->2+2;
-->ans=ans+3
ans =
7.
-->
Длинные команды можно разделить на несколько строк. Для этого в конце строки нужно поставить две или более точки.
-->2+2..
-->+3+3...
-->+10
ans =
20.
-->
Для создания комментариев можно использовать команду //.
Все, что написано справа от символов // рассматривается как текст.
-->2*2 //дважды два = четыре
ans =
4.
-->
Редактирование команд осуществляется с помощью клавиш управления курсором <-;, ->,
клавиш Delete (удаление символа, стоящего после курсора),
<-Backspace (удаление символа, стоящего перед курсором),
Home (переход в начало строки) и End (переход в конец строки).
Клавиши управления курсором «вверх» и «вниз» позволяют пролистывать выполненные команды, а клавиши PageUp и PageDown — пролистывать рабочую область.
При вводе действительного числа в качестве разделителя целой и дробной части десятичного числа используется точка (например 55.777).
Для записи скобок используются круглые скобки ( ).
При вводе выражений можно использовать операторы:
+ — сложение;
— — вычитание;
* — умножение;
^ — возведение в степень;
/ — деление слева направо;
\ — деление справа налево.
Также можно использовать встроенные переменные %pi (число π) и %e (число e).
В пакете существует большое количество встроенных функций, которые можно использовать при записи выражений.
Приведем некоторые из них:
sqrt(x) — квадратный корень из числа x;
abs(x) — модуль числа x;
sin(x) — синус числа x;
cos(x) — косинус числа x;
tan(x) — тангенс числа x;
cotg(x) — котангенс числа x;
asin(x) — арксинус числа x;
acos(x) — арккосинус числа x;
atan(x) — арктангенс числа x;
exp(x) — экспонента числа x;
log(x) — натуральный логарифм числа x;
log10(x) — десятичный логарифм числа x.
Подробное описание всех функций можно найти в справочной системе Scilab.
Заметим, что по умолчанию результат содержит восемь значащих цифр.
Количество цифр, отображаемых в результате, можно изменить с помощью команды
printf.
Для присваивания значений переменным используется оператор "=".
Например, чтобы присвоить x значение 5, нужно выполнить команду x=5.
-->x=5
x =
5.
-->
Если в конце команды стоит символ ";", то значение переменной не выводится на экран.
-->x=5;
-->
В имени переменной учитывается регистр. Например, x и X — две разные переменные.
Имя переменной не должно совпадать с названием встроенных переменных, процедур и функций.
В имени переменной можно использовать не более 24 символов.
Переменная может быть числового типа или строкового типа.
Для присваивания переменной строки символов необходимо заключить эту строку в одинарные кавычки.
Например, чтобы присвоить x=abc, нужно набрать x='abc'.
-->x='abc'
x =
abc
-->
Команда clear позволяет очищать значения переменных.
Например, команда clear очищает значения всех переменных,
а команда clear x очищает значение переменной x.
Функции в Scilab делятся на встроенные и определенные пользователем.
Некоторые встроенные функции были приведены выше. Рассмотрим определение пользовательских функций.
Пользовательские функции можно определить с помощью команды deff или конструкции
Пример. Определить функцию y=x^3 и вычислить ее значение при x=2.
-->function[y]=myfunc(x)
-->y=x^3
-->endfunction
-->myfunc(2)
ans =
8.
-->
Векторы и матрицы в SciLab
Векторы и матрицы представляют собой одномерный и двумерный массивы.
Значение нижней границы индексации элементов массива в Scilab по умолчанию равно единице.
Одномерный массив (вектор-строку) можно задать с помощью команды
X=a:h:b
где X -название массива, a и b — значения первого и последнего элементов массива, h — шаг, с которым изменяются элементы массива.
Возможна запись вида
X=a:b
В этом случае шаг автоматически принимается равным единице.
Пример. Задать вектор-строку X с элементами -2,-1,0,1,2.
-->X=-2:2
X =
- 2. - 1. 0. 1. 2.
-->
Пример. Задать вектор-строку X с элементами -2, -1.5, -1, -0.5, 0, 0.5, 1, 1.5, 2.
С помощью знака ":" можно выполнять различные операции с матрицами
Пример.
-->X=[-1 0 1; 0 1 2; 5 4 7]
X =
- 1. 0. 1.
0. 1. 2.
5. 4. 7.
-->X(1,:) //Выделяет из матрицы X первую строку
ans =
- 1. 0. 1.
-->X(:,1) //Выделяет из матрицы X первый столбец
ans =
- 1.
0.
5.
-->X(1,:)=[] //Удаляет из матрицы X первую строку
X =
0. 1. 2.
5. 4. 7.
-->X(1:2,2:3) //Выделяет из матрицы X подматрицу
ans =
1. 2.
4. 7.
-->
При работе с матрицами в пакете Scilab можно использовать следующие операции:
Если к заданной матрице применить некоторую функцию, то элементы матрицы будут преобразованы в соответствии с этой функцией.
Пример.
-->X=[0 %pi];
-->cos(X)
ans =
1. - 1.
-->
При работе с матрицами можно использовать встроенные функции. Рассмотрим некоторые из них.
Функция length(X) возвращает количество элементов матрицы X.
Пример.
-->X=[1 2 3 4 5];
-->length(X)
ans =
5.
-->
Пример.
-->X=[1 2; 3 4; 5 6];
-->length(X) //кол-во всех элементов матрицы X
ans =
6.
-->length(X(:,1)) //кол-во строк матрицы X
ans =
3.
-->length(X(1,:)) //кол-во столбцов матрицы X
ans =
2.
-->
Функция size(X) возвращает вектор, содержащий количество строк и столбцов матрицы X.
Пример.
-->X=[1 2; 3 4; 5 6];
-->size(X)
ans =
3. 2.
-->
Функция max(X) возвращает максимальный элемент матрицы X.
Функция min(X) возвращает минимальный элемент матрицы X.
Функция sum(X) возвращает сумму элементов матрицы X.
Функция prod(X) возвращает произведение элементов матрицы X.
Функция det(X) возвращает определитель матрицы X.
Функция inv(X) возвращает матрицу, обратную к X.
Знаете ли Вы, в чем фокус эксперимента Майкельсона?
Эксперимент А. Майкельсона, Майкельсона - Морли - действительно является цирковым фокусом, загипнотизировавшим физиков на 120 лет.
Дело в том, что в его постановке и выводах произведена подмена, аналогичная подмене в школьной шуточной задачке на сообразительность, в которой спрашивается: - Cколько яблок на березе, если на одной ветке их 5, на другой ветке - 10 и так далее При этом внимание учеников намеренно отвлекается от того основополагающего факта, что на березе яблоки не растут, в принципе.
В эксперименте Майкельсона ставится вопрос о движении эфира относительно покоящегося в лабораторной системе интерферометра. Однако, если мы ищем эфир, как базовую материю, из которой состоит всё вещество интерферометра, лаборатории, да и Земли в целом, то, естественно, эфир тоже будет неподвижен, так как земное вещество есть всего навсего определенным образом структурированный эфир, и никак не может двигаться относительно самого себя.
Удивительно, что этот цирковой трюк овладел на 120 лет умами физиков на полном серьезе, хотя его прототипы есть в сказках-небылицах всех народов всех времен, включая барона Мюнхаузена, вытащившего себя за волосы из болота, и призванных показать детям возможные жульничества и тем защитить их во взрослой жизни. Подробнее читайте в FAQ по эфирной физике.