Создадим вектор-строку row<\/em> из 11 элементов, начиная с 0 с шагом 0.1. Это делается следующим образом:<\/p>\n \n row=0:0.1:1;<\/em>\n<\/p> \n Сейчас row<\/em> - это вектор-строка вида \\( (0\\; 0.1\\; 0.2\\; 0.3\\; 0.4\\; 0.5\\; 0.6 \\;0.7\\; 0.8 \\;0.9\\; 1) \\)<\/p>\n Получим 5-й эелемент вектор-строки row<\/em> и выведем этот элемент:<\/p>\n \n x=row(5); \/\/ <\/em> присвоили переменной х<\/em> значение, записанное в 5-й столбец строки row<\/em> \n\\( \n \\begin{matrix}\n \n R = \\begin{pmatrix}\n 0. & 0.1 & 0.2 & 0.3 & 0.4 & 0.5 & 0.6 & 0.7 & 0.8 & 0.9 & 1.\n \\end{pmatrix} &\n \n r2 = 0.1 &\n r10 = 0.9 \n \n \\end{matrix}\n \\) \n <\/p>\n\n\n Двумерные массивы, или матрицы, также задаются при помощи квадратных скобок, при этом строки<\/em> матрицы разделяются точкой с запятой<\/em> «;», а столбцы<\/em> - запятой или пробелом<\/em> (листинг 5).<\/p>\n\n[img:elog2u:tmp:alt=Листинг 5. Задание матрицы поэлементно.]\n\n Кроме того, матрица может быть сформирована из векторов-строк или векторов-столбцов, заданных ранее (листинг 6).<\/p>\n[img:bwlx7i:tmp:alt=Листинг 6. Задание матрицы из сформированных строк V1, V2, V3.]\n\n Обращение к элементу матрицы происходит через указание номера строки и столбца<\/em> в круглых скобках у имени матрицы. Например, чтобы выбрать 3-й элемент из второй строки матрицы M<\/em>, необходимо ввести команду:<\/p>\n M<\/em>(2,3) \/\/ <\/em> элемент из 2-й строки 3-го столбца 1<\/em><\/p>\n Отметим, что значения элементов матрицы можно использовать, присвоив их значения некоторым переменным, например:<\/p>\n\n x = M(2,3); или y = M(2,1)*M(1,1);<\/em><\/p>\n\n Важную роль в работе с матрицами играет знак двоеточия «:»<\/em>. Указывая его, можно получить целую строку<\/em> или целый столбец<\/em>. Например, чтобы выбрать третий столбец матрицы<\/em>, нужно записать M(:,3)<\/em>. А чтобы получить все элементы второй строки<\/em>, нужно записать M(2,:)<\/em>. Смотри (листинг 7).<\/p>\n\n[img:4s9cxe:tmp:alt=Листинг 7. Выбор элементов m23, m12 матрицы М; 2-й строки и 3-го столбца матрицы М.]\n\n Отметим, что для работы с матрицами и векторами предусмотрены стандартные операции сложения «+», матричного умножения и умножения на число «*», вычитания «-», возведения в степень «^», деления « \/ ». Отдельно стоит выделить операции транспонирования «’» и поэлементного умножения « .* »<\/em>. <\/p>\n Результаты операций с матрицами продемонстрированы ниже на Листинге 8.<\/p>\n\n[img:9omh8q:tmp:alt=Листинг 8. Операции матричного умножения, поэлементного умножения и транспонирования.]\n\n\n В Scilab предусмотрены специальные функции для работы с матрицами. Эти функции обеспечивают быстрое создание распространенных типов матриц. Такими функциями являются следующие:<\/p>\n ones<\/em>(<\/em>m<\/em>,<\/em>n<\/em>)<\/em> – создание матрицы единиц из m<\/em> строк и n<\/em> столбцов;<\/p>\n zeros<\/em>(<\/em>m<\/em>,<\/em>n<\/em>)<\/em> – создание нулевой матрицы из m<\/em> строк и n<\/em> столбцов;<\/p>\n eye<\/em>(<\/em>m<\/em>,<\/em>n<\/em>) <\/em>- создание единичной матрицы из m<\/em> строк и n<\/em> столбцов.<\/p>\n Подробнее про них написано в статье Специальные матричные функции в Scilab<\/a><\/p>\n\n Кроме того, в мат. пакете есть ряд функций, полезных для решения задач линейной алгебры и устойчивости систем линейных дифференциальных уравнений.<\/p>\n det<\/em>(<\/em>M<\/em>)<\/em> – вычисление определителя квадратной матрицы;<\/p>\n inv<\/em>(<\/em>M<\/em>)<\/em> – вычисление матрицы, обратной к М<\/em>, такой что M<\/em>-1<\/sup><\/em>M<\/em>=<\/em>E<\/em>;<\/p>\n spec<\/em>(<\/em>M<\/em>)<\/em> – находит собственные числа матрицы М;<\/p>\n linsolve<\/em>(<\/em>M<\/em>, <\/em>b<\/em>)<\/em> – решает систему линейных уравнений Mx<\/em>-<\/em>b<\/em>=0.<\/em><\/p>\n Подробнее про них написано в статье Функции для решения задач линейной алгебры в Scilab<\/a><\/p>\n\n\n\n\n","block_content_preview":"Под массивами в данном случае понимаются конструкции, используемые в линейной алгебре: матрицы, векторы-строки и векторы-столбцы.\nВажно! Нумерация","common_preview":"Scilab - матрично-ориентированный язык. Под массивами в данном мат. пакете понимаются конструкции, используемые в линейной алгебре: матрицы,","common_image":"190706-233415-f2940f76acc48a53debb3fca9b22315b-png","readtime":1,"isCurrentPage":false},{"id":"1562442426","h1":"Создание пользовательских функций","title":"Элементы программирования в Scilab 6","description":"Перейдем к созданию рабочей программы на языке Scilab.","url":"ehlementy-programmirovaniya-v-scilab-6","link":"\/articles\/ehlementy-programmirovaniya-v-scilab-6","views":"7133","commentCounter":0,"likeCounter":0,"tag_isset":true,"tag_url":"beginner","tag_list":[{"url":"beginner","name":"Scilab для новичков"}],"date_edit":"2021-11-04 21:04:44","date_create":"2019-07-05 23:47:00","date_ddmmyy":"5 июля 2019","date_after":"давным-давно","date_user":null,"block_image_type":"image","block_image_content":"190708-153419-d5473d676af06b953f41e5d88aec4d0a-png","block_image_image":"190708-153419-d5473d676af06b953f41e5d88aec4d0a-png","block_text_type":"text","block_text_content":"Перейдем к созданию рабочей программы на языке Scilab. Мы будем создавать скрипт-файлы с расширением .sce во встроенном редакторе SciNotes, о котором говорилось выше. ","block_text_preview":"Перейдем к созданию рабочей программы на языке Scilab. Мы будем создавать скрипт-файлы с расширением .sce во встроенном редакторе SciNotes, о котором","block_content_type":"text","block_content_content":" Перейдем к созданию рабочей программы на языке Scilab. Мы будем создавать скрипт-файлы с расширением .sce во встроенном редакторе SciNotes<\/em>, о котором говорилось выше.<\/p>\n Чаще всего пользователю необходимо создавать собственные функции на языке Scilab, которые необходимы для решения текущих задач.<\/p>\n Для создания собственной подпрограммы-функции нужно использовать конструкцию:<\/p>\n function [v1, v2, … , vn] = f_name(w1, w2, … wm) Итак, у функции есть: В качестве примера напишем подпрограмму, вычисляющую значения функции \\( z= \\sqrt{ | cos({2y\\over x}) | }e^{y+x} \\) на промежутках \\( 1 \\le y \\le 2 \\), с шагом d=1<\/em>(листинг 9).<\/p>\n\n[img:4p1qab:tmp:alt=Листинг 9. Создание пользовательской подпрограммы-функции в редакторе SciNotes.]\n\n Мы создали собственную функцию с именем myfunc<\/em>, по которому и происходит вызов данной функции далее в программе на строке 11. В круглых скобках у имени функции перечислены входные переменные<\/em>, разделённые запятой. Тело функции состоит из одной строки - присвоения значения функции в выходную локальную переменную z<\/em>.<\/p>\n Отметим, что в строке 11 скрипт-файла происходит вызов функции с параметрами X<\/em>,<\/em>Y<\/em>, являющимися массивами из 11 точек на заданных промежутках, а результат записывается в переменную Z<\/em>, которая представляет собой массив, содержащий 11 значений функции myfunc<\/em>. <\/em><\/p>\n Создание собственных функций удобно тем, что поддерживает многократный вызов с различными параметрами. Например, для вычисления значения функции myfunc<\/em> в точках x<\/em>=1, <\/em>y<\/em>=0,3<\/em>, достаточно воспользоваться записью Z<\/em> = <\/em>myfunc<\/em>(1, 0.3).<\/em> При этом, в переменную Z будет записана всего одна точка 3.333482<\/em>.<\/p>\n Предлагаем читателю сравнить данный результат с представленным на листинге 3 и самостоятельно убедиться в удобстве использования встроенного текстового редактора и пользовательских функций.<\/p>\n\n","block_content_preview":"Перейдем к созданию рабочей программы на языке Scilab. Мы будем создавать скрипт-файлы с расширением .sce во встроенном редакторе SciNotes, о котором","common_preview":"Перейдем к созданию рабочей программы на языке Scilab. Мы будем создавать скрипт-файлы с расширением .sce во встроенном редакторе SciNotes, о котором","common_image":"190708-153419-d5473d676af06b953f41e5d88aec4d0a-png","readtime":1,"isCurrentPage":false},{"id":"1562586209","h1":"Основные операторы языка Scilab","title":"Использование циклов в scilab","description":"Использование циклов while, for в scilab, перебор элементов массива","url":"ispolzovanie-ciklov-v-scilab","link":"\/articles\/ispolzovanie-ciklov-v-scilab","views":"7775","commentCounter":0,"likeCounter":0,"tag_isset":true,"tag_url":"beginner","tag_list":[{"url":"beginner","name":"Scilab для новичков"}],"date_edit":"2021-11-04 21:05:02","date_create":"2019-07-07 15:43:12","date_ddmmyy":"7 июля 2019","date_after":"давным-давно","date_user":null,"block_image_type":"image","block_image_content":"200129-220148-6b05c73e0a4897e1641660d5803fb21b-png","block_image_image":"200129-220148-6b05c73e0a4897e1641660d5803fb21b-png","block_text_type":"text","block_text_content":"Часто в процессе решения инженерных или физических задача, а также задач по математическому моделированию, возникает необходимость проверять корректность полученных данных, выполнять разные вычисления, в зависимости от полученных результатов, перебирать значения и т.д. ","block_text_preview":"Часто в процессе решения инженерных или физических задача, а также задач по математическому моделированию, возникает необходимость проверять корректность","block_content_type":"text","block_content_content":" Часто в процессе решения инженерных или физических задача, а также задач по математическому моделированию, возникает необходимость проверять корректность полученных данных, выполнять разные вычисления, в зависимости от полученных результатов, перебирать значения и т.д. Для этих нужд в Scilab существуют операторы цикла, присваивания, условные операторы, как и в других языках программирования.<\/p>\n Рассмотрим основные операторы, которые используются в процессе программирования в математическом пакете Scilab.<\/p>\n\n Оператор цикла for<\/em> состоит из заголовка, содержащего условия его выполнения, исполняемого тела цикла. Форма записи представлена ниже:<\/p>\n for<\/em> <\/em>j<\/em> = <\/em>jo<\/em>:<\/em>d<\/em>:<\/em>jmax<\/em> Здесь \\( jo \\) – это стартовое значение параметра, Выполнение цикла начинается с присвоения параметру \\( j \\) начального значения \\( jo \\). Если параметр удовлетворяет условию \\( j \\le jmax \\),то выполняются операторы тела цикла. Затем параметр \\( j \\) увеличивается на величину \\( d \\), и снова происходит проверка на выполнение условия \\( j \\le jmax \\).<\/p>\n Оператор заканчивает свою работу, как только значение \\( j \\) превышает \\( jmax \\), а управление передаётся следующим за телом цикла операторам.<\/p>\n В качестве примера использования оператора for<\/em> , рассмотрим метод Рунге-Кутты численного интегрирования обыкновенного дифференциального уравнения.<\/p>\n Рассмотри дифференциальное уравнение<\/p>\n\n \\( y'=f(x,y) \\)<\/p>\n с начальным условием \\( y(x_0)=y_0 \\). Положим \\( f(x,y)=sin(x)\\).<\/p>\n Классический метод Рунге-Кутты 4-го порядка описывается следующей системой<\/p>\n \\( y_{i+1} = y_i + {h\\over6}(k_1 + 2k_2 + 2k_3+k_4) \\) Таким образом, для нахождения численного решения дифференциального уравнения \\( y' = sin(x) \\) с иcпользованием метода Рунге-Кутты 4-го порядка, нам потребуется написать пользовательскую функцию (Листинг 10, строки 2-5<\/em>), описывающую правую часть ОДУ.<\/p>\n Далее, задать отрезок интегрирования с некоторым шагом h<\/em>, что соответствует строкам<\/em> 7-10 Листинга 10. <\/em>Заострим внимание<\/strong> читателя на том, что на строке 10 Листинга 10<\/em> мы сформировали строку<\/u> из 101 элемента, а на строке 13 Листинга 10<\/em> -- вектор<\/u> той же размерности. Обратите внимание, как задаются начальные условия (Листинг 10, строка 16<\/em>).<\/p>\n Строки 19 – 27 Листинга 10<\/em> соответствуют реализации метода Рунге-Кутта, описанного выше. Результатом работы приложения будут графики решений ОДУ , полученных численно и аналитически (см. рис. 6).<\/p>\n\n[img:72qzwn:tmp:alt=Листинг 10. Реализация численного интегрирования ОДУ с помощью метода Рунге-Кутты.]\n Оператор цикла while<\/em> состоит из заголовка, содержащего условия его выполнения, исполняемого тела цикла. Форма записи представлена ниже:<\/p>\n\n while условие Выполнение цикла начинается с проверки условия на истинность. Если условие истинно, то выполняются операторы тела цикла. Затем снова происходит проверка на истинность условия.<\/p>\n\n Оператор заканчивает свою работу, как только значение условие нарушается, а управление передаётся следующим за телом цикла операторам.<\/p>\n\n Приведём пример использования данного оператора. Попросим пользователя ввести радиус \\( R=5\\). При этом, если пользователь введёт число, не превосходящее 5, условие прекращения цикла не будет выполнено и запрос на ввод радиуса повторится. При вводе корректного значения в консоли, мы выводим его в командном окне (строка 8) и присваиваем переменной R введённое пользователем значение (см. листинг 11).<\/p>\n\n \n Для проверки выполнения каких-либо условий в программе используется условный оператор if. Это один из основных операторов языка, и он имеет две формы записи: обычную и расширенную.<\/p>\n\n Обычная форма записи позволяет выбрать одно из двух условий и выполнить соответствующие действия.<\/p>\n\n if условие then Расширенная форма записи позволяет работать с конечным числом условий и выполнять соответствующие корректному условию операторы. В данном случае, поочередно проверяются все условия от 1 до n-го. Если ни одно из условий не выполнилось, выполняются операторы по ветке else.<\/p>\n\n if условие1 then В качестве примера, напишем пользовательскую функцию, которая будет вычислять значения функции \\( f(x) = \\begin{cases}\n2x, & x>0 \\\\ -x^2, & \\text{иначе} \\end{cases} \\) на промежутке \\( [-2; 2] \\) с шагом \\( d=0.1 \\) (листинг 12). В данном случае в функцию myfunc()<\/em> передаются два входных параметра: массив точек абсцисс \\( Х \\) и шаг \\( d \\).<\/p>\n\n В теле пользовательской функции на строке 2<\/em> вычисляется длина массива<\/em>, а на следующей строке, функцией zeros(), создаётся массив нулевых элементов<\/em> совместного размера для записи значений функции. Математический пакет Scilab располагает широким и гибко настраиваемым аппаратом для построения двумерных графиков и трёхмерных изображений. <\/p>\n Данная статья получила продолжение: Как настраивать толщину и начертание графиков в Scilab<\/a><\/b> и дополнительный разбор Настройки графиков: свойства осей и сетки<\/a>.<\/p>\n Перечислим основные функции для оформления графика:<\/p>\n\n xgrid()<\/em> - добавление сетки на график; Например, subplot(312) разобъёт графичекое окно на 3 строки, 1 столбец и нарисует график во второй ячейке:<\/p>\n[img:58tzpb:tmp:alt=Расположение графика в графическом окне subplot(312).]\n Например, subplot(234) разобъёт графичекое окно на 2 строки, 3 столбца и нарисует график в четвёртой ячейке:<\/p>\n[img:17noxt:tmp:alt=Расположение графика в графическом окне subplot(234).]\n \n\n\n Для построения графиков<\/em>, в которых положение точки задаётся двумя величинами, в Scilab нужно воспользоваться функцией plot(x, y , s)<\/em>. Здесь первая переменная \\( х \\) - массив абсцисс, \\( у \\) - массив ординат, \\( s \\) - необязательный параметр, отвечающий за цвет графика, толщину и начертание линии.<\/p>\n\n Установить желаемый вид и цвет графика можно, указав строковый параметр \\( s \\), который может состоять из одного, двух или трёх символов, определяющие соответственно: цвет линии, тип маркера, тип линии графика<\/em>. Возможные значения перечислены в таблицах 2-4.<\/p>\n\n \n[img:8dg6xh:tmp:alt=Таблица 2. Символы, определяющие цвет линии графика.]\n\n[img:2xew1r:tmp:alt=Таблица 3. Символы, определяющие тип линии графика.]\n\n[img:76p8uw:tmp:alt=Таблица 4. Символы, определяющие тип маркера]\n\n Для построения графика по точкам необходимо задать два массива: абсцисс и ординат, после чего воспользоваться функцией \\( plot(x, y)\\). Для демонстрации используем пример, любезно предоставленнный miklev:<\/p>\n\n Для демонстрации работы функции plot()<\/em> построим графики траектории движения точки<\/em> по заданным уравнениям \\( x(t), y(t) \\) на плоскости и в заданном диапазоне времени T (таблица 5). Определим внешний вид каждого из графиков, а также оформим систему координат со всеми необходимыми подписями (листинг 13). Результат работы программы представлен на рис. 7.<\/p>\n\n[img:4q8rll:tmp:alt=Таблица 5. Уравнения движения материальной точки и промежуток времени.]\n\t\n[img:58ue0u:tmp:alt=Рисунок 7. Построение графиков движения материальной точки.]\n\t\n\n Для построения поверхности<\/em> в Scilab используются функции plot3d( plot3d1) и plot3d2(plot3d3)<\/em>. Их отличие состоит в том, что первая пара функций plot3d( plot3d1) строит поверхность из отдельно стоящих друг от друга грани (залитую одним цветом и залитую различными цветами соответсвенно), а вторая пара plot3d2(plot3d3) - цельное геометрическое тело.<\/p>\n\n Процесс построения графика функции вида \\( Z(x,y) \\) можно разделить на 3 этапа: В качестве примера, построим сферу в трехмерной системе координат<\/em> с помощью функций plot3d1 и plot3d2<\/em>.<\/p>\n\n[img:6ew1nd:tmp:alt=Рисунок 8. Сфера, заданная параметрически, построенная с помощью функции plot3d1 (слева) и plot3d2 (справа).]\n\n\n Поверхность сферы в декартовых координатах \\( (x,y,z) \\) параметрически задаётся системой уравнений: \\( f(n) = \\begin{cases}\nx(u,v)=cos(u)cos(v) \\\\ y(u,v)=cos(u)sin(v) \\\\ z(u,v)=sin(u) \\end{cases} \\), Обратите внимание<\/em>, что при построении графиков поверхностей заданных параметрически , \\(x(u,v), y(u,v) и z(u,v) \\), необходимо сформировать матрицы \\( X, Y и Z\\) одинакового размера. Для этого массивы<\/em> \\( u и v \\) должны иметь одинаковый размер<\/em>.<\/p>\n\n Кроме того, если какая-либо функция из \\( X, Y или Z\\) зависит только от одного параметра \\( u или v \\), необходимо провести векторное умножение<\/em> на единичный вектор ones()<\/em> размерности, равной размерности параметра, от которого эта функция не зависит (см. строку 10 листинга 14).<\/p>\n\n\n
\n disp(x); \/\/ <\/em> выведет 0.4<\/em>\n<\/p>\n\n\n\nR = 0:0.1:1;\nr2 = R(2);\nr10 = R(10); \n<\/code><\/pre>\n обращение к элементам массива в Scilab<\/span>\n<\/div>\t\n\n
2.2 Двумерные массивы (матрицы)<\/h2>\n
2.3 Специальные функции для векторов и матриц<\/h2>\n
\n операторы (тело функции)
\nendfunction<\/em>;<\/p>\n\n
\n f_name<\/em> - имя функции, по которому происходит её вызов,
\n v1, v2, … ,vn<\/em> - выходные параметры - то, что функция возвращает,
\n w1, w2, … ,wm<\/em> - входные параметры - то, что функция принимает.<\/p>\n\n\/* Создание пользовательской функции *\/\n\nfunction z = myfunc(x, y)\n z = sqrt(abs(cos(2*y\/x)))*exp(y+x);\nendfunction\n\nd = 0.1; \/\/ задаём шаг\nX = 0:d:1; \/\/ задаём промежуток для переменной x\nY = 1:d:2; \/\/ задаём промежуток для переменной y\n\nZ = myfunc(X,Y); \/\/ вызываем пользовательскую функцию myfunc\n\ndisp(Z); \/\/ выводим значения функции в командном окне\n\nplot(X, Y);\n<\/code><\/pre>\n
4.1 Операторы цикла for<\/em> и while<\/em><\/h2>\n\n
Оператор цикла for<\/h3>\n
операторы <\/em>
\nend<\/em>;<\/em><\/p>\n
\n \\( d \\) – значение, на которое увеличивается параметр \\( j \\) на каждом шаге \\( j = j+d \\),
\n \\( jmax \\) – конечное значение параметра \\( j \\).<\/p>\n
\n где
\n \\( k_1 = f(x_i, y_i) \\)
\n \\( k_2 = f(x_i+ {h\\over2}, y_i+ {h\\over2}k_1) \\)
\n \\( k_3 = f(x_i+ {h\\over2}, y_i+ {h\\over2}k_2) \\)
\n \\( k_4 = f(x_i+ h, y_i+ hk_3) \\)
\n <\/p>\n\nclf;clc;\n\/\/Описываем правую часть ОДУ\nfunction dy = f(x,y)\n dy = sin(x)\nendfunction\n\n\/\/Задаём разбиение отрезка интегрирования[t0, tmax] с шагом h\nx0 = 0; xmax = 10;\nh = 0.1;\nX = x0:h:xmax;\n\n\/\/создадим вектор решения У необходимой размерности\nY = zeros(X);\n\n\/\/Задаём начальные условия \nY(1) = 0.2;\n\n\/\/В цикле пробежим все точки отрезка интегрирования\nfor j = 1:length(X)-1\n \n k1 = f(X(j), Y(j));\n k2 = f(X(j) + h\/2, Y(j) + h*k1\/2);\n k3 = f(X(j) + h\/2, Y(j) + h*k2\/2);\n k4 = f(X(j) + h, Y(j) + h*k3);\n \n Y(j+1) = Y(j) + (h\/6)*(k1 + 2*k2 + 2*k3 + k4); \nend\nplot(X,Y, \".r\");\nplot(X, -cos(X) + 1 + Y(1), \"b\");\nxgrid();\nxtitle(\"Метод Рунге-Кутты 4-го порядка решения ОДУ\", \"x\", \"y\");\nlegend(\"Численное решение ОДУ\", \"Аналитическое решение ОДУ\", -6)\n<\/code><\/pre>\n\n\n\n[img:fig32n:tmp:alt=Рисунок 6. Сравнение аналитического и численного решений ОДУ.]\n\n
Оператор цикла while<\/h3>\n\n
\n операторы
\nend;<\/em><\/p>\n\n\n\/* Работа цикла while *\/\nR=0;\nwhile (R < 5) \n clc;\n R = input('Введите радиус R больше 5'); \nend;\ndisp(\"R=\");\ndisp(R);\n<\/code><\/pre>\nЛистинг 11. Демонстрация работы цикла while, оператора присваивания и ввода данных в командном окне Scilab..<\/span>\n<\/div>\n \n \n \n
4.2 Условный оператор if<\/h2>\n\n
\n операторы 1
\nelse
\n операторы 2
\nend;<\/em><\/p>\n\n
\n операторы 1
\nelseif условие2
\n операторы 2
\nelseif условие3
\n операторы 3
\n
\nelse
\n операторы
\nend;<\/em><\/p>\n\n
Далее, внутри цикла for<\/em> производится перебор всех элементов входного массива \\(х\\)<\/em>, а условный оператор if<\/em> передаёт управление операторам вычисления значения функции в точке \\( x(j) \\) <\/em>, в зависимости от выполнения условия положительности или неотрицательности \\(j-го \\) элемента.<\/p>\n\n \n\n\/* Использование опертора if *\/\nclc; clf;\nfunction z = myfunc(x, d)\n el = length(x); \n z = zeros(el);\n for j = 1:1:el\n if (x(j) > 0) then \n z(j) = 2*x(j)\n else \n z(j) = -x(j)^2\n end\n end;\nendfunction;\n\nd = 0.1; \/\/ задаём шаг\nX = -2:d:2; \/\/ задаём промежуток для переменной x\nY = myfunc(X, d); \/\/ вызываем пользовательскую функцию myfunc\n\nplot(X,Y, \"r\");\nplot(zeros(X), Y, \"k\");\nplot(X, zeros(Y), \"k\");\nxgrid;\n<\/code><\/pre>\n Листинг 12. Задание функции \\( f(x) = \\begin{cases}\n2x, & x>0 \\\\ -x^2, & \\text{иначе} \\end{cases} \\) при помощи пользовательской функции, использования оператора цикла и условного оператора.<\/span>\n<\/div>\n\n \n \n[img:4qpyya:tmp:alt=Рисунок 6a. График функции \\( f(x) \\).]\n\n\n\n\n\n","block_content_preview":"Часто в процессе решения инженерных или физических задача, а также задач по математическому моделированию, возникает необходимость проверять корректность","common_preview":"Часто в процессе решения инженерных или физических задача, а также задач по математическому моделированию, возникает необходимость проверять корректность","common_image":"200129-220148-6b05c73e0a4897e1641660d5803fb21b-png","readtime":1,"isCurrentPage":false},{"id":"1580322253","h1":"Построение графиков Scilab","title":"Построение графиков в scilab","description":"Построение графиков в scilab: настройка сетки координа, подписи осей, вывод нескольких координатных осей","url":"postroenie-grafikov-v-scilab","link":"\/articles\/postroenie-grafikov-v-scilab","views":"37201","commentCounter":0,"likeCounter":0,"tag_isset":true,"tag_url":"beginner","tag_list":[{"url":"beginner","name":"Scilab для новичков"}],"date_edit":"2023-03-24 08:18:39","date_create":"2019-07-08 22:24:00","date_ddmmyy":"8 июля 2019","date_after":"давным-давно","date_user":null,"block_image_type":"image","block_image_content":"200129-224016-546bbc7d3d6bc58fe171f087af2b8ba7-png","block_image_image":"200129-224016-546bbc7d3d6bc58fe171f087af2b8ba7-png","block_text_type":"text","block_text_content":"Математический пакет Scilab располагает широким и гибко настраиваемым аппаратом для построения двумерных графиков и трёхмерных изображений. ","block_text_preview":"Математический пакет Scilab располагает широким и гибко настраиваемым аппаратом для построения двумерных графиков и трёхмерных изображений.","block_content_type":"text","block_content_content":"
\nxtitle(\"Название графика\", \"Название оси абсцисс\", \"Название оси ординат\")<\/em> - добавление подписей;
\nlegend(.., , .. )<\/em> - создание легенды с перечнем всех отображенных графиков в системе координат;
\nsubplot(mnk)<\/em> - функция разделения окна на матрицу, содержащую \\( m \\) строк, \\(n столбцов\\), а \\(k \\)- это номер ячейки, в которой будет отображен график.<\/p>\n\n5.1 Двумерные графики<\/h2>\n\n
Построение графика по точкам<\/h3>\n
\nx=[1, 2, 3]; \/\/ задаём массив точек по горизонтали\ny=[4, 5 ,6]; \/\/ задаём массив точек по вертикали\n \nplot(x, y, 'r-o'); \/\/ строим график по данным. Соединительные элементы - крожочки\nxtitle('График по точкам', 'x', 'y');\nxgrid();\n\ngca().data_bounds = [0, 4, 0, 7]; \/\/ изменяем видимую область\n<\/code><\/pre>\nПрограмма построения графиков по точкам в scilab<\/span>\n<\/div>\t\n\n[img:2w9gid:tmp]\n\n\n
Построение графика по заданному уравнению<\/h3>\n
\n\/* графики траектории движения материальной точки *\/\n\n\/\/ очищаем область консоли и графического окна\nclc; clf; \n\n\/\/ создаём пользовательскую функцию для координаты х\nfunction z = X(t)\n z = 3 - 2*cos(%pi*t\/2);\nendfunction;\n\n\/\/ создаём пользовательскую функцию для координаты y\nfunction z = Y(t)\n z = 1 + 3*sin(%pi*t\/3);\nendfunction;\n\n\nd = 1e-2; \/\/ задаём шаг\nT = 0:d:10; \/\/ задаём диапазон времени\n\nx = X(T); \/\/ вызываем пользовательскую функцию X\ny = Y(T); \/\/ вызываем пользовательскую функцию Y\n\nsubplot(211); \/\/ разделяем графическое окно на 2 строки \nplot(T, x, \"k--\"); \/\/ строим график x(t)\nplot(T, y); \/\/ строим график у(t) в той же системе координат\nxgrid; \nxtitle(\"Траектория движения точки\", \"t\", \"x(t), y(t)\"); \nlegend(\"x(t)\", \"y(t)\");\n\nsubplot(212); \nxgrid; \nxtitle(\"Траектория движения точки на фазовой плоскости\", \"x(t)\", \"y(t)\"); \ncomet(x, y); \/\/ строим анимированную траекторию движения точки на фазовой плоскости\n<\/code><\/pre>\nЛистинг 13. Программа построения графиков движения материальной точки.<\/span>\n<\/div>\t\n\n \n
5.2 Построение трёхмерных изображений<\/h2>\n \n
\n1. Создание прямоугольной сетки с помощью функции linspace();<\/em>
\n2. Вычисление значений функции \\( Z(x,y) \\) в узлах сетки;
\n3. Вызов функции plot3d() или plot3d2()<\/em>.<\/p>\n\n
независимые переменные \\( u и v \\) изменяются на промежутке \\( [-\\pi; \\pi] \\). Результат работы программы представлен на рис.8, исходный код на листинге 14.<\/p>\n\n \n\n\n\/* работа с трёхмерными графиками *\/\n\nu = linspace(-%pi, %pi, 40); \/\/ задаём сетку для параметра u с 40 значениями в указанном диапазоне\nv = linspace(-%pi, %pi, 40); \/\/ задаём сетку для параметра v с 40 значениями в указанном диапазоне\n\/* массивы u и v должны иметь одиноковый размер! *\/\n\n\/* Формируем матрицы значения для каждой координаты *\/\nX = cos(u)'*cos(v);\nY = cos(u)'*sin(v);\nZ = sin(u)'*ones(v);\n\n\/* Строим трёхмерные графики *\/\nsubplot(121);\nplot3d(X,Y,Z);\nxtitle(\"Сфера, состоящая из граней\", \"x\", \"y\", \"z\");\n\nsubplot(122);\nplot3d2(X,Y,Z);\nxtitle(\"Сфера, как геометрическое тело\", \"x\", \"y\", \"z\");\n<\/code><\/pre>\nЛистинг 14. Программа, реализующая построения трехмерного изображения сферы с помощью функции plot3d1 и plot3d2.<\/span>\n<\/div>\t\t\n\n