30 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Моделирование систем в программной среде Scilab & Xcos 5.5.1. Часть 4

Введение. Руководство по Scicos – составной части свободно распространяемого пакета Scilab предназначено для первого знакомства и приобре;

Тамбов

РУКОВОДСТВО

ПАКЕТ SCILAB ДЛЯ МОДЕЛИРОВАНИЯ ДИНАМИЧЕСКИХ СИСТЕМ

SCICOS

2009

Руководство по Scicos – составной части свободно распространяемого пакета Scilab предназначено для первого знакомства и приобретения навыков работы. Scicos имеет дружественный графический интерфейс и удобен в работе. В настоящее время в нашей стране нет подобного руководства, что затрудняет распространение этого мощного и эффективного средства. Знание этого инструмента моделирования необходимо специалистам во всех областях науки и техники. Особенно полезен он для студентов и аспирантов.

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

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

На фоне возрастающего интереса пользователей к свободному программному обеспечению имеет смысл рассмотреть альтернативные свободные проекты, связанные с обработкой данных и научными расчетами. Не нужно забывать, что свободное распространение программ является старой академической традицией. Зародилась она в учебных и научных организациях, где передавали друг другу программы, созданные «для себя» с целью решения конкретных учебных и научных задач.

Свободно распространяемый пакет Scilab был разработан в 1994 году во Франции, в Национальном исследовательском институте информатики и автоматизации INRIA и Национальной школе дорожного ведомства ENPC. С 2003 года поддержкой Scilab занимается консорциум Scilab Consortium.

Scicos (Scilab Connected Object Simulator) – составная часть пакета Scilab. Scicos в его составе обеспечивает возможность визуального моделирования динамических систем. Эти моделируемые системы могут быть как непрерывными, так и дискретными.

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

В состав пакета Scilab входит большая библиотека математических функций, расширяемая программами, написанными на языках высокого уровня, например, на C или Fortran 77. В состав пакета входит интегрированный язык высокого уровня, отличающийся в некоторой степени от языка C.

