Учебник Математические пакеты
.pdfСледует отметить, что тип одной и той же переменной может меняться в процессе сессии, так как данные в Scilab не имеют строгой типизации. Например, если в переменной хранился текст, то на следующем шаге выполнения в нее можно записать число, а затем и логическое значение. Scilab следит за соответствием типов только при вычислении значений выражений.
Арифметические операции и функции
Алгебраические операции (-, +, *, /, \, ^, ') в системе Scilab вы-
полняются как над скалярными элементами, так и над векторами и матрицами. При этом операнды могут быть, как действительными, так и комплексными.
На рис. 1.2.2-2 приведены примеры использования алгебраических операций и функций над скалярами, векторами и матрицами.
--> // Алгебраические операции над векторами
--> V1 = [1 4 6 |
8]; V2 = [2 3 4 7]; // Создание векторов V1 и V2 |
--> |
|
--> V = V1 + V2 |
// Вычисление суммы векторов |
V=
3.7. 10. 15.
-->
--> U = V1^2 |
// Возведение в квадрат вектора V1 |
U=
1.16. 36. 64.
--> --> // Алгебраические операции над матрицами
--> mA = [1 2 3; -1 2 0; 3 2 4] mA =
|
1. |
2. |
3. |
|
-1. |
2. |
0. |
|
|
|
3. |
2. |
4. |
|
--> |
|
|
|
|
--> mB = [1 2; -2 1; 0 1]; |
|
|||
--> mC = mA * mB |
// Алгебраическое произведения матриц |
|||
mC |
= |
|
|
|
-3. |
7. |
|
|
|
-5. |
0. |
|
|
|
-1. |
12. |
|
|
|
--> |
|
|
|
|
--> mP = mA^2 |
|
// Возведение матрицы в квадрат |
||
mP |
= |
|
|
|
|
8. |
12. |
15. |
|
-3. |
2. |
-3. |
|
13.18. 25.
--> |
d = det(mP) |
// Определитель квадратной матрицы |
d |
= |
|
|
64. |
|
Рис.1.2.2-2 Примеры алгебраических операций и функций над векторами и матрицами
31
Список алгебраических операций над векторами и матрицами, а также функции det и trace, позволяющие вычислить определитель квадратной матрицы и след матрицы, приведены в табл.1.2.2-5, причем совместимость операндов в приведенных операциях определяется правилами соответствующих алгебраических операций. Матричные алгебраические операции следуют правилам линейной алгебры, а требуемый размер и форма операндов относительно друг друга, зависит от конкретной операции.
Алгебраические матричные операции и функции. Таблица 1.2.2-5
Операции |
Назначение |
|
Описания |
|
|
и функции |
|
|
|
|
|
+ |
Сложение |
A + B складывает матрицы A и B. |
|
||
|
|
|
|
|
|
+ |
Унарный плюс |
+A возвращает A. |
|
|
|
|
|
|
|
||
- |
Вычитание |
A - B вычитает B из A. |
|
||
|
|
|
|
|
|
- |
Унарный минус |
-A меняет знакA. |
|
|
|
|
|
|
|
||
* |
Матричное |
C = A * B – алгебраическое произведение мат- |
|
||
|
умножение |
риц A и B, при условии, что количество столб- |
|
||
|
|
цов A равно числу строк B. |
|
||
^ |
Матричное |
A^B – возведение матрицы A в степень B, если B яв- |
|
||
|
возведение в степень |
ляется скаляром. Для других значений B вычисле- |
|
||
|
|
ния включают собственные значения и собственные |
|
||
|
|
вектора. |
|
|
|
/ |
Деление матриц |
X = B / A – решение уравнения X * A = B, при |
|
||
|
слева направо |
условии, что матрицы A и B имеют одинаковое коли- |
|
||
|
|
чество столбцов. С точки зрения операций деления |
|
||
|
|
слева и транспонирования |
|
||
|
|
B / A = (A' \ B')'. |
|
||
\ |
Обратное (справа |
Х = A \ B – решение уравнения A * X = B, при |
|
||
|
налево) деление |
условии, что матрицы A и B имеют одинаковое коли- |
|
||
|
матриц |
чество строк. |
|
|
|
' |
Транспонирование |
B = A' – комплексно-сопряженное транспонирова- |
|
||
|
матрицы |
ния матрицы A. Для комплексных матриц эта опера- |
|
||
|
|
ция не предполагает сопряжения. |
|
||
d = det(mA) |
Вычисление |
--> A = [3 2; 4 3]; |
|
||
|
определителя |
--> det(A) |
//Определитель матрицы |
|
|
|
матрицы |
ans = 1 |
|
|
|
t = trace(A) |
Вычисление следа |
--> A = [1 2 3; 4 -2 1; 0 3 -1] |
|
||
|
матрицы, то есть |
--> trace(A) |
//СледматрицыА |
|
|
|
суммы элементов |
ans = |
|
|
|
|
главной диагонали |
-2 |
|
|
|
|
|
|
|
|
|
|
|
--> // то же что и |
|
||
|
|
--> sum(diag(A)) |
|
|
|
|
|
ans = |
|
|
|
|
|
-2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
32 |
|
|
|
|
|
|
|
Рассмотрим пример решения матричного уравнения вида А∙Х=В или Х∙А=В, где Х – неизвестная матрица. Если умножить матричное уравнение на матрицу обратную к А, то оно примет вид: А-1А∙Х=А-1В или Х∙А∙А-1=В∙А-1. Так как А-1А=А∙А-1=Е, а Е∙Х=Х∙Е=Х, то неизвестную матрицу Х можно вычислить так: Х=А-1 В или Х=В∙А-1. Понятно, что матричное уравнение имеет единственное решение если А и В – квадратные матрицы n-го порядка, а определитель матрицы А не равен нулю. Решив матричные уравнения А∙Х=В и Х∙A=B, выполним проверку. Решения матричных уравнений в Scilab показаны на рис. 1.2.2-3.
--> // Примеры решения матричных уравнений
--> A = [3 2; 4 3];
--> B = [1 7; 3 5]; -->
--> // Решение матричного уравнения A∙X=B
--> |
X = A \ B |
// Первый способ |
|
X |
= |
|
|
-3. |
11. |
|
5.-13.
-->
--> X = inv(A) * B // Второй способ, использующий обратную матрицу
X =
-3. 11.
5.-13.
--> |
|
|
--> А * X - B |
// Проверка |
|
ans |
= |
|
0. |
0. |
|
0.0.
-->
--> // Решение матричного уравнения X∙A=B
--> X = B / A |
// Первый способ |
||
X |
= |
|
|
|
-25. |
19. |
|
|
-11. |
9. |
|
--> |
|
|
|
--> X = B * inv(A) |
// Второй способ, использующий обратную матрицу |
||
X |
= |
|
|
|
-25. |
19. |
|
|
-11. |
9. |
|
--> |
|
|
|
--> X * A – B |
// Проверка |
||
ans |
= |
|
0.0.
0.0.
Рис. 1.2.2-3 Решение матричных уравнений
33
Поэлементные арифметические операции в системе Scilab, операции
с точкой (-, +, .*, ./, .\, .^, .') – это операции между элементами массивов.
Они осуществляют вычисления, как над скалярными элементами, так и над элементами одномерных и двумерных массивов, при этом используются как действительные, так и комплексные операнды.
Операции с точкой между элементами массивов отличаются от алгебраических матричных операций концептуально, хотя их операнды в оперативной памяти компьютера структурно представлены одинаково. Поэтому для упрощения изложения, в дальнейшем будет использоваться термины вектор и матрица для любых операций в системе Scilab, а концептуальный (содержательный) смысл, использованных данных будет зависеть от решаемой задачи.
Отметим, что поэлементные операции, аргументами которых являются вектора и матрицы, выполняются поэлементно только над матрицами, имеющими одинаковые размерности и размеры по каждому измерению.
Примеры некоторых операций над скалярными данными приведены на рис. 1.2.2-4, а над элементами матриц на рис. 1.2.2-5.
--> // Арифметические операции над скалярными данными
-->
--> a = 2.3; b = -14.654;
--> c = a .* b // Формат вывода результата по умолчанию c =
-33.7042
--> r = a ./ b r =
-0.1569537 -->
--> format(4) // Формат вывода результата с округлением
--> c = a * b c =
-34.
--> r1 = a / b r1 =
-0.2 -->
--> format(16) // Формат вывода результата с двойной точностью
--> c = a .* b c =
-33.7042
--> r1 = a / b r1 =
-0.1569537327692
Рис.1.2.2-4 Примеры арифметических поэлементных операций над скалярами данными (матрицами размерностью 1х1)
Список используемых арифметических операций над элементами матриц приведен в табл.1.2.2-6.
34
Арифметические поэлементные операции над матрицами. Таблица 1.2.2-6
Операция |
Назначение |
Описание |
+ |
Сложение |
A + B поэлементное сложение A и B |
+ |
Унарный плюс |
+A возвращает A |
- |
Вычитание |
A - B поэлементное вычитание B из A |
- |
Унарный минус |
-A поэлементное присвоение в A |
.* |
Поэлементное |
C = A .* B поэлементное умножение A и B |
|
умножение |
|
.^ |
Поэлементное |
A .^ B поэлементное возведение A в степень B |
|
возведение в степень |
|
.\ |
Поэлементное обратное |
X = A .\ B – поэлементное обратное деле- |
|
деление массивов |
ние A и B |
./ |
Поэлементное деление |
X = B ./ A поэлементное деление A и B. |
.' |
Транспонирование мас- |
A .' – поэлементная операция транспонирова- |
|
сива |
ния A |
--> // Примеры арифметических поэлементных операций матрицами
--> --> // Арифметические поэлементные операции над векторами
--> vX = [1 4 6] vX =
1.4. 6.
--> z = (-vX.^2 + vX ./ 4) .\ 4 z =
-5.333333333 -0.266666667 -0.115942029 --> vX1 = -vX, vX1 .* vX
vX1 =
1. -4. -6. ans =
-1. -16. -36. -->
--> // Арифметические поэлементные операции над элементами матриц
--> M1 = [1 2 3; 3 2 1]; --> M2 = 3 .* M1
M2 =
3.6. 9.
9.6. 3.
--> M3 = M2 + M1.^2 M3 =
4.10. 18.
18.10. 4.
Рис.1.2.2-5 Примеры арифметических поэлементных операций над векторами и матрицами
35
Если при выполнении поэлементных операций требования к размеру или размерности матрицы не выполняются, то матрицы можно преобразовать к необходимому размеру с помощью специальных функций. Например, функция matrix позволяет изменить размеры вектора или матрицы, а функция 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;
36
--> |
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) |
Возвращает матрицу целых чи- |
--> fix([1.3 |
1.5 1.7 |
2.5 3.7]) |
|
||
|
сел, состоящую из элементов, |
ans |
= |
|
|
|
|
|
округлённых в сторону нуля |
1. 1. |
1. |
2. |
3. |
|
|
|
y= sign(x) .* floor(abs(x)) (то же са- |
--> fix([-1.3 -1.5 -1.7 -2.5 -3.7]) |
|||||
|
мое, что и int). |
ans |
= |
|
|
|
|
|
|
-1. -1. -1. |
-2. |
-3. |
|
||
floor |
Возвращает матрицу целых чи- |
--> floor([1.3 1.5 1.7 2.5 3.7]) |
|||||
|
сел, состоящую из элементов, |
ans |
= |
|
|
|
|
|
округлённых в сторону -∞ |
1. 1. |
1. |
2. |
3. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
|
|
|
|
|
|
|
|
|
--> |
floor([-1.3 -1.5 -1.7 -2.5 -3.7]) |
||||||
|
|
|
ans |
|
= |
|
|
|
|
|
|
-2. -2. -2. -3. -4. |
|
||||||
int(A) |
Возвращает матрицу целых чи- |
--> |
int([1.3 1.5 1.7 2.5 3.7]) |
||||||
|
сел, состоящую из элементов, |
|
ans |
|
= |
|
|
|
|
|
округлённых в сторону нуля |
1. |
1. |
1. |
2. |
3. |
|
||
|
То же самое, что и fix. |
--> |
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() |
Проверяется значения на беско- |
--> |
realmax + .0001E+308 |
||||||
|
нечность inf |
|
ans = |
|
|
|
|
|
|
|
|
|
Inf |
|
|
|
|
|
|
|
|
--> |
-realmax - .0001E+308 |
||||||
|
|
|
ans |
= |
|
|
|
|
|
|
|
|
-Inf |
|
|
|
|
|
|
isnan() |
Проверяется значения |
|
x = |
[1 2 %nan 3 %nan 4] |
|
||||
|
на nan |
|
k = |
find(~isnan(x)) |
|
|
|||
|
|
|
y = |
x(k) |
|
|
|
|
Здесь необходимо сделать несколько замечаний по поводу преобразования типов в операциях с различными типами аргументов.
Когда бинарная арифметическая операция (например, умножение) применяется между двумя различными операндами различных, но совместных типов, обычно тип одного из двух неявно преобразуется, а другой операнд устанавливает свой тип результату.
Так, результат арифметических операций между операндами целочисленного и вещественного типа с плавающей точкой двойной точности всегда преобразуются к целочисленному типу данных, и, когда это необходимо, по умолчанию, округляется, в соответствии с алгоритмом округления. То есть, он округляется до ближайшего целого числа.
38
Приоритет выполнения математических операций
Приоритет выполнения математических операций в 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 =
39
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.
40