(Продолжение. Начало в №1)
Решение задач линейной алгебры
Функции для нахождения числовых характеристик матриц
Для определения количества строк и столбцов матрицы М используют функцию size, аргументом которой является имя массива:
Если нужно определить количество только строк или только столбцов, то синтаксис функции модифицируется: добавляется второй аргумент, который имеет значение "1" или "r", если следует определить количество строк, "2" или "с" - если столбцов. Например:
Общее количество элементов матрицы или длину вектора вычисляет функция length, аргументом которой является имя матрицы или вектора:
Для определения максимального значения элемента матрицы или вектора используется функция max, аргументом которой является имя матрицы или вектора. Если нужно определить максимальное значение для каждого из строк или столбцов матрицы, то синтаксис функции модифицируется: добавляется второй аргумент, который имеет значение "r", если следует определить максимальное значение для каждой строки, или "c" - если для каждого столбца:
Аналогично используется функция min, предназначенная для определения минимального значения элемента матрицы или вектора.
Для вычисления определителя (детерминанта) квадратной матрицы используется функция det, аргументом которой является имя матрицы:
Для вычисления ранга матрицы используется функция rank, аргументом которой является имя матрицы:
Функции, реализующие численные алгоритмы решения задач линейной алгебры
Вычисление матрицы, обратной М
Напомним, что обратной по отношению к матрице М называется такая матрица, которая при ее умножении на матрицу М дает единичную матрицу.
Пример.
Как видим, обратная матрица А достаточно близка к единичной, но все же полностью ею не является, что является следствием погрешности численных вычислений.
Решение системы линейных алгебраических уравнений вида Ax=b
Scilab позволяет решать системы линейных алгебраических уравнений вида Ax=b. В документе для значений A формируется матрица коэффициентов при неизвестных, каждая строка которой содержит коэффициенты одного уравнения, а для значений b формируется вектор-столбец из свободных коэффициентов.
После этого для решения системы используется функция linsolve, имеющая такой синтаксис:
[Х]=linsolve(A, b)
где A - это матрица коэффициентов при неизвестных, b - вектор-столбец свободных коэффициентов.
Функция возвращает найденные значения неизвестных системы в виде вектора.
Таким образом, решение системы линейных уравнений имеет вид:
Искомые значения: х1=5, х2=1.
Если система не имеет решения, то об этом выдается сообщение "WARNING: Conflicting linear constraints!" (Конфликтующие условия для линейных уравнений). Например, такая ситуация возникнет при попытке решения системы линейных уравнений :
Система линейных алгебраических уравнений может иметь множество решений. В таком случае функция возвращает только одно. Ниже приведен пример такой ситуации при решении системы линейных уравнений :
Работа с полиномами
Напомним, что полиномом или алгебраическим уравнением называется уравнение вида a0xn + a1xn-1 + ... + an-1x + an.
Для создания полинома используется функция poly.
Синтаксис функции:
[p]=poly(a, "x", ["flag"])
где р - это имя полинома (его можно и не задавать).
Аргументы функции: a - матрица или вещественное число, x - символьная переменная, "flag" - символьная переменная, которая определяет способ задания полинома и имеет значение "roots" (допускается сокращение "r") или "coeff" ("c"). По умолчанию - "roots". Если "roots" имеет значение "r", то полином создается с параметрами ai для соответствующих символьных переменных xi. Если "flag" имеет значение "c", то значения параметров ai воспринимаются как корни, для которых нужно рассчитать коэффициенты полинома.
Следующий пример демонстрирует использование функции poly для создания полиномов р1, который имеет корень "2" и р2 с коэффициентом "2":
В следующих примерах создаются полиномы с соответствующими коэффициентами для кубического уравнения.
С полиномами можно производить действия умножения, создавать из них дроби (деление), складывать и вычитать.
Решение уравнения с одним неизвестным
Scilab может решать алгебраическое уравнение с одним неизвестным. Например, нужно найти корни уравнения x2 = 1. Если - как в данном примере - уравнение не имеет вида полинома, то его следует предварительно преобразовать в полином: x2 - 1 = 0. После этого используется функция roots, единственным аргументом которой является имя полинома. Функция возвращает найденные корни полинома.
Пример.
Если уравнение не имеет решения на множестве вещественных чисел (x2 + 1 = 0), то Scilab ищет решение среди комплексных чисел:
Операции математического анализа
Вычисление сумм элементов матрицы
Для вычисления суммы значений элементов матрицы используется функция sum.
sum(V); sum(M)
Если следует вычислить отдельно сумму значений для каждого столбца, то вторым аргументом функции является число "1" или буква "с", а если для строки, то - "2" или буква "r".
Вычисление произведения элементов матрицы
Для вычисления произведения используется функция prod.
prod(V); prod(M)
Если следует вычислить отдельно произведение значений каждого столбца, то вторым аргументом функции является число "1" или буква "с", а если для строки, то - "2" или буква "r".
Дифференциалы
Для нахождения дифференциалов в определенной точке используется функция numdiff, первый аргумент которой является именем функции, которую нужно продифференцировать, а второй - координата точки, в которой нужно вычислить производную.
Валерий ФЕТИСОВ
Комментарии
numdiff выполняет численное дифференцирование, т. е. вычисляет не дифференциал, а производную.
В прошлом материале (в первом разделе) Вы написали, что не все графики можно изобразить, и привели пример якобы неотображаемой функции y=x*sin(1/x). Это не так. Попробуйте, например, выполнить следующую последовательность команд, и все легко склеится:
x=0.001:.05:3.141/2; y=x.*sin(1./x); plot(x,y);
Проблема у Вас была, вероятно, в том, что нуль принадлежал отрезку изменения аргумента х, на нуль никто не может делить.
Появление графического редактора в Scilab - хороший удар по системе Matlab. Однако в Matlab вся работа с мышью и графическим инспектором проста и интуитивно понятна, не нужно ничего читать, прежде чем начать редакцию. А тут редактор неуклюжий. Например, если в картинке несколько осей, построенных с помощью subplot, то щелчок мыши по конкретным осям или по графику в них не делает этот объект текущим. Ожидаешь, что он уже текущий, меняешь его атрибуты, а оказывается, промахнулся, поменялись атрибуты в других осях... И еще... я не нашел возможности вернуться обратно, если ошибся с действием (типа Ctrl-z в Matlab). Эти мелочи мешают работать нормально с рисунками. Хотя сама возможность редактирования уже приятна. Слава Богу, система славянский шрифт не искажает до иероглифов. Эти функции работы с графикой очень важны при написании статей, отчетов, дипломов, диссертаций. Часто есть необходимость стащить графики из нескольких окон в одно окно и, соответственно, раздать им различные стили, снабдить общей легендой. Потом, размеры и стиль шрифтов в пометках, подписях и легендах часто редакциями журналов требуется вполне определенный.