Коммерческие математические пакеты ввиду высокой стоимости недоступны для большинства учёных и инженеров, работающих в университетах и исследовательских организациях. Поэтому значительный интерес представляют свободно распространяемые пакеты, среди которых можно выделить пакет для математических и инженерных расчётов Scilab, который наряду с мощными вычислительными возможностями, обладает мощным языком программирования. Существует возможность подключения программ, написанных на Си и Фортране. Поэтому имеет смысл включить изучение основ пакета в курс «Информатика» для студентов инженерных специальностей, а также построить изучение курса «Вычислительная математика» на базе пакета Scilab. Рассмотрим возможности пакета для решения основных математических задач.
Векторы и матрицы в Scilab задаются путём ввода их элементов в квадратных скобках. При обращении к элементу массива, его индекс указывается после имени массива в круглых скобках. Определены основные операции и функции для работы с матрицам, среди которых можно выделить: inv(A)
— вычисляет матрицу обратную к A
; det(M)
— вычисляет определитель квадратной матрицы М
; rank(M[,tol])
— вычисление ранга матрицы M
с точностью tol
; norm(M[,fl])
вычисление нормы типа fl
(строковая переменная, означает тип нормы, по умолчанию fl=2
) квадратной матрицы М
; сond(M)
— вычисляет число обусловленности матрицы М
по второй норме; spec(M)
— вычисление собственных значений и собственных векторов квадратной матрицы M
; linsolve(A,b)
— решение системы линейных алгебраических уравнений; lu(М)
— выполняет треугольное разложение матрицы М
: М=СLU
, где L
и U
— соответственно нижняя и верхняя треугольные матрицы qr(М)
— выполняет разложение матрицы М
: М=QR
, Q
— ортогональная матрица, R
— верхняя треугольная матрицы; svd(М)
— выполняет сингулярное разложение матрицы М
размером nxm
; kernel(М[,tol[,fl]])
— определение ядра матрицы М
.
Для решения нелинейных уравнений предназначены функции roots(p)
и fsolve(x0,f)
. Первую обычно применяют для отыскания корней полинома p
, а вторую для решения нелинейных уравнений, отличных от алгебраических, и для решения систем линейных и нелинейных уравнений.
Для определения алгебраического уравнения в Scilab существует функция poly(a,"x", ["fl"])
, где a
— это число или матрица чисел, x
— символьная переменная, fl
— строковая переменная, определяющая способ задания полинома. Если fl=c
, то будет сформирован полином с коэффициентами, хранящимися в параметре a
. Если же fl=r
, то значения параметра a
воспринимаются функцией как корни полинома.
Для реализации метода наименьших квадратов в Scilab предусмотрена функция datafit(G,z,c)
. Матрица z
состоит из двух строк, в первой хранятся абсциссы экспериментальных точек, во второй ординаты. Функция G
должна формировать массив разностей между экспериментальными и вычисленными значениями. В массиве с
находится начальное приближение коэффициентов подбираемой зависимости. Функция datafit
возвращает массив коэффициентов подобранной зависимости и суммарную квадратичную ошибку.
Задачу интерполирования в Scilab можно решить построением функций линейной и сплайн интерполяции. Для построения линейной интерполяции служит функция interpln(z,x)
; здесь z
— такая же матрица, как и в функции datafit
, x
— точка, в которой необходимо вычислить ожидаемое значение, возвращаемое в качестве результата. Построение интерполяционного сплайна состоит из двух этапов: вначале вычисляются коэффициенты сплайна с помощью функции splin(x,y)
(x
, y
— массивы абсцисс и ординат экспериментальных точек), затем с помощью функции interp(t,x,y,k)
вычисляется значение интерполяционного полинома в точке t
(k
— массив коэффициентов сплайна).
В пакете Scilab предусмотрена функция ode
следующей структуры:
y=ode(y0,t0,t,f)
y=ode([type],y0,t0,t[,troll[,atoll]],f)
ode
Здесь t0
— начальная точка интервала интегрирования; t
— конечная точка интервала интегрирования; y0
— вектор начальных условий; f
— вектор правых частей; параметр type
определяет метод интегрирования дифференциального уравнения «adams
» метод Адамса, «stiff
» — метод Адамса-Мултона для решения жёстких систем, «rk
» — метод Рунге-Кутта 4-го порядка точности, «rkf
» — метод Рунге-Кутта 4-го порядка точности с автоматической оценкой точности.
При вызове функции ode
пакет самостоятельно выбирает значение параметра type
, это может быть значение «adams
» или «stiff
». В отличие от большинства коммерческих пакетов, в Scilab пользователю нет необходимости проверять, является ли система жёсткой, функция ode
сама анализирует тип системы и вызывает необходимый модуль решения. Пакет Scilab очень хорошо решает жёсткие системы.