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

Математична система Scilab

IT Novella

Выполнение команды осуществляется с помощью нажатия клавиши Enter. Например, для вычисления 2+2 необходимо набрать 2+2 и нажать Enter.

Переменная ans (от англ. answer — ответ) содержит результат операции. Если в конце команды стоит символ «;», то результат операции вычисляется, но не выводится на экран. Это удобно при вводе нескольких команд.

Длинные команды можно разделить на несколько строк. Для этого в конце строки нужно поставить две или более точки.

Для создания комментариев можно использовать команду //. Все, что написано справа от символов // рассматривается как текст.

Редактирование команд осуществляется с помощью клавиш управления курсором , клавиш Delete (удаление символа, стоящего после курсора),

Основы работы в Scilab

Scilab — свободная платформа для численных расчетов. Поддерживается консорциумом Scilab.

Доступны версии для ОС Linux, Windows, MacOS X.

Программа включает перевод интерфейса на различные языки (в том числе русский).

На момент написания статьи на официальном сайте доступна версия Scilab 6.0.2

Главное окно программы имеет вид:

Основной режим работы в Scilab — выполнение команд в консоли. Кроме этого в Scilab интегрирован текстовый редактор Scinotes,

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

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

С помощью механизма ATOMS пользователь может скачивать и устанавливать дополнительные модули.

Рассмотрим выполнение простейших операций в консоли Scilab.

Работа в Scilab производится с помощью команд, набираемых после приглашения

Выполнение команды осуществляется с помощью нажатия клавиши Enter. Например, для вычисления 2+2 необходимо набрать 2+2 и нажать Enter.

Переменная ans (от англ. answer — ответ) содержит результат операции. Если в конце команды стоит символ «;», то результат операции вычисляется, но не выводится на экран. Это удобно при вводе нескольких команд.

Длинные команды можно разделить на несколько строк. Для этого в конце строки нужно поставить две или более точки.

Для создания комментариев можно использовать команду //. Все, что написано справа от символов // рассматривается как текст.

Редактирование команд осуществляется с помощью клавиш управления курсором , клавиш Delete (удаление символа, стоящего после курсора),

Базовые вычисления в Scilab

Краткие теоретические сведения

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

Данные – константы и переменные – записываются по общепринятым правилам. Они делятся на пользовательские и системные.

Основные системные переменные и константы, применяемые в Scilab:

%i или %j – мнимая единица (корень квадратный из –1);

%pi – число p=3,1415926…;

%inf – значение машинной бесконечности;

%e – число e=2.7182818;

ans – результат выполнения последней операции.

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

5 -45 — целые константы.

2.301 -897.999 — вещественные константы.

125.35е-25 17.06e-12 — вещественные константы с указанием мантиссы и порядка числа.

Символьная константа представляет собой набор символов, заключенных в двойные кавычки. Например: “Курить вредно!”, “Задайте элементы массива”.

Символ // используется для ввода комментариев к вычислениям.

L=2*pi*r // Вычисление длины окружности

//Программа табулирования функции

Имя переменной (идентификатор) должно соответствовать следующим требованиям:

— должно начинаться с буквы,

— может содержать буквы латинского алфавита, цифры и символ подчеркивания,

— Scilab различает большие и малые буквы.

Примеры допустимых имен переменных:

V1, sp, prim4, sum, rez1.

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

Ниже приведен перечень основных арифметических операций.

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

Ниже приводятся некоторые часто употребляемые математические функции.

Приведем примеры записи арифметических выражений в системе Scilab.

Одним из основных операторов в Scilab является оператор присваивания. В программе этот оператор выполняет следующие функции — присваивает переменной, стоящей слева от знака «=» значение выражения, стоящего справа.

Читать еще:  Рефакторинга много не бывает

Общий вид оператора присваивания:

Имя_переменной = Выражение

В качестве параметра Имя_переменной может выступать имя простой переменной, структурированной переменной (вектора, матрицы), имя функции. В качестве параметра Выражениеприменяется арифметическое, логическое или строковое выражение.

Ниже приведен пример правильной записи оператора присваивания.

A = cos(x)+c-d^2*p^2+4.92

В SciLab в качестве оператора ввода используется функция input, которую, в силу ее значимости при программировании, принято называть оператором.

Она имеет следующий общий вид:

ИМЯ = input(Символьная константа)

Здесь ИМЯ –это имя простой переменной, Символьная константа –любой набор символов, заключенный в двойные кавычки. Символьная константа, как правило, разъясняет смысловое назначение вводимой переменной. Например:

S=input(“Задайте площадь”)

A=input(“Задайте значение А=”)

Оператор выполняется следующим образом: в командном окне выводится набор символов, стоящий в скобках после input (символьная константа), выполнение программы приостанавливается, и компьютер переходит в режим ожидания; пользователь вводит константу и введенная константа помещается в оперативной памяти в переменную, стоящую слева в операторе input.

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

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

Disp( Выражение )

Здесь Выражение –это арифметическое, логическое или символьное выражение, частным случаем которого являются константы или переменные любого типа.

Каждый новый оператор disp выполняет вывод с новой строки командного окна, например (переменным a, b, k, d уже присвоены числовые значения):

Практическая часть

Задание 1. Вычисление арифметических выражений с присваиванием

Постановка задачи. Присвоить значения переменным и вычислить значение арифметического выражения с использованием оператора присваивания.

Последовательность выполнения задания такова.

Шаг 1. Создать программу и записать ее в редакторе SciNotes.

Шаг 2. Записать программу в файл на диск с именем, содержащим тип .sce, например, zadanie1.sce.

Шаг 3.Запустить программу на выполнение.

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

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

Индивидуальные задания приведены в таблице 2.1.

Часть 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 на выполнение.

Читать еще:  Blazers что это за программа?

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

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

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

Читать еще:  Пример использования метода replace в Java. Как заменить символ в строке?

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

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

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

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

Однако, как известно, логарифм числа 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