Использование свободно распространяемого пакета Scilab в дисциплинах «Информатика» и «Вычислительная математика»

Алексеев Евгений Ростиславович, Чеснокова Оксана Витальевна

Коммерческие математические пакеты ввиду высокой стоимости недоступны для большинства учёных и инженеров, работающих в университетах и исследовательских организациях. Поэтому значительный интерес представляют свободно распространяемые пакеты, среди которых можно выделить пакет для математических и инженерных расчётов 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]]) — определение ядра матрицы М.

Нелинейные уравнения и системы в Scilab

Для решения нелинейных уравнений предназначены функции 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) 

Пример 1. Функция ode

Здесь t0 — начальная точка интервала интегрирования; t — конечная точка интервала интегрирования; y0 — вектор начальных условий; f — вектор правых частей; параметр type определяет метод интегрирования дифференциального уравнения «adams» метод Адамса, «stiff» — метод Адамса-Мултона для решения жёстких систем, «rk» — метод Рунге-Кутта 4-го порядка точности, «rkf» — метод Рунге-Кутта 4-го порядка точности с автоматической оценкой точности.

При вызове функции ode пакет самостоятельно выбирает значение параметра type, это может быть значение «adams» или «stiff». В отличие от большинства коммерческих пакетов, в Scilab пользователю нет необходимости проверять, является ли система жёсткой, функция ode сама анализирует тип системы и вызывает необходимый модуль решения. Пакет Scilab очень хорошо решает жёсткие системы.