Scilab – пакет числовой обработки данных. Он очень хорош для обработки сигналов. Основной режим работы – командный. К основным функциям пакета Scilab можно отнести работу с матрицами (в том числе разреженными), решение обыкновенных дифференциальных уравнений, численное дифференцирование и интегрирование, построение двумерных и трехмерных графиков по формулам и по результатам расчетов, решение задач линейного программирования, а также возможность создания пользовательских программ. Пакет является кроссплатформенным, на сайте проекта (http://www.scilab.org/) можно найти самые последние сборки для различных операционных систем. На русском языке подробную информацию и пособия по работе с пакетом можно получить как на сайте http://www.csa.ru/

zebra/my_scilab/, так и на сайте http://www.scilab.land.ru/.

С системой Scilab доступны следующие комплекты инструментов:

• 2-х и 3-х мерная графика, анимация;

• линейная алгебра, матрицы;

• полиномы и рациональные функции;

• моделирование: ОДУ и ДАУ решатель;

• классическое и робастное управление, LMI оптимизация;

• дифференциальная и недифференциальная оптимизация;

• параллельно Scilab, используемый PVM;

• интерфейс с компьютерной алгеброй: генерация кодов пакетом Maple для Scilab;

Перечислим основные составные части Scicos.

• Графический редактор: Scicos предоставляет иерархическому графическому редактору для строительства моделей динамических систем, используя блок-схемы. Многие предопределенные блоки также предоставлены в различных палитрах. Новые блоки могут быть определены пользователем в C, Fortran’ е или Scilab.

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

• Симулятор: симулятор Scicos использует таблицы планирования и другую информацию, предоставленную компилятором, чтобы управлять моделированиями. Симулятор имеет гибридную природу, при которой он должен иметь дело с дискретными и непрерывными системами времени, и событиями. Для непрерывного времени используется решатель однородных дифференциальных уравнений (ОДУ) LSODAR или решатель дифференциальных алгебраических уравнений (ДАУ) DASKR в зависимости от природы рассматриваемой непрерывной системы.

• Генератор объектного кода: Scicos может генерировать код C для того, чтобы «понять» поведение некоторых подсистем. Эти подсистемы не должны включать непрерывные во времени компоненты.

Scicos – независимое программное приложение для моделирования, но доступ к Scilab и его функциональным возможностям обеспечивает большую гибкость и расширяет диапазон возможностей моделирования.

Например, при обработке сигнала, легче использовать функции Scilab и написать маленькую программку, чем писать код для базовых функций обработки сигнала. Кроме того, Scilab воспринимает модель Scicos как функцию. Это удобно, когда нужно управлять пакетной работой Scicos.

Наличие доступа к функциям Scilab, при создании моделей очень важно.

1. Пользователь Scicos часто имеет необходимость использовать функции Scilab, например предназначенные для создания фильтров обработки сигналов и др.

2. Язык программирования Scilab может использоваться для пакетной обработки множества задач моделирования или обобщая – модели, разработанные Scicos, могут использоваться как функции в Scilab.

3. Графические возможности Scilab могут использоваться для последующей обработки результатов моделирования.

Но интеграция Scicos и Scilab идет дальше. Редактор Scicos полностью написан на языке Scilab и это обеспечивает много преимуществ:

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

гибкость в проектировании формы и изображений блоков и связей (стандартная графика Scilab);

простота разработки и отладки;

Scicos переносим на новую платформу, на которую переносим Scilab;

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

Есть и неудобства:

Scilab — интерпретируемый язык и для очень больших моделей, некоторые функции редактора могут быть медленными;

ограниченные возможности графического интерфейса.

Обычно, создание простой новой модели Scicos предусматривает выполнение следующих операций:

запуска Scicos с пустым окном;

открытия одной или более палитр;

Читать еще:  Когда твой папа - царь зверей

копирования нужных блоков из палитр в окно;

установки параметров блоков нужной величины;

соединения входов и выходов блоков;

компиляцию и запуск модели;

переименования и сохранения.

Вышеуказанное не включает использование более сложных операций, как например, создание суперблочных конструкций, создание новых базовых блоков, и т.п., а также косметических операций, как например, редактирование иконок, окрашивание или изменение размеров блоков в окне. Эти операции будут рассмотрены ниже.

Ниже, мы последовательно, по операциям выполним простой сеанс Scicos, в котором создадим модель и запустим ее.

Для запуска Scicos необходимо выбрать Scicos в меню Applications или набрать в основном окне Scilab:

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

Окно остается открытым в течение всего сеанса Scicos. Откроем палитру блоков. Для того, чтобы открыть ее, выберите Palette в меню Edit и найдите имя нужной палитры среди предлагаемых.

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

Перечень палитр и их состав с краткой характеристикой элементов дан ниже.

Моделирование систем в программной среде Scilab & Xcos 5.5.1. Часть 4

Имитационное моделирование в равной степени пригодно как для решения детерминированных задач, так и для исследования ситуаций, зависящих от случайных факторов. При создании моделей с помощью универсальных языков программирования аппаратный или программный датчик случайных чисел – единственный инструмент разработчика для моделирования всех видов случайных факторов: случайных событий, случайных величин и случайных процессов. У того, кто использует Xcos, арсенал значительно шире. В этой статье рассматривается процесс моделирования случайных событий с использованием таких блоков Xcos как RAND_m, RELATIONALOP, HYSTHERESIS, DLR, CSCOPE, CONST, CLOCK_c, AFFICH_m.

Моделирование случайных событий

Случайным называют событие, которое в результате испытания может наступить, а может и не наступить (в отличие от достоверного события, которое при реализации данного комплекса наступает все­гда, и невозможного события, которое при реализации данного ком­плекса условий не наступает никогда). Исчерпывающей характери­стикой случайного события является вероятность его наступления. Примерами случайных событий являются отказы в экономических системах, объемы выпускаемой продукции каждым предприятием в каждый день, котировки валют в обменных пунктах, состояние рын­ка ценных бумаг и биржевого дела и т.п. Моделирование случайного события заключается в определении («розыгрыше») факта его наступления.

Рис. 1. Моделирование случайных событий при помощи блоков RAND_m и RELATIONALOP

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

— генерируют случайное число;

— определяют попадание полученного числа в заданный диапазон значений;

— идентифицируют состояние события (наступило/не наступило).

В Xcos-модели эти действия можно реализовать при помощи следующих блоков:

— RAND_m (раздел библиотеки «Источники сигналов и воздействий»);

— CONST (раздел библиотеки «Источники сигналов и воздействий»);

— RELATIONALOP (раздел библиотеки «Общеупотребительные блоки»);

— CLOCK_c (раздел библиотеки «Обработка событий»);

— AFFICH_m (раздел библиотеки «Регистрирующие устройства»).

Приступим к созданию модели, для чего запустим программную среду Scilab, а затем в основном меню «Инструменты» выберем пункт «Визуальное моделирование Xcos». В результате чего будет открыто окно обозревателя разделов библиотеки Xcos и новый файл модели. Выберем из указанных разделов библиотеки Xcos нужные блоки и разместим их в рабочей области программы, а затем соединим блоки между собой так, как показано на рисунке 1. Логика работы разрабатываемой модели следующая. Блок RELATIONALOP выполняет сравнение полученных от двух источников чисел. При этом первое число генерируется при помощи блока RAND_m, а второе задается разработчиком самостоятельно при помощи блока CONST и является константой. Если сгенерированное случайное число меньше константы, то событие считается таким, что наступило (блок AFFICH_m отображает значение 1), в противном случае событие будет считаться не наступившим (блок AFFICH_m отображает значение 0).

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

— Datatype (1=real double 2=complex) – тип выходных данных: 1 – действительные числа, 2 – комплексные числа;

— flag – флаг, определяющий вид закона распределения: 0 – равномерное, 1 – нормальное (гауссовское);

— A – нижняя граница диапазона генерации случайных чисел;

— B – верхняя граница диапазона;

— SEED – числа, используемые для инициализации машинного генератора псевдослучайных чисел. Первое значение относится к действительной, а второе к мнимой части выходного сигнала.

Рис. 2. Окно настроек параметров блока: (а) RAND_m, (б) CONST, (в) RELATIONALOP, (г) AFFICH_m

Источником сигнала активации для блока RAND_m является блок CLOCK_c. Блок CONST формирует постоянную величину. Значение константы вводится в окне настроек параметров данного блока в поле Constant (рис. 2б). Оператор отношения указывается в поле Operator окна настроек параметров блока RELATIONALOP (рис. 2в). В операции отношения первым операндом является сигнал, подаваемый на первый (верхний) вход блока, а вторым операндом – сигнал, подаваемый на второй (нижний) вход. Выходным сигналом блока является 1, если результат вычисления операции отношения есть «истина» и 0, если результат – «ложь».

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

— Input Size – размерность матрицы входных значений;

— Font number – номер шрифта;

— Font size – размер шрифта;

— Color – цвет шрифта;

— Number of rational part digits – количество знаков после запятой;

— Block inherits (1) or not (0) – обрыв управляющей связи с блоком.

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

После того как блок-диаграмма собрана, а параметры всех ее блоков настроены, можно запускать моделирование. Однако, не забудьте предварительно сохранить модель на диск компьютера при помощи команды основного меню «Файл/Сохранить как». Теперь посредством нажатия кнопки «Запустить» на панели инструментов окна модели Xcos можно провести пробное моделирование, результат которого представлен на рисунке 3.

Рис. 3. Результат работы модели случайных событий

Появление случайного события можно интерпретировать еще одним способом: событие произошло, если некоторое связанное с ним число (признак) попало в заданный интервал. Этот вариант может быть реализован посредством использования блока HYSTHERESIS (раздел библиотеки «Системы с разрывами»). На рисунке 4 показана блок-диаграмма, при помощи которой выполняется регистрация моментов попадания случайного числа в заданный интервал. При этом подсчет числа попаданий выполняется при помощи блока DLR (раздел библиотеки «Системы с дискретным временем»), блок AFFICH_m выводит результат подсчета, а блок CSCOPE (раздел библиотеки «Регистрирующие устройства») отображает в графическом виде сгенерированные при помощи блока RAND_m случайным образом числа и попадание сгенерированных чисел в заданный интервал – при этом попадание числа соответствует в числовом виде 1, а промах – 0. Проверка на попадание сгенерированного числа в заданный интервал выполняется при помощи блока HYSTHERESIS. Этот интервал задается в окне настроек данного блока (рис. 5) в полях output when on (нижняя граница) и switch on at (верхняя граница). На рисунке 6 показана работа спроектированной модели в динамике. Логика работы нашей модели следующая. После запуска модели на выполнение производится генерация случайных чисел распределенных на интервале [0;9]. После чего выполняется проверка на попадание сгенерированных чисел в диапазон [0;3] и подсчет числа попаданий. Верхний график отображает попадания/промахи сгенерированных случайным образом чисел в заданный интервал. Последовательность сгенерированных чисел отображается на нижнем графике.

Читать еще:  Использование списков для ввода данных в Excel

Рис. 4. Моделирование случайных событий при помощи блоков HYSTHERESIS и DLR

Рис. 5. Окно настроек параметров блока HYSTHERESIS

Рис. 6. Работа спроектированной модели регистрации моментов попадания случайного числа в заданный интервал в динамике

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

Часть 1.Основы программирования в Scilab

Серия контента:

Этот контент является частью # из серии # статей: SCILAB

Этот контент является частью серии: SCILAB

Следите за выходом новых статей этой серии.

Обозначения

Во всем цикле при описании общего вида конструкций используются следующие обозначения:

  • код из консоли Scilab или для редактора скриптов Scipad записывается
  • жирным шрифтом указываются ключевые слова;
  • в угловых скобках указываются , которые вводятся или определяются пользователем. При этом в настоящем коде угловые скобки не вводятся.

Что такое Scilab

Scilab – это кроссплатформенная система компьютерной алгебры (СКА), обладающая сходным с Matlab синтаксисом встроенного языка. Разработка системы Scilab ведется сотрудниками французского Национального института информатики и автоматизации (INRIA – Institut National de Recherche en Informatique et Automatique) с 80-х годов прошлого века.

Изначально это был коммерческий проект под названием Blaise, а затем Basile. С 2003 года продукт получил новое имя Scilab и стал бесплатным. В настоящее время он распространяется по свободной лицензии CeCILL.

Сама система Scilab, как и Matlab, предназначена прежде всего для численных расчетов и работы с матрицами. Кроме того, она обладает развитыми средствами программирования (включая отладчик скриптов), так что ее в какой-то мере можно рассматривать как систему разработки высокотехнологичных приложений.

Для системы имеется достаточно большое число пакетов расширений, которые можно найти на официальном сайте в разделе Toolbox center. Однако чем больше будет хороших пакетов, тем более полезной станет система. Поэтому мы предлагаем вам ознакомиться с программированием в Scilab и способами создания для данной СКА пакетов расширений.

Редактор SciPad

В данном цикле статей мы не будем останавливаться на выполнении вычислений в Scilab, не будем также рассматривать встроенные функции и их параметры. Эту информацию можно найти в Интернете (см. раздел «Ресурсы»), а также в справочных материалах самой системы. Мы займемся изучением непосредственно программирования в Scilab.

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

Открыть редактор можно двумя способами:

  • подать в консоли Scilab команду scipad
  • выбрать в главном окне последовательно пункты меню Инструменты → Редактор.
Рисунок 1. Внешний вид редактора SciPad

В моей системе установлена Scilab 5.1, в которой присутствует редактор Scipad 7.18. Внешний вид редактора показан на рисунке 1. Как видно, интерфейс достаточно прост. Кратко рассмотрим пункты меню:

File – здесь находятся стандартные команды для работы с файлами: открыть (Open), закрыть (Close file), сохранить (Save) и т. д., а также команды импорта файлов функций из формата Matlab и формирования справочных материалов.

Edit – содержит стандартные для пункта меню Правка операции: копировать (Copy), вставить (Paste), вырезать (Cut), выделить все (Select All) и т. д.

Search – здесь находятся функции поиска по тексту.

Execute – содержит пункты, позволяющие передать содержимое редактора в среду Scilab на выполнение или выполнить только выделенную часть.

Debug – содержит команды для организации и выполнения отладки, такие как включение точек останова (breakpoint), добавление переменных в список наблюдения (watch), настройка запуска функции и т. д. К сожалению, в Scilab 5.1 данный режим недоступен вследствие наличия неустраненной ошибки.

Scheme – команды управления подсветкой синтаксиса.

Option – здесь находится довольно много пунктов, которые позволяют настроить внешний вид и поведение редактора от типа шрифта до горячих клавиш. Например, можно выбрать комбинацию клавиш, которая будет использоваться для вызова функции автодополнения кода.

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

Мы будем использовать этот редактор во всех уроках серии для создания новых функций и их тестирования.

Сохранение, загрузка и выполнение скриптов пользователя

Сохранить созданный скрипт можно при помощи пунктов меню File:

  • File > Save – сохранить скрипт;
  • File > Save as – сохранить скрипт под другим именем;
  • File > Save all – сохранить все открытые скрипты.

Для открытия файла скрипта необходимо выполнить File > Open, а затем перейти в каталог с необходимым файлом, выбрать его и нажать кнопку Open. Кроме того, в самом меню File имеется список последних открывавшихся файлов.

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

  • Load into Scilab – загрузить в Scilab текущий скрипт;
  • Load all into Scilab – загрузить в Scilab все открытые скрипты;
  • Evaluate selection – выполнить в консоли Scilab только выделенные строки.
Читать еще:  Восстановление данных

Стандартные конструкции встроенного языка

Встроенный язык Scilab – это язык структурного программирования не имеющий, в отличие от Matlab, средств для работы с объектами. Весь выполняемый код размещается в функциях. В одном файле может быть несколько функций. Однако при разработке пакетов расширений принято хранить каждую функцию в отдельном файле.

Переменные не описываются, а создаются путем присвоения им начального значения, например так:

Переменные в Scilab не имеют строгой типизации, т. е. если в переменной хранился текст, то можно на следующем шаге записать в нее число, а затем логическое значение. Scilab следит за соответствием типов только при вычислении значений выражений.

Вследствие Unix-корней системы, важен регистр букв в имени переменных, например:

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

Из приведенного примера видно, что в общем случае описание функции выглядит следующим образом:

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

Линейный процесс вычислений

Создадим стандартную, для начинающих программировать, функцию, которая будет приветствовать всех по имени:

Вот пример выполнения этой функции:

Теперь укажем в качестве входного параметра не одно значение, а массив значений:

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

В пользовательских скриптах можно использовать любые сторонние функции, входящие в состав самой системы Scilab или ее пакетов-расширений. При этом используются следующие знаки действий: + (сложение), – (вычитание), * (умножение), / (деление), ^ (возведение в степень), ‘ (транспонирование). Изначально эти операции служат для выполнения матричных действий по правилам матричной алгебры. Например:

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

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

То же самое относится и ко всем остальным действиям кроме операции транспонирования.

Операторы ветвления

Создадим теперь функцию для расчета логарифма числа по произвольному основанию:

Однако, как известно, логарифм числа a по основанию b имеет смысл только при выполнении условий: a,b > 0, a ≠ 1. Наложим дополнительное условие: входные параметры должны быть скалярными величинами, т. е. не векторами или матрицами. Для того чтобы функция не приводила к выводу сообщения об ошибке или краху системы, входные данные следует проверять на корректность. Сделать это можно при помощи условного оператора, общий вид которого показан ниже:

Запишем новый вид функции с проверкой входных данных на корректность:

В приведенном фрагменте кода используется функция or([массив условий]), возвращающая результат применения логической операции ИЛИ ко всем, перечисленным в квадратных скобках, условиям. Сходна с ней и функция and([список условий]), возвращающая результат применения логической функции И ко всем элементам списка условий. Однако можно использовать и стандартные операции C++, т. е. & – И, | – ИЛИ.

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

Иногда возникает необходимость выполнить те или иные действия в зависимости от значения некоторой переменной. Если тип этой переменной является перечислимым, т. е. переменная может принимать конечное количество значений, то можно воспользоваться оператором множественного выбора. Общий вид этого оператора показан ниже:

Иными словами, в заголовке оператора множественного выбора указывается переменная перечислимого типа, затем указывается один из вариантов (case) значения переменной и выполняется соответствующее данному значению действие. Следует отметить, что служебное слово then должно находиться на одной строке со словом case.

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

Циклы

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

Общий вид оператора счетного цикла следующий:

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

Рассмотрим описанную нами функцию edIzm. Если на вход ей будет подано не одно значение, а несколько, то, вне зависимости от количества элементов, будет выведен единственный и абсолютно неверный результат:

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

Кроме использования оператора цикла for, в коде функции появилась переменная i для нумерации элементов результата и переменная-результат заключена в квадратные скобки, чтобы показать, что в результате получится массив. Возможен и такой вариант начала функции:

Однако и на данном этапе функция еще не совершенна, поскольку в строку число переводится в том же виде, что и отображается, а это максимум девять позиций, и результат ‘Много’ мы никогда не получим. Поэтому лучше будет просто посчитать количество разрядов в числе. В этом нам поможет цикл while. Общий вид этого оператора:

Пока результат вычисления выражения равен True, цикл выполняется. Чтобы отделить выражение-условие от тела цикла, можно использовать ключевые слова then или do, но они должны находиться на той же строке, что и while. Кроме того, перед end можно вставить блок else, инструкции которого будут выполнены после того, как выражение-условие станет ложью (False).

Итак, вместо строк

можно вставить следующее:

Окончательную версию функции вы можете загрузить по ссылке в разделе «Загрузка».

Заключение

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

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector