Решение задач линейной алгебры и прикладной математики в среде Scilab
Покупка
Год издания: 2020
Кол-во страниц: 100
Дополнительно
Вид издания:
Учебно-методическая литература
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7882-2814-3
Артикул: 789840.01.99
Рассмотрены возможности системы компьютерной математики Scilab в области решения задач вычислительной математики. Приведены теоретический материал, примеры решения задач линейной алгебры и вычислительной математики. Для оценки уровня усвоения студентами пройденного материала предложены варианты заданий для самостоятельной работы.
Предназначено для бакалавров, обучающихся по направлениям подготовки 18.03.01 «Химическая технология», 28.03.02 «Наноинженерия», 09.03.02 «Информационные системы и технологии», изучающих дисциплины «Информатика». «Вычислительная математика», «Прикладная математика». «Методы оптимизации».
Подготовлено на кафедре информатики и прикладной математики.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.02: Информационные системы и технологии
- 18.03.01: Химическая технология
- 28.03.02: Наноинженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования «Казанский национальный исследовательский технологический университет» А. Н. Титов, Р. Ф. Тазиева РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ И ПРИКЛАДНОЙ МАТЕМАТИКИ В СРЕДЕ SCILAB Учебно-методическое пособие Казань Издательство КНИТУ 2020
УДК 004.42:51(076) ББК 32.97:я7 Т45 Печатается по решению редакционно-издательского совета Казанского национального исследовательского технологического университета Рецензенты: д-р техн. наук, проф. М. Х. Хайруллин канд. экон. наук О. С. Семичева Т45 Титов А. Н. Решение задач линейной алгебры и прикладной математики в среде Scilab : учебно-методическое пособие / А. Н. Титов, Р. Ф. Тазиева; Минобрнауки России, Казан. нац. исслед. технол. ун-т. – Казань : Изд-во КНИТУ, 2020. – 100 с. ISBN 978-5-7882-2814-3 Рассмотрены возможности системы компьютерной математики Scilab в области решения задач вычислительной математики. Приведены теоретический материал, примеры решения задач линейной алгебры и вычислительной математики. Для оценки уровня усвоения студентами пройденного материала предложены варианты заданий для самостоятельной работы. Предназначено для бакалавров, обучающихся по направлениям подготовки 18.03.01 «Химическая технология», 28.03.02 «Наноинженерия», 09.03.02 «Информационные системы и технологии», изучающих дисциплины «Информатика», «Вычислительная математика», «Прикладная математика», «Методы оптимизации». Подготовлено на кафедре информатики и прикладной математики. ISBN 978-5-7882-2814-3 © Титов А. Н., Тазиева Р. Ф., 2020 © Казанский национальный исследовательский технологический университет, 2020 УДК 004.42:51(076) ББК 32.97:я7
О Г Л А В Л Е Н И Е ВВЕДЕНИЕ ................................................................................................ 5 1. РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ В СРЕДЕ SCILAB .... 7 1.1. Простейшие операции с элементами массивов .......................... 7 1.2. Матричные операции линейной алгебры ................................... 9 1.3. Решение систем линейных уравнений в Scilab ........................ 16 Задания для самостоятельной работы ........................................... 17 2. РЕШЕНИЕ УРАВНЕНИЙ И СИСТЕМ УРАВНЕНИЙ В SCILAB ................................................................................................. 19 2.1. Вычисление корней полинома ................................................... 19 2.2. Решение трансцендентных уравнений в Scilab ........................ 20 Задания для самостоятельной работы ........................................... 25 3. АППРОКСИМАЦИЯ .......................................................................... 26 3.1. Меры погрешности аппроксимации .......................................... 26 3.2. Нахождение коэффициентов cj при точечной аппроксимации методом наименьших квадратов ........................... 27 3.3. Решение задачи аппроксимации в Scilab. Функция datafit ..... 29 3.4. Неполиномиальная регрессия .................................................... 34 3.5. Проверка адекватности модели объекту исследования .......... 36 Задания для самостоятельной работы ........................................... 40 4. ИНТЕРПОЛЯЦИЯ ............................................................................... 42 4.1. Линейная интерполяция ............................................................. 43 4.1.1. Функция interpln ................................................................ 43 4.1.2. Функция linear_interpn ...................................................... 44
4.2. Построение интерполяционных полиномов в Scilab ............... 52 4.2.1. Решение задачи интерполяции с помощью функции datafit ............................................................................................ 52 4.2.2. Решение задачи интерполяции без использования функции datafit ............................................................................. 54 4.3. Интерполяция сплайнами ........................................................... 57 4.3.1. Сплайн-интерполяция в Scilab ......................................... 59 4.3.2. Специальные функции Scilab для сплайн- интерполяции .............................................................................. 61 4.3.3. Нахождение уравнений сплайнов .................................... 68 4.3.4. Функция smooth ................................................................. 75 4.4. Обратная интерполяция .............................................................. 78 Задания для самостоятельной работы ........................................... 83 5. ОПТИМИЗАЦИЯ ................................................................................ 84 5.1. Решение задач безусловной оптимизации. Функция optim .... 84 5.2. Решение задач линейного программирования. Функция karmarkar ............................................................................................. 89 5.3. Решение задач квадратичной оптимизации. Функция qld ...... 93 Задания для самостоятельной работы ........................................... 97 ЛИТЕРАТУРА ......................................................................................... 98
ВВЕДЕНИЕ Система компьютерной математики Scilab в настоящее время получила достаточно широкое распространение в вузах ввиду ее очевидных преимуществ перед своими более мощными и дорогостоящими аналогами: Matlab, Mathcad и др. Основными преимуществам системы являются, прежде всего, ее бесплатность, сравнительно небольшой объем, относительная простота в использовании. Появилось и достаточное количество публикаций о возможностях системы и принципах работы с ней. Из числа известных авторам публикаций на данную тему следует отметить работы [1‒4]. Все они, как правило, содержат материал по широкому кругу вопросов применения пакета. Авторов данного учебно-методического пособия, прежде всего, интересовали основные возможности системы в области численных методов и решения задач линейной алгебры. Несмотря на имеющиеся в литературе примеры решения указанных задач, многие полезные функции системы остались не рассмотренными. Не облегчает понимание и имеющаяся в справке Scilab информация на английском языке о работе таких функций, как, например, interpln, linear_interpn, datafit, interp, smooth, qld. В известных авторам источниках не указаны частые ошибки, к которым могут привести неправильное применение функций, например неудачный выбор начального приближения при решении уравнений или построении аппроксимирующих кривых. Авторы поставили перед собой цель: собрать имеющуюся в литературе информацию по указанным вопросам и издать ее в виде отдельного пособия, дополнив его не переведенной информацией из справочной системы Scilab (версия 6.0.2) на эту тему. Авторы надеются облегчить восприятие изложенного в справочном разделе системы материала, снабдив пособие большим количеством примеров и пояснений к ним. Пособие включает в себя пять разделов. В первом разделе рассматриваются вопросы, связанные с операциями над матрицами: нахождение определителей матриц, обратных матриц, векторов собственных значений и т. д., а также рассмотрены способы решения систем линейных уравнений в среде Scilab. Во втором разделе показано, как решаются алгебраические, трансцендентные уравнения и системы нелинейных уравнений с помощью функций roots и fsolve. В третьем разделе рассмотрены способы решения задач одномерной аппроксимации полиномами и другими функциями. В четвертой части приведено
большое количество примеров решения задач интерполяции полиномами и кубическими сплайнами (функции interpln, linear_interpn, datafit, interp и smooth). В пятой главе рассмотрены возможности системы Scilab в области одномерной и многомерной оптимизации: решение задач одномерной и многомерной безусловной оптимизации (функция opt), решение задач линейного программирования (функция karmarkar), решение задач квадратичного программирования (функция qld). Материал, изложенный в пособии, использовался при проведении лабораторных занятий по информатике, обработке экспериментальных данных, теории вероятностей и математической статистике, вычислительной и прикладной математике. При изложении материала предполагалось, что читатель имеет базовые представления о работе в среде Scilab. Используемая в пособии версия среды Scilab 6.0.2.
1. РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ В СРЕДЕ SCILAB 1.1. Простейшие операции с элементами массивов В этом разделе будут рассмотрены вопросы работы с элементами одномерных и двумерных массивов – векторами и матрицами. Задать вектор в Scilab можно следующим образом: b=[2 4 -5 6]. При обращении к элементам вектора нужно учитывать, что нумерация всегда начинается с 1, т. е. b(1) – это 2, b(3) – это -5 и т. д. Элементы вектора (как и элементы строки матрицы) разделяются запятой или пробелом. Количество элементов вектора b можно определить так: n=length(b). В приведенном примере n=4. Запись c=[2;4;-5;6] означает вектор-столбец. При решении некоторых задач (например, при построении графиков функций, решении систем линейных уравнений, выводе на печать результатов вычислений) необходимо следить за правильностью использования векторов: нужен ли нам вектор-столбец или вектор-строка. В противном случае система может выдать сообщение об ошибке. Запись b' означает транспонирование вектора: вектор-строка становится вектором-столбцом и наоборот. Элементы матрицы можно задать так: а=[2 1 4;5 -1 5] или в две строки: a=[2 1 4 5 -1 5]; Оба способа задания матрицы эквивалентны и означают ввод матрицы В системе Scilab элементы матрицы принято записывать следующим образом: a(3, 7), a(n, m). Первое число в скобках – это номер строки, второе – номер столбца. Для того чтобы определить количество строк (n) и столбцов (m) матрицы a, можно воспользоваться функцией size: [n, m]=size(a). Значение функции length применительно к матрице даст общее число ее элементов, т. е. n·m. Чтобы возвести все элементы приведенной выше матрицы, например, в квадрат, нужно записать: a.^2. Результатом будет матрица 4. 1. 16. 25. 1. 25. 2. 1 . 4. 5. 1 . 5. . a æ ö = ç ÷ è ø
При попытке сделать это так: a^2, будет выдано сообщение об ошибке: «Неверный размер входного параметра №1: ожидалась квадратная матрица». Дело в том, что оператор «^» применительно к матрице в этом примере означает умножение матрицы на себя. В этом случае матрица должна быть квадратной. Выражение a*b означает умножение массива a на массив b. Если а и b – матрицы, количество строк первой матрицы должно равняться количеству столбцов второй. Пример: clc a=[2 4 6;-1 4 -2];d=[2 3;-1 2;6,1];c=a*d;disp(c,'c=') Результат: c= 36. 20. -18. 3. Найдено произведение матриц: Ниже приведены некоторые специальные операторы для работы с матрицами: a(: , j) – j-й столбец матрицы a; a(i , :) – i-я строка матрицы a; a(j : k) – элементы aj, aj+1, …, ak; a( : ) – записывает все элементы массива a в виде столбца; a(m , :) =[ ] – удаляет из матрицы строку m; a' – транспонированная матрица а; prod(a) – произведение элементов массива; prod(a, dim) – произведение элементов столбцов (dim=1) или строк (dim=2) ; sum(a) – сумма элементов массива – вектора или матрицы; sum(a, dim) – сумма элементов столбцов (dim=1) или строк (dim=2). Пример применения приведенных выше операторов: a=[2 3 6;3 1 -4]; d=a';c=prod(a);e=prod(a, 2);f=sum(a); g=sum(a, 1); u=a(: , 2);b=a(1 , :); s=a(2 : 5);t=a( : );a(1 , :)=[ ]; disp(d,'d=',c,'c=',e,'e=',f,'f=') disp(g,'g=',u,'u=',b,'b=',s,'s=',t,'t=',a,'a=') f= 11. 2 3 2 4 6 36 20 1 2 . 1 4 2 18 3 6 1 æ ö æ ö æ ö ç ÷ × = ç ÷ ç ÷ ç ÷ è ø è ø ç ÷ è ø
e= 36. -12. c= -432. d= 2. 3. 3. 1. 6. -4. a= 3. 1. -4. t= 2 3. 3. 1. 6. -4. s= 3. 3. 1. 6. b= 2. 3. 6. u= 3. 1. g= 5. 4. 2. Примечание: для экономии места значения переменных t и s в приведенных ответах записаны в виде строки, хотя результатом являются столбцы. 1.2. Матричные операции линейной алгебры Покажем, как в Scilab можно вычислять определители матриц, их ранг, норму, обратные матрицы и совершать другие преобразования. Для этого предназначены следующие функции: o det(a) – возвращает определитель квадратной матрицы а; o rank(a) – возвращает ранг матрицы; o inv(a) – возвращает матрицу, обратную матрице а; o norm(a) – возвращает норму матрицы а; o cond(a) – возвращает число обусловленности матрицы а по второй норме. Эквивалентно выражению norm(a)*norm(a^(-1)); o spec(a) – возвращает вектор собственных значений матрицы а. Пример 1.1. Вычислить определитель матрицы d, ранг матрицы c, матрицу, обратную к матрице x. 2 9 9 4 1 2 3 0 3 2 1 2 -3 12 8 d , 2 3 8 7 , 1 0 2 . 4 8 3 -5 1 1 1 1 4 1 3 1 2 6 4 c x æ ö æ ö æ ö ç ÷ ç ÷ ç ÷ ç ÷ = = = ç ÷ ç ÷ ç ÷ ç ÷ ç ÷ ç ÷ è ø è ø è ø
Решение. В командном окне в строках ввода набираем: --> d=[2 9 9 4; 2 -3 12 8; 4 8 3 -5; 1 2 6 4]; --> c=[1, -2, -3, 0; 2, 3, 8, 7; -1, 1, 1, -1]; -->x=[3 2 1; 1 0 2; 4 1 3]; --> x1=det(d), x2=rank(c), x3=inv(x) В строках вывода получаем: x1 = 147. x2 = 2. x3 = -0.4 -1. 0.8 1. 1. -1. 0.2 1. -0.4 Если необходимо преобразовать исходную матрицу в матрицу с другим количеством строк и столбцов, используют функцию matrix. Входные и выходные матрицы должны иметь одинаковое количество элементов. Преобразуем, например, матрицу с размерности 3×4 в матрицу размерности 6×2: --> c=[1, -2, -3, 0; 2, 3, 8, 7; -1, 1, 1, -1];matrix(c,6,2) ans = 1. -3. 2. 8. -1. 1. -2. 0. 3. 7. 1. -1. Для создания матрицы размерности nxm, состоящей из единиц, используют функцию ones: ones(n,m). Если мы хотим создать единичную матрицу e того же размера, что и матрица с, можно записать: e=ones(c): --> e=ones(c) e = 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. 1. --> e=ones(2,2) e = 1. 1. 1. 1.