Алгебраическиеоперации (-, +, *, /, \, ^, ') в системе Scilab выполняются как над скалярными элементами, так и над векторами и матрицами. При этом операнды могут быть, как действительными, так и комплексными.
На рис. 1.2.2-2 приведены примеры использования алгебраических операций и функций над скалярами, векторами и матрицами.
--> // Алгебраические операции над векторами --> V1 = [1 4 6 8]; V2 = [2 3 4 7]; // Создание векторов V 1 и V 2 --> --> 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 Примеры алгебраических операций и функций
над векторами и матрицами
Список алгебраических операций над векторами и матрицами, а также функции detи trace, позволяющие вычислить определитель квадратной матрицы и след матрицы, приведены в Приложении 1.2, табл.1.2.2-5,причем совместимость операндов в приведенных операциях определяется правилами соответствующих алгебраических операций. Матричные алгебраические операции следуют правилам линейной алгебры, а требуемый размер и форма операндов относительно друг друга, зависит от конкретной операции.
Рассмотрим пример решения матричного уравнения вида А∙Х=В или
Х∙А=В, где Х– неизвестная матрица. Если умножить матричное уравнение на матрицу обратную к А, то оно примет вид: А-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 Решение матричных уравнений
Поэлементные арифметические операции в системе 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, табл.1.2.2-6.
--> // Примеры арифметических поэлементных операций матрицами
-->
--> // Арифметические поэлементные операции над векторами
-->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 Примеры арифметических поэлементных операций
над векторами и матрицами
Если при выполнении поэлементных операций требования к размеру или размерности матрицы не выполняются, то матрицы можно преобразовать к необходимому размеру с помощью специальных функций. Например, функция matrix позволяет изменить размеры вектора или матрицы, а функция resize_matrix выполняет обрезку или расширение матрицы. В Scilab имеются также функции, которые позволяют проверить число измерений (ndims) и размеры по каждому измерению аргументов (size). Описание перечисленных выше функций будет рассмотрено в п. 1.3.2.
Поэлементные математические функции, реализованные в Scilab, используются при проведении различного вида математических расчетов. Список наиболее часто используемых в математических расчетах функций, приведен в Приложении 1.2, табл. 1.2.2-7, а примеры обращения к некоторым из библиотечных математических функций показаны на рис.1.2.2-6.
--> // Примеры использования встроенных математических функций Scilab -->x = 10; -->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,табл. 1.2.2-8.
Здесь необходимо сделать несколько замечаний по поводу преобразования типов в операциях с различными типами аргументов.
Когда бинарная арифметическая операция (например, умножение) применяется между двумя различными операндами различных, но совместных типов, обычно тип одного из двух неявно преобразуется, а другой операнд устанавливает свой тип результату.
Так, результат арифметических операций между операндами целочисленного и вещественного типа с плавающей точкой двойной точности всегда преобразуются к целочисленному типу данных, и, когда это необходимо, по умолчанию, округляется, в соответствии с алгоритмом округления. То есть, он округляется до ближайшего целого числа.
Дата: 2019-11-01, просмотров: 290.