scilab учебник. Учебник Scilab. Учебник Для студентов по дисциплин Базовые средства математических пакетов
Скачать 5.73 Mb.
|
позволяет изменить размеры вектора или матрицы, а функция resize_matrix выполняет обрезку или расширение матрицы. В Scilab имеются также функции, которые позволяют проверить число измерений ( ndims) и раз- меры по каждому измерению аргументов ( size ). Описание перечисленных выше функций будет рассмотрено в п. 1.3.2. Поэлементные математические функции, реализованные в Scilab, ис- пользуются при проведении различного вида математических расчетов. Спи- сок наиболее часто используемых в математических расчетах функций, при- веден в табл. 1.2.2-7. Наиболее часто используемые математические функции. Таблица 1.2.2-7 Тригонометрические функции (аргумент задается в радианах) sin, cos, tan, cot Синус, косинус, тангенс и котангенс sec, csc Секанс, косеканс asin,acos,atan, atan2, acot Арксинус, арккосинус, арктангенс и арккотангенс asec, acsc Арксеканс, арккосеканс Алгебраические и арифметические функции abs Модуль exp Экспоненциальная функция log, log2, log10 Логарифм натуральный, по основанию 2 и 10 sqrt Квадратный корень fix Целая часть числа floor Округление до ближайшего целого значения, которое не превышает аргумент mod(x, y), rem(x, y) Остаток от деления x на y. Целая часть определяется со- ответственно функциями floor и fix sign Знак числа factorial Вычисление факториала числа Гиперболические функции sinh, cosh, tanh, coth Гиперболические синус, косинус, тангенс и котангенс sech, csch Гиперболические секанс и косеканс asinh, acosh, atanh, acoth Гиперболические арксинус, арккосинус, арктангенс и арккотангенс; Примеры обращения к некоторым из библиотечных математических функций показаны на рис.1.2.2-6. --> // Примеры использования встроенных математических функций Scilab --> x = 10; 37 --> d = sqrt(x) // Квадратный корень d = 3.16227766 --> --> f = abs(-10.65) // Абсолютная величина числа-10.65 f = 10.65 --> --> sin(x) // Синус(10) ans = -0.544021111 --> --> factorial(3) // Факториал 3 ans = 6. --> --> hh = sin(10 + 10) .* 10.65 ./ (1 – 3.16227766 * %i) hh = 0.8838969928355 + 2.7951277141849i Рис. 1.2.2-6. Примеры использования библиотечных функций Scilab Преобразование данных к арифметическому типу Поскольку во всех языках программирования, в том числе и в Scilab, ос- новные арифметические операции должны иметь аргументы одного и того же типа, то необходимо осуществлять преобразование аргументов к одному типу. Например, в случае если аргументы арифметических операций разного арифметического типа, вещественные и целые. Кроме того, в Scilab могут ис- пользоваться типы данных, отличных от арифметических типов, например, ло- гические, строковые и другие. Преобразования одних типов данных к другим допустимым типам числовых данных можно осуществить явным образом с по- мощью функций, список которых приведен в табл. 1.2.2-8. Преобразование данных числового типа. Таблица 1.2.2-8 Ф Функции Назначение Примеры ceil(A) Возвращает матрицу целых чи- сел, состоящую из элементов, округлённых в сторону +∞ --> ceil([1.3 1.5 1.7 2.5 3.7]) ans = 2. 2. 2. 3. 4. --> ceil([-1.3 -1.5 -1.7 -2.5 -3.7]) ans = -1. -1. -1. -2. -3. fix(A) Возвращает матрицу целых чи- сел, состоящую из элементов, округлённых в сторону нуля y= sign(x) .* floor(abs(x)) (то же са- мое, что и int). --> fix([1.3 1.5 1.7 2.5 3.7]) ans = 1. 1. 1. 2. 3. --> fix([-1.3 -1.5 -1.7 -2.5 -3.7]) ans = -1. -1. -1. -2. -3. floor Возвращает матрицу целых чи- сел, состоящую из элементов, округлённых в сторону -∞ --> floor([1.3 1.5 1.7 2.5 3.7]) ans = 1. 1. 1. 2. 3. 38 --> floor([-1.3 -1.5 -1.7 -2.5 -3.7]) ans = -2. -2. -2. -3. -4. int(A) Возвращает матрицу целых чи- сел, состоящую из элементов, округлённых в сторону нуля То же самое, что и fix. --> int([1.3 1.5 1.7 2.5 3.7]) ans = 1. 1. 1. 2. 3. --> int([-1.3 -1.5 -1.7 -2.5 -3.7]) ans = -1. -1. -1. -2. -3. round Округляет до ближайшего целого по правилам математики --> round([1.3 1.5 1.7 2.5 3.7]) ans = 1. 2. 2. 3. 4. --> round([-1.3 -1.5 -1.7 -2.5 -3.7]) ans = -1. -2. -2. -3. -4. ieee() Устанавливает режим предупре- ждающий о исключительных си- туациях при операциях с плаваю- щей точкой --> ieee(1); 1/0 Предупреждение : деление на нуль... ans = Inf --> ieee(2); 1/0, log(0) ans = Inf ans = -Inf isinf() Проверяется значения на беско- нечность inf --> realmax + .0001E+308 ans = Inf --> -realmax - .0001E+308 ans = -Inf isnan() Проверяется значения на nan x = [1 2 %nan 3 %nan 4] k = find(isnan(x)) y = x(k) Здесь необходимо сделать несколько замечаний по поводу преобразова- ния типов в операциях с различными типами аргументов. Когда бинарная арифметическая операция (например, умножение) при- меняется между двумя различными операндами различных, но совместных ти- пов, обычно тип одного из двух неявно преобразуется, а другой операнд уста- навливает свой тип результату. Так, результат арифметических операций между операндами целочис- ленного и вещественного типа с плавающей точкой двойной точности всегда преобразуются к целочисленному типу данных, и, когда это необходимо, по умолчанию, округляется, в соответствии с алгоритмом округления. То есть, он округляется до ближайшего целого числа. 39 Приоритет выполнения математических операций Приоритет выполнения математических операций в Scilab аналоги- чен приоритету, принятому в языках программирования высокого уровня: вы- числение функции, возведение в степень, умножение и деление, сложение и вычитание. Для изменения приоритета в математических выражениях, как обычно, используются круглые скобки. Замечания по использованию данных типа double Как известно, система Scilab по умолчанию осуществляет все вычисле- ния с максимальной возможной точностью – с вещественным типом данных с двойной точностью ( double ). Поэтому необходимо, во-первых, понимать, как представлены числовые данные этого типа в памяти компьютера, а во-вторых, особенности операций с ними. В оперативной памяти компьютера Scilab представляет данные типа double в соответствии с принятыми стандартами. Любое числовое значение, хранящееся как double , занимает 64 бита ( 8 байтов) и состоит из знака числа, мантиссы и порядка. При этом имеет допустимый диапазон отрицательных числовых значений от - 1.80D+308 до - 2.205D+308 , а положительных – от 2.23D-308 до 1.80D+308. Переменную типа double в Scilab можно создать с помощью простого оператора присваивания, например, x=34.723 Хотя характеристики представления созданных значений из набора ве- щественных чисел с плавающей точкой двойной точности известны, однако их можно уточнить, воспользовавшись функцией number_properties, которая возвращает значение параметра в зависимости от заданного запроса (рис. 1.2.2-7) -->// Примеры использования функции number_properties --> --> b = number_properties("radix") // Основание b = 2. --> -->eps = number_properties("eps") // Относительная максимальная погрешность eps = 1.110D-16 --> --> ps = number_properties("huge") // Максимальное допустимое положительное -->// значение ps = 1.80D+308 --> --> ps = number_properties("tiny") // Минимально допустимое положительное -->// значение ps = 40 2.23D-308 Рис.1.2.2-7 Примеры использования функции number_properties В табл. 1.2.2-8 такжепредставлены функции, связанные с представле- нием результатов вычислений или выводом значений в командное окно, а также с представлением исключительных ситуаций 1.2.3. Логические выражения в Scilab Логические выражения в Scilab строятся на основе математических выражений, логических выражений, логических констант ( %T, %F ), операций отношения и соответствующих им функций, логических операций и функций, а также круглых скобок. Результатом логического выражения является значе- ние T ( True ), если выражение «Истинно», и значение F ( False ) в противном случае – выражение «Ложно». Операции отношения и соответствующие им функции служат для поэлементного сравнения скалярных величин, векторов и матриц. Список опе- раций отношения приведен в табл. 1.2.3-1. Операции отношений. Таблица 1.2.3-1 Операция Описание Примеры * == Равно --> x == y ans = T T F --> a == b ans = F = Не равно --> x = y ans = F F T --> a = b ans = T < Меньше чем --> x < y ans = F F T > Больше чем -->x > y ans = F F F <= Меньше или равно --> x <= y ans = T T T >= Больше или равно --> x >= y ans = T T F * Примеры в этой таблице предполагают, что x = [2, 3, 4], y = [2, 3, 5], a = 3 +2 * i, b = 3 + 4 * i. 41 Операции отношения выполняют поэлементное сравнение значений векторов или матриц одинакового размера и возвращают значение равное T , если имеет место пол- ное совпадение, и значение F в противном случае. Операции <, <=, >, >= при комплексных операндах используются для сравнения только действительных частей операндов – мнимые отбрасываются. В то же время операции == и = ведут сравнения с учетом как действительной, так и мнимой части операндов. Логические выражения обычно используются в операторах if, for, while, switch и служат для изменения последовательности выполнения опера- торов программы Scilab, а также при логической индексации матриц. При вычислении выражений операции отношения имеют более низкий приоритет, чем арифметические операции, но более высокий, чем логические. На рис. 1.2.3-1 приведены примеры вычисления логических выражений. --> // Примеры логических выражений --> --> // Пример1. Логическое умножение векторов --> vF = [%T %F %F]; vK = [%T %T %F]; --> vF & vK ans = T F F --> --> // Пример2. Логическое сложение матриц --> mA = [%F %T %F; %F %T %T; %T %T %F]; --> mB = [%T%T %F; %T %T %T;%T %T %F]; --> IL = mA | mB IL = T T F T T T T T F --> --> // Пример3. Умножение элементов вектора на константу --> vF = [%T %F %F]; --> vF .* %F ans = 0. 0. 0. Рис. 1.2.3-1 Примеры логических выражений Обратите внимание, что операнды операций отношения и логических операций должны иметь совместимые размеры. Список логических операций и функций приведен в табл. 1.2.3-2. 42 Логические операции. Таблица 1.2.3-2 Операция Описание Примеры * b = or(A) Логическое сложение (операция ИЛИ) над элементами вектора или матрицы Где b - логический скаляр, если or(A) исполь- зуется без каких-либо вариантов "r", "c", n (по умолчанию). bравно %F, если все элементы A имеют значе- ние %F или ноль, включая %nan. b равно %Т, в противном случае (по крайней мере один элемент A имеют значение %T или ненулевой. --> or([]) ans = F --> or(0) ans = F --> or(0+%i * 0) ans = F --> or(%nan) ans = F --> or([T, F T]) ans = T --> or([1 0 1; 0 4 3]) ans = T B = or(A, 'r') B = or(A, 1) B = or(A, 'c') B = or(A, 2) Логическое сложение (операция ИЛИ) над элементами столбцов или строк матрицы Где B - логический вектор. Если n = 1 или| "r": or – возвращает вектор- строку логических значений B(j) = or(A(:, j)). Если n = 2 или " c": or возвращает вектор- столбец логических значений B(i) = or(A(i, :)) --> B = or(A, 1) B = T T F --> B = or(A, 2) B = T T T L = A | B Поэлементное логическое сложение (опера- ция ИЛИ) над элементами векторов или матриц Где A и B вектора или матрицы с элементами целого или логического типа, которые должны иметь одинаковые размеры. Если A или B является скаляром, она заранее расширяется до размера другого операнда. L – вектор или матрица логических значений --> x = [1 0 0]; --> y = [1 1 1]; --> L = x | y L = T T T --> y = [1 0 1]; --> L = x | y L = T F T b = and(A) Логическое умножение (операция И) над элементами вектора или матрицы Где b - логический скаляр, если and(A) используется без каких-либо вариан- тов "r", "c", n (по умолчанию). B равно %F, если хотя бы один из элементов A имеют значение %F или ноль. -->and([]) ans = T --> and(0) ans = F --> and(0 + 0*%i) 43 B равно %Т, в противном случае (все элементы A имеют значение %T, ненулевое или %nan. Где A вектор или матрица булевых, целочис- ленных действительных или комплексных значений ans = F --> and(%nan) ans = T --> and([1, 0 1]) ans = F --> and([1 0 1; 0 4 3]) ans = F B = and (A, 'r') B = and (A, 1) B = and (A, 'c') B = and (A, 2) Логическое умножение (операция И) над элементами столбцов или строк матрицы Где B – вектор логических значений. and возвращает вектор-строку логических значений b(j) = and(A(:, j)); and возвращает вектор-столбец логических значений b(i) = and(A(i, :)) ; --> B = and (A, 1) B = T F F --> B = and (A, 2) B = T F F L = A & B Логическое умножение (операция И) над векторами или матрицами Где A и B вектора или матрицы с элементами целого или логического типа, которые должны иметь одинаковые размеры. Если A или B является скаляром, она заранее расширяется до размера другого операнда. L – вектор или матрица логических значений --> x = [1 0 0]; --> y = [1 1 1]; --> L = x & y L = T F F --> y = [1 0 1]; --> L = x & y L = T F F A Логическое отрицание (операция НЕ) над элементами матрицы логических значений --> x = [1 0 0]; --> x ans = T F F --> y = [1 1 1]; --> oy = y oy = T F F *В примерах используются: вектора x = [1 0 0] и y = [1 1 1]; матрицы А = [5 7 0; 3 2 4; 5 0 0] и B = [6 6 0; 1 3 5; -1 0 0]. 44 1.2.4. Строки символов и форматирование данных Строки символов Строковая константа представляется в Scilab заключением символов в одинарные или двойные кавычки, а скалярная переменная (матрица 1×1 ) при- своением этой переменной значения символьной константы (рис.1.2.4-1) --> // Создание данных строкового типа --> --> // Создание символьных переменных --> a = 'Система ', b = "Scilab" a = Система b = Scilab --> --> // Создание символьной матрицы --> mSt = ['Мы ' 'изучаем' 'Scilab' ' 6'] mSt = !Мы изучаем Scilab6! --> size(mSt) ans = 1. 4. --> length(mSt) ans = 3. 7. 7. 2. Рис. 1.2.4-1 Создание данных строкового типа Для создания матрицы строк используется тот же синтаксис, что и для матриц арифметического типа. В примере, приведенном на рис.1.2.4-1, со- здана матрица строк размером 1×4 'Мы изучаем Scilab6' . Для того, чтобы вы- числить ее размер, использована, как для обычных матриц, функция size, а для вычисления числа символов в каждом элементе матрицы – функция length В оперативной памяти строка представляет собой последовательность кодов символов, из которых она образуется. Однако, после создания строки, она представляется для пользователя единым целым, поэтому без специаль- ных функций при работе со строками невозможно использовать отдельные символы строки. Следует помнить, что строки поддерживают лишь операцию |