Математические выражения в Scilab
Лекция 1
Возможности системы SCILAB
Scilab –интерактивная система автоматизации инженерных, научных и математических расчетов, построенная на расширенном представлении и применении матричных операций.
Пакет разработан Scilab Group INRIA-Rocquencourt Metalau Project. Свободно распространяемую версию пакета вместе с полной документацией на английском языке в формате pdf можно получить по адресу http://www.scilab.org.
Scilab поддерживается компанией Scilab Consortium, созданной в 2003 году. Scilab поддерживает язык программирования высокого уровня для организации технических вычислений.
Некоторые возможности системы:
· В области математических вычислений:
- матричные, векторные, логические, условные операторы;
- символьные вычисления;
- полиномиальные и рациональные функции;
- элементарные и специальные функции;
- полиномиальная арифметика.
· В области реализации численных методов:
- решение дифференциальных уравнений;
- численное интегрирование;
- поиск корней нелинейных алгебраических уравнений;
- оптимизация функций нескольких переменных;
- одномерная и многомерная интерполяция;
- решение задач математической статистики.
· В области программирования:
- свыше 500 встроенных математических функций;
- интерфейс к Fortran, Tcl/Tk, C, C++, Java, LabView.
· В области визуализации результатов расчетов и графики:
- возможности создания и редактирования двухмерных и трехмерных графиков;
- проведение визуального анализа данных.
Scilab имеет схожий с MATLAB язык программирования, в составе имеется утилита, позволяющая конвертировать документы Matlab → Scilab.
Scilab позволяет работать с элементарными и большим числом специальных функций (Бесселя, Неймана, интегральные функции), имеет мощные средства работы с матрицами, полиномами (в том числе и символьно), производить численные вычисления (например, численное интегрирование) и решение задач линейной алгебры, оптимизации и симуляции, в его состав входят мощные статистические функции, а также средства для построения и работы с графиками.
Программа доступна для различных операционных систем, включая GNU/Linux и Microsoft Windows.
Отличия от некоторых коммерческих программ:
- Бесплатность
- Маленький размер (дистрибутив занимает менее 20Мб против более чем двухгигабайтного пакета MATLAB)
Scilab состоит из 3-х частей:
o интерпретатор
o библиотека функций (Scilab-процедуры)
o библиотека Fortran и С процедур
Работа с Scilab в режиме диалога
Сеанс работы с с Scilab по аналогии с Matlab будем называть сессией (session). В сессии имеются строки ввода, вывода и сообщений об ошибках. Входящие в сессию определения переменных и функций, расположенные в рабочей области памяти, можно записать на диск, используя команду save. Команда loadпозволяет считать с диска данные рабочей области. Фрагменты сессии можно оформить в виде дневника с помощью команды diary.
Основное окно системы Scilab – это командное окно (Command Window). В нем можно вводить команды, и в него Scilab выводит результат выполнения этих команд и свои служебные сообщения.
Очистить командное окно можно, нажав клавишу F2.
Система Scilab позволяет любые вычисления выполнять в интерактивном режиме. Работа с системой в этом случае реализуется по принципу «задал вопрос – получил ответ». Пользователь набирает на клавиатуре вычисляемое выражение, редактирует (при необходимости) его и завершает ввод нажатием клавиши Enter.
Если система готова к вводу данных, в командном окне появляется символ --> в начале строки. Данные вводят с помощью простейшего строчного редактора. Для блокировки вывода результата вычислений некоторого выражения после него нужно поставить ; (точку с запятой). Если не указать имя переменной, которой надо присвоить значение результата вычислений, то Scilab присвоит этой переменной имя ans. В качестве знака присваивания в системе используется знак равенства =. Встроенные функции (например, sin) вводят строчными буквами и указывают их аргументы в круглых скобках. Результат вычислений выводится в строках вывода (без знака -->). Переменные a и A в среде Scilab – это разные переменные.
Примеры:
--> v=[1 2 3 4]
v =
1. 2. 3. 4.
--> m=[1, 2; 3, 4]
m =
1. 2.
3. 4.
--> sin(v)
ans =
0.8414750 0.9092974 0.1411200 -0.7568025
--> 3*v
ans =
3. 6. 9. 12.
Две записи вектора v=[1 2 3 4] и v=[1, 2, 3, 4] являются идентичными.
В некоторых случаях вводимое математическое выражение может не уместиться в одной строке. Часть выражения можно перенести на новую строку с помощью знака двоеточие, например:
--> s=1+2+1/3+..
+4
s =
7.3333333
Математические выражения в Scilab
Математические выражения состоят из чисел, констант, переменных, операторов, функций и спецзнаков. Числа могут быть целыми, дробными, с фиксированной и плавающей точкой. Примеры: -3 2.453 123.12е-3. Последнее число – это 123.12*10-3, т.е. 0,12312. Для разделения целой и десятичной части числа используется точка. Числа могут быть вещественными и комплексными. Кроме того, в Scilab существуют так называемые системные переменные и символьные константы:
· %i – мнимая единица (%i= );
· %pi – число π=3,1415927;
· %e –число е=2,71828184;
· %eps – 2.22d-16;
· %inf – значение машинной бесконечности;
· ans – переменная, хранящая результат последней операции;
· %nan – указание на нечисловой характер данных (not-a-number).
Примеры:
--> 1/0
! – error 27
division by zero
--> 0/0
! – error 27
division by zero
Системные переменные нельзя переопределить, например, переменной %eps нельзя присвоить другое значение:
-->%eps = 0.1
! – error 13
redefining permanent variable
Символьная константа – это цепочка символов, заключенная в апострофы, например, ‘Hello’.
В Scilab наглядность описания сложных выражений достигается с помощью текстовых комментариев, которые вводят с помощью символов //.
Переменная в Scilab может иметь имя, содержащее сколько угодно символов, но система запоминает и идентифицирует только первые 24 символа. Имя должно начинаться с буквы и может содержать буквы, цифры и символ подчеркивания _.
В памяти компьютера переменные занимают определенное место, называемое рабочим пространством (Workspace). Для очистки рабочего пространства используют функцию clear:
· clear – уничтожение определений всех переменных;
· clear x– уничтожение определения переменной x;
· clear a, b, c– уничтожение определений нескольких переменных.
Примеры:
--> v=[1 2 3 4 5];
--> clear v
--> v
!- - error 4
undefined variable : v
Большинство операций в Scilab являются матричными операциями, а соответствующие им операторы относятся к матричным операторам. Например, с помощью операторов умножения * и деления / вычисляют произведение и частное от деления двух массивов (векторов или матриц). Есть ряд спецоператоров, например, оператор \ используют для деления справа налево, а операторы .* и ./ – для поэлементного умножения и деления массивов.
Примеры:
--> v1=[2 4 6 8]; v2=[1, 4, 12, 24]; p=v1/v2, t=v1.*v2, r=v1./v2, h=v1.\v2
p =
0.3826323
t =
2 16 72 192
r =
2. 1. 0.5 0.3333333
h =
0.5 1. 2. 3.
Обратите внимание на результат операции:
-->x=[1 2 3 4 5 6];y=1/x
y =
0.0109890
0.0219780
0.0329670
0.0439560
0.0549451
0.0659341
В данном случае вычисляются не величины, обратные элементам вектора х, а каждый элемент вектора х делится на сумму квадратов всех элементов вектора. Результат же операции y=x^(-1) дает то, что надо:
-->x=[1 2 3 4 5 6];y=x^ (-1)
y =
1. 0.5 0.3333333 0.25 0.2 0.1666667
Функции – это имеющие уникальные имена подпрограммы, выполняющие определенные преобразования над своими аргументами и при этом возвращающие результаты этих преобразований.
Функции (макросы) в Scilab похожи на те, что встречаются в других языках программирования. Функции могут иметь аргумент, сами являться аргументом другой функции, быть членом списка, участвовать в операциях сравнения, вызываться рекурсивно. Функция начинается со слова function и заканчивается словом endfunction.
Первая строка функции может быть следующей:
function var=my_name(x1,...,xk),
где var- имя переменной, а xi - входные переменные.
Ниже приведен пример функции, вычисляющей сумму положительных элементов в массиве v.
function g=f(v)
s=0; n=length(v);
for i=1:n
if v(i)>0 then
s=s+v(i);
end
end
g=s;
endfunction
Для использования этой функции ее нужно сначала сохранить на диске в файле с именем f.sci,выполнить пункт меню Execute/Load into Scilab, а затем вызвать ее:
--> x=[1 2 5 -3 7 -9 12]; t=f(x)
t =
27
Если функция должна возвращать несколько значений, то ее надо определить в формате:
function[y1, y2, …] = func(x1,x2,…)
……………………. тело функции
Endfunction
Здесь y1, y2, … – список выходных аргументов, x1, x2, … – список входных аргументов, func – имя функции.
Функцию средствами пакета Scilab можно создать с помощью команды deff.
Пример. Создадим в редакторе функцию с именем fun двух аргументов t и y, результатом которой будет трехмерный вектор, первый элемент которого равен t+y, второй элемент равен t-y, а третий элемент равен t*y. deff('[w]=fun(t,y)',[
'w(1)=t+y;';
'w(2)= t-y;'; 'w(3)= t*y;'])
Вызовем эту функцию: q=fun(5,7)
q =
12.
- 2.
35.
Замечание: Сложные функции лучше создавать на языках Fortran или C, а затем линковать вместе с пакетом Scilab.
В математических выражениях часто встречается оператор:(двоеточие), имеющий следующий формат:
Начальное_значение: Шаг: Конечное_значение
Если Шаг не указан, то считается, что он равен 1.
Примеры:
--> 1:3
ans =
1. 2. 3.
--> j=10:-2:2
j =
10. 8. 6. 4. 2.
--> x=1:.2:1.4, sin(x)
x =
1. 1.2 1.4
ans =
0.8415470 0.9320391 0.9854497
Если в математическом выражении допущена ошибка или предписываемые вычисления некорректны, Scilab выводит в командное окно соответствующие сообщения. Для возвращения к ранее набранным строкам с целью их корректировки используют клавиши и ¯.
По умолчанию Scilab представляет результат вычислений с 8 значащим цифрами. Для того, чтобы контролировать количество выводимых разрядов числа на печать, можно использовать команду printf с заданным форматом.
Примеры:
-->c=678.5556696777888899 // Будет напечатано 8 цифр
c =
678.55567
-->printf(“%4.8f”,c)
678.55566968
Аналогичный результат дадут команды printf(“%1.8f”,c), printf(“%5.8f”,c)
-->printf(“%4.1f”,c)
678.6
-->d=56.6789
-->printf(“%f”,d) // 6 знаков после запятой
56.678900
-->c=678.55566969;d=56.6789;
-->printf('%4.3f %4.1f',c,d)
678.556 56.7
Для завершения работы с системой можно использовать команды Quit иExit.
Главное меню
Меню File
Команда New Scilab открывает новое окно Scilab, фактически пакет запускается повторно.
Команда Open открывает окно для загрузки созданного ранее файла, рисунка или модели.
Команда Load открывает окно для загрузки файлов, информация в которых хранится в виде машинных кодов, при их открытии в память компьютера загружаются определенные ранее переменные и функции.
Команда Save: сохранение всех определенных в данной сессии переменных и функций в виде файла с расширением sav или bin.
Команда Change Directoryменяет текущий каталог.
Команда Get Current Directoryвыдает в командную строку имя текущего каталога.
Команды Print Setup и Print задают опции печати.
Команда Exit - выход из системы.
Пункт меню Editпредназначен для редактирования текста программ. С его помощью можно выделять, копировать, вставлять текст, очищать буфер обмена, просматривать список ранее введенных команд (History).
С помощью пункта Preferencesможно при наличии возможности поменять язык в системе, цвет текста и заднего плана, восстановить прежние цвета, показать или скрыть кнопки панели инструментов, установить типы поддерживаемых форматов, выбрать фонт шрифта, очистить предысторию, очистить командное окно, вызвать консоль scilabи настроить ее.
Пункт меню Editor позволяет открыть окно редактора.
Пункт меню ? позволяет получить справку по системе Scilab и просмотреть демонстрационные примеры. В справочной системе информацию можно искать, воспользовавшись содержанием, в списке, упорядоченном по алфавиту, по ключевому слову или фразе.