Реферат Визуализация результатов расчетов в Scilab. Построение двух- и трехмерных графиков в Scilab. Функции plot, plot2d, plot3d, contour, contourf. Создание графических приложений: работа с графическим окном, динамические интерфейсные элементы
ФБГОУВПО «Мордовский Государственный педагогический институт им. М.Е.Евсевьева»
Физико-математический факультет
Кафедра информатики и вычислительной техники
РЕФЕРАТ
Визуализация результатов расчетов в Scilab. Построение двух- и трехмерных графиков в Scilab. Функции plot, plot2d, plot3d, contour, contourf. Создание графических приложений: работа с графическим окном, динамические интерфейсные элементы
Выполнил: студент группы МДМ-115
физико-математического факультета
Якимкина Ирина
Проверила: Кормилицына Т.В.
Саранск 2017
Введение
Scilab (/ˈsaɪlæb/) — пакет прикладных математических программ, предоставляющий открытое окружение для инженерных (технических) и научных расчётов. Это самая полная общедоступная альтернатива MATLAB.
С 1994 года распространяется вместе с исходным кодом через Интернет. В 2003 году для поддержки Scilab был создан консорциум HYPERLINK "https://ru.wikipedia.org/w/index.php?title=Scilab_Consortium&action=edit&redlink=1" \o "Scilab Consortium (страница отсутствует)" Scilab Consortium. Сейчас в него входят 25 участников, в том числе HYPERLINK "https://ru.wikipedia.org/wiki/Mandriva" \o "Mandriva" Mandriva, INRIA и ENPC (Франция).
Scilab содержит сотни математических функций, и есть возможность добавления новых, написанных на различных языках (C, C++, Fortran и т. д.). Также имеются разнообразные структуры данных (списки, полиномы, рациональные функции, линейные системы), интерпретатор и язык высокого уровня.
Scilab был спроектирован как открытая система, и пользователи могут добавлять в него свои типы данных и операции путём перегрузки.
В системе доступно множество инструментов:
2D и 3D графики, анимация
Линейная алгебра, разреженные матрицы (sparse matrices)
Полиномиальные и рациональные функции
Интерполяция, аппроксимация
Симуляция: решение ОДУ и ДУ
Scicos: гибрид системы моделирования динамических систем и симуляции
Дифференциальные и не дифференциальные оптимизации
Обработка сигналов
Параллельная работа
Статистика
Работа с компьютерной алгебройИнтерфейс к Fortran, HYPERLINK "https://ru.wikipedia.org/wiki/Tcl" \o "Tcl" Tcl/ HYPERLINK "https://ru.wikipedia.org/wiki/Tk" \o "Tk" Tk, C, C++, Java, LabVIEW Scilab имеет схожий с MATLAB язык программирования. В состав пакета входит утилита, позволяющая конвертировать документы Matlab в Scilab.
Scilab позволяет работать с элементарными и большим числом специальных функций (Бесселя, Неймана, интегральные функции), имеет мощные средства работы с матрицами, полиномами (в том числе и символьно), производить численные вычисления (например, численное интегрирование) и решение задач линейной алгебры, оптимизации и симуляции, мощные статистические функции, а также средство для построения и работы с графиками.
Для численных расчётов используются библиотеки HYPERLINK "https://ru.wikipedia.org/wiki/Lapack" \o "Lapack" Lapack, LINPACK, ODEPACK , HYPERLINK "https://ru.wikipedia.org/wiki/Automatically_Tuned_Linear_Algebra_Software" \o "Automatically Tuned Linear Algebra Software" Atlas и другие.
В состав пакета также входит Scicos — инструмент для редактирования блочных диаграмм и симуляции (аналог simulink в пакете MATLAB). Имеется возможность совместной работы Scilab с программой HYPERLINK "https://ru.wikipedia.org/wiki/LabVIEW" \o "LabVIEW" LabVIEW.
Программа доступна для различных операционных систем, включая HYPERLINK "https://ru.wikipedia.org/wiki/Linux" \o "Linux" Linux, HYPERLINK "https://ru.wikipedia.org/wiki/Microsoft_Windows" \o "Microsoft Windows" Microsoft Windows и HYPERLINK "https://ru.wikipedia.org/wiki/OS_X" \o "OS X" Mac OS X. Возможности Scilab могут быть расширены внешними программами и модулями, написанными на разных языках программирования. Программа имеет открытый исходный код, что позволяет как свободное коммерческое использование и распространение неизменённых версий, так и некоммерческое распространение измененных версий, которые должны включать в себя исходный код. Для коммерческого распространения измёненных версий необходимо согласование с INRIA.
Начиная с версии 5.0 программа распространяется под совместимой с GNU GPL 2 лицензией HYPERLINK "https://ru.wikipedia.org/wiki/CeCILL" \o "CeCILL" CeCILL.
Отличия от некоторых коммерческих программ:
Бесплатность.
Свободность (с версии 5.0).
Маленький размер — дистрибутив 4 версии занимал менее 20 МБ против более чем двухгигабайтного пакета MATLAB. Инсталлятор 5 версии (5.4.1) увеличился в объёме до 117 МБ.
Возможность запуска в консоли без использования графического интерфейса, в том числе в версии под Windows (в UNIX и Windows версиях MatLab-а эта возможность присутствует тоже). Это позволяет производить автоматизированные вычисления, есть пакетный режим.
1.Основы работы в Scilab. Математические выражения. Операторы. Функции. Форматированный вывод. Главное меню системы.
1.1.Работа с 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
1.2.Математические выражения в 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);
endendg=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,…)
Здесь
fun - имя функции,
xi - входные аргументы функции (их m штук),
yi - выходные аргументы функции (их n штук).
Пример.
Вычисление факториала.
function [x]=fact(k)
k=int(k)
if k<1 then k=1, end
x=1;
for j=1:k,x=x*j;endendfunctionНаберем этот текст в любом текстовом редакторе и сохраним его в файле с именем fact.sci. Расширение *.sci является для Sclab "родным", но не обязательным. Затем следует вызвать эти файлы из Scilab c помощью команд getf(filename) или exec(filename,-1); Те же операции можно произвести с помощью команд меню File-getf или File-exec.
До вызова функции желательно проверить, не была ли уже загружена такая функция ранее. Для этого:
exists('fact')
Результат:
ans =
0.
После загрузки файла
-->exec('C:\fact');
набираем
-->x=fact(5)
x =
120
Пример:
function z=fun(x, y)
// Определение функции
z=x.^2 + y.^2;
endfunctionСохраним эту функцию под именем fun.sci. После загрузки функции в Scilab мы можем обратиться к ней:
-->fun(1,2)
ans =
5.
Пример. Даны два массива X и Y. Вывести в командное окно имя массива, содержащего наибольшее число элементов, кратных числу три.
Решение. Составим программу и сохраним ее под именем t.sci в каталоге C:\DOCUME~1\user\.
function g=t(v)
s=0; n=length(v);
for i=1:n
if modulo(v(i), 3)==0 then
s=s+1;
endendg=s;
endfunctionДалее сохраним в корневом каталоге C:\ под именем tot, а затем выполним программу
x=[1 2 3 5 7 6 12]; y=[5 7 24 15]; d1=t(x), d2=t(y)
if d1>d2 then
disp('x')
elseif d1==d2 then
disp('в обоих массивах это число одинаково')
elsedisp('y')
endПолучим ответ:
d1 =
3.
d2 =
2.
x
Запуск файла на выполнение осуществляется так:
-->scipad('C:\DOCUME~1\user\t.sci');
-->scipad('C:\tot');
-->exec('C:\tot');
Файл-функция был сохранен в 'C:\DOCUME~1\user\t.sci', файл-сценарий – в 'C:\tot'
Это эквивалентно выполнению следующих операций: запускаем Scilab.
Далее: открываем файл-функцию File/Open… Далее Execute/Load into Scilab; Открываем файл-сценарий (выполняемый файл) File/Open…Далее File/Exec …
Открываются файлы в окне Scilab.
Если выходных параметров несколько, то их надо указать в квадратных скобках после слова function.
function [var1, var2, …] = fname(список_параметров)
// Основной комментарий
// Дополнительный комментарий
Тело файла с любыми выражениями
var1=выражение
var2=выражение
…
endfunction
Пример. Задан вектор . Вычислить и
.
Решение. Набираем и сохраняем в редакторе под именем statv.sci файл
function[mean, stdev] = statv(x)
n=length(x);
mean=sum(x)/n;
stdev=sqrt(sum((x-mean).^2)/n);
endfunctionДалее в командном окне набираем
--> v=[1, 2, 3, 4, 5];
--> [a, m]=statv(v)
В строках вывода получаем:
m =
1.4142136
a =
3.
-->
Краткий комментарий к программе.
Во второй строке файла statv.sci вычисляется количество элементов в массиве x; sum(x) – суммируются все элементы массива x; mean – вычисляется ; stdev – вычисляется . В итоге получаем среднее значение , .
Для создания временной задержки выполнения программы служит команда xpause, которая приостанавливает текущий процесс на число микросекунд, указанных в скобках
· хpause(microsecs)
Пример:
xbasc();
xset("color",12);
xstring(1,1,"Blue");
xpause(5.e6); // временная задержка на 5 секунд
xbasc();
xset("color",5);
xstring(0,1,"Red");
В результате мы видим в графическом окне вначале надпись "Blue", а затем она исчезает и мы видим сдвинутую по горизонтали надпись "Red".
Некоторые полезные функции Scilab для вычисления целой части числа:
int(1.9999)=1=int(1.1) int(-1.9999)=-1 int(-0.00001)=0
floor(1.5)=1=floor(1.9)=floor(1.1) floor(-1.1)=-2=floor(-1.8)
ceil(1.1)=ceil(1.9)=2 ceil(-1.9)=-1=ceil(-1.2)
fix(-1.2)=-1=fix(-1.7) fix(1.7)=1=fix(1.2)
1.3.Главное меню
Меню FileКоманда New Scilab открывает новое окно Scilab, фактически пакет запускается повторно.
Команда Open открывает окно для загрузки созданного ранее файла, рисунка или модели.
Команда Load открывает окно для загрузки файлов, информация в которых хранится в виде машинных кодов, при их открытии в память компьютера загружаются определенные ранее переменные и функции.
Команда Save: сохранение всех определенных в данной сессии переменных и функций в виде файла с расширением sav или bin.
Команда Change Directory меняет текущий каталог.
Команда Get Current Directory выдает в командную строку имя текущего каталога.
Команды Print Setup и Print задают опции печати.
Команда Exit - выход из системы.
Пункт меню Edit предназначен для редактирования текста программ. С его помощью можно выделять, копировать, вставлять текст, очищать буфер обмена, просматривать список ранее введенных команд (History).
С помощью пункта Preferences можно при наличии возможности поменять язык в системе, цвет текста и заднего плана, восстановить прежние цвета, показать или скрыть кнопки панели инструментов, установить типы поддерживаемых форматов, выбрать фонт шрифта, очистить предысторию, очистить командное окно, вызвать консоль scilab и настроить ее.
Пункт меню Editor позволяет открыть окно редактора.
Пункт меню позволяет получить справку по системе Scilab и просмотреть демонстрационные примеры. В справочной системе информацию можно искать, воспользовавшись содержанием, в списке, упорядоченном по алфавиту, по ключевому слову или фразе.
2. Построение графиков plot, plot2D,plot3D
2.1.Построение графиков функций одной переменной
В режиме непосредственных вычислений доступны практически все возможности системы. Широко используется, например, построение графиков различных функций, дающих наглядное представление об их поведении в широком диапазоне изменения аргумента. При этом графики строятся в отдельных масштабируемых и перемещаемых окнах.
Возьмем вначале простейший пример — построение графика синусоиды. Следует помнить, что MATLAB (как и другие СКМ) строит графики функций по ряду точек, соединяя их отрезками прямых, т. е. осуществляя линейную интерполяцию функции в интервале между смежными точками. Зададим интервал изменения аргумента х от 0 до 10с шагом 0.1. Для построения графика достаточно вначале задать вектор х=0:0.1:10, а затем использовать команду построения графиков plot(sin(x)). Это показано на рис. 3.1.
Вектор х задает интервал изменения независимой переменной от 0 до 10 с шагом 0.1. Почему взят такой шаг, а не, скажем, 1? Дело в том, что plot строит не истинный график функции sin(x), а лишь заданное числом элементов вектора х число точек. Эти точки затем просто соединяются отрезками прямых, т. е. осуществляется кусочно-линейная интерполяция данных графика. При 100 точках полученная кривая глазом воспринимается как вполне плавная, но при 10-20 точках она будет выглядеть состоящей из отрезков прямых.
Графики MATLAB строит в отдельных окнах, называемых графическими окнами. С первого взгляда видны отличия графического окна, показанного на рис. 3.1, от командного окна MATLAB. В главном меню окна появилась позиция Tools (Инструменты), которая позволяет вывести или скрыть инструментальную панель, видимую в верхней части окна графики на рис. 1. Средства этой панели (мы их рассмотрим полнее в дальнейшем) позволяют легко управлять параметрами графиков и наносить на них текстовые комментарии в любом месте.
Рис.1. Пример построения графика синусоиды
2.2.Графики в полярной системе координат
В полярной системе координат любая точка представляется как конец радиус-вектора, исходящего из начала системы координат, имеющего длину ρ и угол θ. Для построения графика функции ρ(θ) используется команда polarplot:
polarplot(theta, rho,[key1=value1,…,keyn=valuen]) – строит график, представляющий собой положение конца радиуса-вектора длиной rho и угломtheta.
Пример: Построить графики двух функций:
Программа:
fi=0:.01:2*%pi;
ro=3*cos(5*fi);ro1=3*cos(3*fi);
polarplot(fi,ro,style=color("red"));
polarplot(fi,ro1,style=color("blue"));
Приведем еще несколько примеров построения двумерных графиков.
Построить графики функций y=sin(x) и y1=cos(x) . Модифицировать масштаб координатных осей графика.
Сформируем массив Х приняв, что х изменяется в диапазоне [-8:8] с шагом 0,1, затем совместно сформируем массивы значений заданных функций с помощью следующей записи y=[sin(x); cos(x)].
С помощью функции plot2d построим графики функций y=sin(x) и y1=cos(x), установив значение параметра nax=[4,9,3,6]. Таким образом, ось X будет разбита 9 основными делениями (засечками), каждое основное 4 промежуточными, а ось Y соответственно - 6 и 3 (см. рис.).
x=[-8:0.1:8];
y=[sin(x); cos(x)];
plot2d(x,y',style=[color("red"),color("blue")],axesflag=1, nax=[4,9,3,6]);
axesflag - значение параметра keyn=valuen функции plot2d - определяет наличие рамки вокруг графика. Необходимо выделить следующие базисные значения этого параметра:
0 - нет рамки, нет изображения осей;
1 или 4 - изображение рамки, ось y слева (по умолчанию);
2 - изображение рамки, изображения осей нет;
3 - изображение рамки нет, ось y справа;
5 - изображение осей, проходящих через точку (0,0).
Построим графики функций y=sin(x) и y1=cos(x) с пересечением осей X и Y в точке (0,0) - значение параметра axesflag=5, выведем легенду с подписями для обеих кривых
x=[-2*%pi:0.1:2*%pi];
y=[sin(x); cos(x)];
plot2d(x,y',axesflag=5, leg="sin(x)@cos(x)");
2.3.Построение графиков трехмерных поверхностей
Для построения трехмерных графиков используют операторы plot3d, plot3d1 иmesh.
Обращение к ним следующее:
plot3d(x,y,z,[theta,alpha,leg,flag,ebox][keyn=valuen]),
plot3d1(x,y,z,[theta,alpha,leg,flag,ebox][keyn=valuen])
Здесь x - вектор - столбец значений абсцисс;
y - вектор - столбец значений ординат;
z - матрица значений функции;
theta, alpha - действительные числа, которые определяют в градусах сферические координаты угла зрения на график. Попросту говоря, это угол, под которым наблюдатель видит отображаемую поверхность;
leg - подписи координатных осей графика - символы, отделяемые знаком @. Например , 'X@Y@Z'.
flag – массив, состоящий из 3 целочисленных параметров [mode,type,box]. Здесьmode устанавливает цвет поверхности.
Значения параметра mode>0 - поверхность имеет цвет «mode», выводится прямоугольная сетка.
0 - выводится прямоугольная сетка, заливка отсутствует (белый цвет).
<0 - поверхность имеет цвет «mode», отсутствует прямоугольная сетка.
По умолчанию, равен 2 - цвет заливки синий, прямоугольная сетка выводится.
type - позволяет управлять масштабом графика, по умолчанию имеет значение 2.
Значения параметра type0 - применяется способ масштабирования, как у ранее созданной графики.
1 - границы графика указываются вручную с помощью параметра ebox.
2 - границы графика определяют исходные данные.
Box - определяет наличие рамки вокруг отображаемого графика. По умолчанию равен 4.
Значения параметра box0 и 1 - нет рамки
2 - только оси, находящиеся за поверхностью
3 - выводится рамка и подписи осей
4 - выводится рамка, оси и их подписи.
ebox - определяет границы области, в которую будет выводиться поверхность, как вектор [xmin,xmax,ymin,ymax,zmin,zmax]. Этот параметр может использоваться только при значении параметра type=1.
keyn=valuen - последовательность значений свойств графикаkey1=value1,key2=value2,...,keyn=valuen, таких как толщина линии, ее цвет, цвет заливки фона графического окна, наличие маркера и др. Таким образом, функцииplot3d (plot3d1) в качестве параметров необходимо передать прямоугольную сетку и матрицу значений в узлах сетки.
Примеры:
-->[x, y]=meshgrid([-3:0.15:3]); z=x.^2+y.^2; plot3d(x, y, z)
Задается опорная плоскость для построения трехмерной поверхности, переменныеx, y меняются от –3 до 3 с шагом 0,15.
xbasc()[x, y]=meshgrid([-3:0.15:3]); z=x.^2+y.^2; plot3d(x, y, z,flag=[5,2,3])
Цвет заливки – красный.
xbasc();[x, y]=meshgrid([-3:0.15:3]); z=x.^2+y.^2; plot3d(x, y,z,flag=[5,1,4], ebox=[-5,5,-4,4,-1,20])
xbasc()
t=-%pi:.3:%pi;
plot3d(t,t,sin(t)'*cos(t),35,45,'x@y@z',[5,2,4]);
Для формирования прямоугольной сетки впервые в Scilab 4.0 появилась функцияmeshgrid. Обращение к ней имеет вид:
[X,Y[,Z]]=meshgrid(x,y[,z])
здесь x,y [,z] - массивы 2(3) исходных параметров X, Y (,Z), указываемые через запятую; X, Y [,Z] - матрицы в случае 2 и массивы в случае 3 входных величин.
После формирования сетки вывести в нее графику можно с помощью функции surfлибо mesh. Так же, как и в случае с функциями plot3d и plot3d1, surf строит поверхность, заливая каждую ячейку цветом, который зависит от конкретного значения функции в узле сетки, а mesh заливает ее одним цветом.
Таким образом, mesh является полным аналогом функции surf со значением параметров Сolor mode=индекс белого цвета в текущей палитре цветов и Сolor flag=0.
-->[x, y]=meshgrid(-2:0.2:2, -3:.2:3); z=x.^2+y.*sin(x); mesh(x,y,z)
-->[x, y]=meshgrid(-2:0.2:2, -3:.2:3); z=x.^2+y.*sin(x); surf(x,y,z)
Программа, приведенная ниже, показывает, как можно в одном окне построить графики двух трехмерных функций (оператор mtlb_hold('on');). Правда, и без этого оператора график остается таким же.
[x y]=meshgrid(-2:0.2:2,-2:0.2:2);
z=3*x.^2+4*y.^2-1;
z1=-3*x.^2-4*y.^2-1;
surf(x,y,z);
mtlb_hold('on');
mesh(x,y,z1);
Сферу можно построить так:
u = linspace(-%pi/2,%pi/2,40);
v = linspace(0,2*%pi,20);
X = cos(u)'*cos(v);
Y = cos(u)'*sin(v);
Z = sin(u)'*ones(v);
plot3d2(X,Y,Z);
Оператор v = linspace(0,2*%pi,20);задает вектор v, состоящий из 20 значений с шагом π/10.
Замена последней строки программы на plot3d3(X,Y,Z); дает
2.4.Оформление и комбинирование графиков
После того, как график построен, Scilab позволяет выполнить его форматирование.
Для установки над графиком титульной надписи используется команда titletitle(‘string’)
Пример: -->title('График функции sin(x)')
clcxbasc()x=1:.1:4;plot(x,sin(x))
xtitle("График функции y=f(x)", "Ось X","Ось Y")
Для установки надписей возле осей x, y и z используются команды
label(‘string’):
xlabel(‘Ось Х’)
ylabel(‘Ось Y’)
zlabel(‘Ось Z’)
Для создания легенды используются различные варианты команды legend.
Одна из них:
legend([‘string1’,’string2’,’string3’,….],a=pos)
Если pos=1, то легенда помещается в верхний правый угол,
pos=2, то в левый верхний угол,
pos=3, то в левый нижний угол,
pos=4, то в нижний правый угол,
pos=5, легенда перетаскивается мышью.
Пример: -->legend(['sin(x)';'cos(x)';'sin(x)'],a=3);
Для расположения нескольких графиков в одном окне без наложения их друг на друга используется команда subplot. Она должна стоять до оператора построения графика.
subplot(m,n,p) или subplot(mnp) : m окон по горизонтали, n – по вертикали, p – номер окна, в которое будет выводиться текущий график (нумерация ведется по строкам).
clf reset удаляет все подокна и возвращают графическое окно в обычное положение.
Пример.
x=1:.1:3;subplot(211),plot(x,sin(x));subplot(212),plot(x,cos(x))
2.5.Построение графиков в виде ступенчатой линии
Для изображения графика в виде ступенчатой линии в Scilab существует функцияplot2d2(x,y). Она полностью совпадает по синтаксису с функцией plot2d. Главное отличие состоит в том, что X и Y могут быть независимыми друг от друга функциями, важно лишь, чтобы массивы X и Y были разбиты на одинаковое количество интервалов.
ЗАДАЧА
Имеются детальные наблюдения за ростом народонаселения на планете за период с 1947 по 2006 годы, млн. чел. Построить график, отражающий динамику процесса на основании данных 1947, 1958, 1970, 1980, 1999, 2006 года.
Поэлементно введем массивы X и Y и воспользуемся функцией plot2d2(x,y):
x=[1947 1958 1970 1980 1999 2006];
y=[2.003 3.1 3.6 4.7 5.2 5.4];
plot2d2(x,y);
Гистограмму можно построить с помощью оператора histplot.
Пример:
histplot([-4.5:0.25:4.5],rand(1,20000,'n'),style=2);
deff('[y]=f(x)','y=exp(-x.*x/2)/sqrt(2*%pi);');
x=-4.5:0.125:4.5;x=x';plot2d(x,f(x),26,"000");
titre= 'macro histplot : (normalized) histogram plot';
xtitle(titre,'C (Classes)','N(C)/(Nmax length(C))');
legends(['gaussian random sample histogram' 'exact gaussian density'],[2 26],1)
Для построения трехмерных гистограмм в Scilab используется функция hist3d:
hist3d(f,[theta,alpha,leg,flag,ebox])
Здесь f - матрица (m:n), задающая гистограмму f (i , j)=F( xi,yj) Параметрыtheta,alpha,leg,flag,ebox управляют теми же свойствами, как и у функции plot3d.
ЗАДАЧА. Построить трехмерную гистограмму при помощи команды hist3d.
Для формирования матрицы входных данных воспользуемся командой rand. Напомним, чтобы создать матрицу размером (m,n), необходимо использовать конструкцию rand(m,n)
Полученная гистограмма изображена на рис.
hist3d(9.7*rand(10,10),20,35);
Заключение
На основе анализа теории и примеров можно сделать вывод, что Scilab становится не просто «вычислялкой» отдельных небольших примеров, а настоящей «средой программирования с математическим уклоном», позволяющей создавать свои собственные математические «типы данных» — числовые системы, функционалы и прочая и прочая — и полноценные программные модули, которые могут использовать весь встроенный (или также собственноручно достроенный) функционал Scilab.
Список используемой литературы
1. Ярушкина Н.Г., Ястребова Н.Н., Чекина А.В. Нечеткие интеллектуальные системы в среде SciLab
2. М.И.Павлова. Руководство по работе с пакетом SCILAB
3.Е.Р.Алексеев, О.В.Чеснокова. Scilab - теория и практика на русском языке
4.Е.Р.Алексеев, О.В. Чеснокова, Е.А. Рудченко. Scilab. Решение инженерных и математических задач. М., ALT Linux, Бином, 2008.
5.Константин Носов. Scilab: серьезная математика, доступная всем.
6.И.С. Тропин, О.И. Михайлова, А.В. Михайлов. Численные и технические расчеты в среде Scilab. (ПО для решения задач численных и технических вычислений). М., 2008.