Решение задач линейной алгебры и прикладной математики в Python. Работа с библиотекой SciPy
Покупка
Новинка
Тематика:
Прикладная математика
Год издания: 2023
Кол-во страниц: 124
Дополнительно
Вид издания:
Учебно-методическая литература
Уровень образования:
ВО - Бакалавриат
ISBN: 978-5-7882-3319-2
Артикул: 844132.01.99
Рассмотрены задачи по линейной алгебре, вычислительной и прикладной математике, информационным технологиям и их решения с использованием языка программирования Python. Описана технология работы с библиотекой SciPy, приведены необходимые теоретические сведения и формулы для решения рассмотренных задач. Для оценки уровня усвоения студентами пройденного материала предложены варианты заданий для самостоятельной работы.
Предназначено для бакалавров направлений подготовки 28.03.02 «Наноинженерия», 09.03.02 «Информационные системы и технологии», изучающих дисциплины «Обработка экспериментальных данных», «Прикладная математика», «Вычислительная математика», «Информационные технологии». Подготовлено на кафедре информатики и прикладной математики.
Тематика:
ББК:
УДК:
ОКСО:
- ВО - Бакалавриат
- 09.03.02: Информационные системы и технологии
- 28.03.02: Наноинженерия
ГРНТИ:
Скопировать запись
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство науки и высшего образования Российской Федерации Казанский национальный исследовательский технологический университет А. Н. Титов, Р. Ф. Тазиева РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ И ПРИКЛАДНОЙ МАТЕМАТИКИ В PYTHON РАБОТА С БИБЛИОТЕКОЙ SCIPY Учебно-методическое пособие Казань Издательство КНИТУ 2023
УДК 512.64:004(075) ББК 22.143:32.97я7 Т45 Печатается по решению редакционно-издательского совета Казанского национального исследовательского технологического университета Рецензенты: д-р пед. наук, доц. Ю. В. Торкунова канд. экон. наук, доц. О. С. Семичева Т45 Титов А. Н. Решение задач линейной алгебры и прикладной математики в Python. Работа с библиотекой SciPy : учебно-методическое пособие / А. Н. Титов, Р. Ф. Тазиева; Минобрнауки России, Казан. нац. исслед. технол. ун-т. – Казань : Изд-во КНИТУ, 2023. – 124 с. ISBN 978-5-7882-3319-2 Рассмотрены задачи по линейной алгебре, вычислительной и прикладной математике, информационным технологиям и их решения с использованием языка программирования Python. Описана технология работы с библиотекой SciPy, приведены необходимые теоретические сведения и формулы для решения рассмотренных задач. Для оценки уровня усвоения студентами пройденного материала предложены варианты заданий для самостоятельной работы. Предназначено для бакалавров направлений подготовки 28.03.02 «Наноинженерия», 09.03.02 «Информационные системы и технологии», изучающих дисциплины «Обработка экспериментальных данных», «Прикладная математика», «Вычислительная математика», «Информационные технологии». Подготовлено на кафедре информатики и прикладной математики. УДК 512.64:004(075) ББК 22.143:32.97я7 ISBN 978-5-7882-3319-2 © Титов А. Н., Тазиева Р. Ф., 2023 © Казанский национальный исследовательский технологический университет, 2023 2
С О Д Е Р Ж А Н И Е ВВЕДЕНИЕ .......................................................................................................................... 5 1. РЕШЕНИЕ ЗАДАЧ ЛИНЕЙНОЙ АЛГЕБРЫ В БИБЛИОТЕКЕ SCIPY ............ 7 1.1. УСТАНОВКА БИБЛИОТЕКИ ....................................................................................... 7 1.2. РАБОТА С МОДУЛЕМ SCIPY.LINALG.......................................................................... 9 Задания для самостоятельной работы .......................................................... 13 2. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ УРАВНЕНИЙ И ИХ РЕАЛИЗАЦИЯ В БИБЛИОТЕКЕ SCIPY .................................................................................. 15 2.1. УТОЧНЕНИЕ КОРНЯ УРАВНЕНИЯ. ФУНКЦИЯ ROOT_SCALAR()............................. 17 2.2. ФУНКЦИИ ROOT() И FSOLVE() ДЛЯ РЕШЕНИЯ НЕЛИНЕЙНЫХ УРАВНЕНИЙ И СИСТЕМ НЕЛИНЕЙНЫХ УРАВНЕНИЙ ........................................................................................ 28 Задания для самостоятельной работы .......................................................... 35 3. АППРОКСИМАЦИЯ ................................................................................................... 37 3.1. МЕРЫ ПОГРЕШНОСТИ АППРОКСИМАЦИИ ............................................................ 38 3.2. МЕТОД НАИМЕНЬШИХ КВАДРАТОВ ДЛЯ РЕШЕНИЯ ЗАДАЧИ АППРОКСИМАЦИИ. ФУНКЦИИ LINALG.LSTSQ(), CURVE_FIT() И OPTIMIZE.LEASTSQ() ............. 41 Задания для самостоятельной работы .......................................................... 51 4. ИНТЕРПОЛЯЦИЯ ....................................................................................................... 52 4.1. МЕТОДЫ РЕШЕНИЯ ЗАДАЧИ ИНТЕРПОЛЯЦИИ ..................................................... 53 4.2. РЕШЕНИЯ ЗАДАЧИ ИНТЕРПОЛЯЦИИ КАК ЗАДАЧИ АППРОКСИМАЦИИ ............... 63 4.3. РАБОТА С МОДУЛЕМ SCIPY.INTERPOLATE ............................................................. 65 Задания для самостоятельной работы .......................................................... 87 5. ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ ....................................................................... 89 5.1. ВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ ОТ ТАБЛИЧНО ЗАДАННЫХ ФУНКЦИЙ .................... 89 5.2. ВЫЧИСЛЕНИЕ ИНТЕГРАЛОВ ОТ ФУНКЦИЙ, ЗАДАННЫХ В ЯВНОМ ВИДЕ ............ 94 Задания для самостоятельной работы ........................................................ 104 6. ЧИСЛЕННЫЕ МЕТОДЫ РЕШЕНИЯ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ И СИСТЕМ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ ............................ 105 6.1. РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ ДИФФЕРЕНЦИАЛЬНОГО УРАВНЕНИЯ ПЕРВОГО ПОРЯДКА .................................................................................................................... 106 3
6.2. РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ СИСТЕМ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ ПЕРВОГО ПОРЯДКА ............................................................................................... 114 6.3. РЕШЕНИЕ ЗАДАЧИ КОШИ ДЛЯ ДИФФЕРЕНЦИАЛЬНЫХ УРАВНЕНИЙ ВЫСШИХ ПОРЯДКОВ .................................................................................................................. 118 Задания для самостоятельной работы ........................................................ 121 ЛИТЕРАТУРА ................................................................................................................ 123 4
В В Е Д Е Н И Е Python является одним из наиболее востребованных языков программирования для обработки данных. Во многом это обусловлено тем, что, несмотря на свою относительную простоту, он является в то же время и очень мощным средством, которое позволяет решать широкий круг возникающих на практике задач. Кроме того, для анализа и обработки данных в нем имеется достаточно много открытых библиотек. Одной из таких библиотек является библиотека SciPy. SciPy – это библиотека Python с открытым исходным кодом, предназначенная для решения научных, инженерных и математических задач. Она построена на базе библиотеки NumPy и позволяет управлять данными, а также визуализировать их. SciPy содержит набор модулей для обработки результатов научных исследований. Среди этих модулей – модуль cluster, содержащий реализацию алгоритмов кластерного анализа, модуль constans, содержащий физические и математические константы, fftpack для быстрого преобразования Фурье, integrate для решения задач численного интегрирования и решения дифференциальных уравнений, interpolate для решения задач интерполяции, linalg для решения задач линейной алгебры, optimize для оптимизации и численного решения уравнений и систем уравнений, в том числе нелинейных, signal для обработки сигналов, stats для решения задач теории вероятностей и математической статистики и многие другие. Подробное описание можно найти в официальной документации. В рамках данного учебного пособия авторы поставили перед собой цель: собрать имеющуюся информацию по работе в SciPy, переработать ее с учетом тех типов задач, которые решаются в преподаваемых авторами дисциплинах. Авторы надеются облегчить восприятие изложенного материала, снабдив пособие большим количеством примеров и пояснений к ним. В данном пособии рассмотрены вопросы работы с некоторыми функциями модулей linalg, optimize, integrate и interpolate. Пособие включает в себя 6 глав. В первой главе показано, как с помощью функций библиотеки SciPy можно решать системы линейных уравнений, вычислять определители и находить обратные матрицы, вычислять собственные значения и нормированные собственные вектора матрицы, находить произведение матриц. Во второй главе приведены примеры решения трансцендентных уравнений двумя 5
численными методами и показано, как решаются алгебраические, трансцендентные уравнения и системы линейных и нелинейных уравнений с помощью функций root_scalar(), root() и fsolve(). Рассмотрены вопросы выбора начального приближения для решения систем двух нелинейных уравнений с использованием функции plot_implicit. В третьей главе рассмотрены способы решения задач одномерной аппроксимации полиномами и другими функциями с использованием функций lstsq(), curve_fit() и leastsq(). В четвертой главе приведено большое количество примеров решения задач интерполяции с использованием интерполяционных полиномов, кубических сплайнов и В-сплайнов (функции curve_fit(), leastsq(), interp1d(), splrep(), splrep()). В пятой главе рассмотрены задачи численного интегрирования функций, заданных таблично и аналитически (функции trapz(), cumtrapz(), quad(), fixed_quad(), romberg()). В шестой главе приведены примеры решения ОДУ первого порядка и систем таких уравнений как численно (функции odeodeint() и solve_ivp()), так и аналитически (функция dsolve() библиотеки SymPy). Материал, изложенный в пособии, может быть использован при проведении лабораторных занятий по обработке экспериментальных данных, линейной алгебре, вычислительной и прикладной математике, информационным технологиям. 6
. Р Е Ш Е Н И Е З А Д А Ч Л И Н Е Й Н О Й А Л Г Е Б Р Ы В Б И Б Л И О Т Е К Е S C I P Y Для решения задач линейной алгебры в SciPy предназначен модуль scipy.linalg. С его помощью можно решать системы линейных уравнений, а также производить различные действия над матрицами: вычислять определитель, строить обратную матрицу, вычислять собственные значения и нормированные собственные вектора матрицы, вычислять произведения матриц и многое другое. Пакет scipy.linalg может стать полезным инструментом для решения транспортной задачи, балансировки химических уравнений и электрических нагрузок, полиномиальной интерполяции и т. д. В официальной документации сказано, что scipy.linalg содержит все функции numpy.linalg библиотеки NumPy, а также дополнительные функции, не входящие в numpy.linalg. 1.1. Установка библиотеки Для работы с библиотекой ее нужно установить на компьютер. Такие среды разработки Python, как Jupyter Notebook, Google Colab, уже включают в себя различные библиотеки, в том числе и SciPy. Их не надо устанавливать, а нужно только импортировать. Если предполагается работа в среде, в которой нет библиотеки SciPy, ее необходимо установить. Для установки библиотеки (модуля) понадобится пакетный менеджер Python pip. Pip (Package installer for Python) – это система управления пакетами, которая используется для установки и управления программными пакетами, написанными на Python. Прежде всего нужно убедиться, что сам pip установлен. Начиная с версии Python 3.4 pip поставляется вместе с интерпретатором Python. После установки pip сначала проверяем, не установлена ли уже данная библиотека. В командной строке необходимо набрать pip freeze. Получится список, аналогичный приведенному на рис. 1.1. 7
Рис. 1.1. Список установленных библиотек Python Из приведенного списка видно, что библиотека уже установлена и ее версия – 1.8.0. Если бы в списке отсутствовала библиотека SciPy, загрузить ее можно было командой pip install scipy По умолчанию установится последняя версия библиотеки. Узнать версию, если вы работаете в среде Google Colab или в другой среде разработки, можно, выполнив команды import scipy; scipy.__version__ Версия авторов пособия не является последней. Ее номер '1.4.1'. 8
1.2. Работа с модулем scipy.linalg Для решения задач линейной алгебры в SciPy предназначен модуль scipy.linalg. Продемонстрируем некоторые возможности модуля на примерах. Пример 1.1. Решить систему линейных уравнений x x x 3 2 4 8 1 2 3 x x 12 18 . 1 3 x x x 4 3 7 1 2 3 − + = − + = + − = Решение. Для большей наглядности перепишем систему уравнений в матричном виде Ax=b: x 3 2 4 8 − 1 x 1 0 12 18 . 2 4 3 1 7 x 3 − = − b x А Функция, с помощью которой можно решить систему линейных уравнений в SсiPy, – linalg.solve(), входными данными для которой является матрица A и вектор b. Их нужно задать в виде двух массивов: A – массив 3 на 3 и b – массив 3 на 1. Вводим их как массивы np.array. Код программы следующий: import numpy as np from scipy.linalg import * A = np.array([ [3,-2,4], [-1,0,12], [4,3,-1] ]) b = np.array([8,18,7]).reshape(3,1) x=solve(A,b) for i in range(len(b)): print("x(%i)=%.7f" % (i+1,x[i])) 9
Результат работы программы: x(1)=1.2897196 x(2)=1.1495327 x(3)=1.6074766 Комментарий к коду. Импортируем библиотеку NumPy. Она нужна для создания массивов с данными. Из библиотеки SciPy импортируем все функции – знак «*», хотя в данном случае нам нужна лишь одна функция – solve(). Это можно было сделать следующим образом: from scipy.linalg import solve. Вводим элементы матрицы А. Матрицу А можно было задать списком. Создаем вектор-строку b как массив с именем b. Чтобы сделать его вектор-столбцом, вызываем метод reshape(). Решаем систему уравнений с помощью функции solve(), передав в нее в качестве аргументов матрицу А и вектор-столбец b. После этого вместо вывода результатов в цикле достаточно было просто записать: x. В этом случае был бы получен ответ в виде array([[1.28971963], [1.14953271], [1.60747664]]) В коде приведен другой вариант вывода. В цикле по переменной i, которая принимает значения 0, 1, 2 (len(b)=3, так как вектор содержит 3 элемента, а нумерация ведется с 0), выводятся значения xi. Индексы у переменной х увеличены на 1, чтобы они совпадали с индексами в условии примера. Попытка решить систему, имеющую бесчисленное множество x x 2 3 5 1 2 решений, например, такую: , приводит к ошибке и выx x 4 6 10 1 2 + = + = даче сообщения: LinAlgError: Matrix is singular (т. е. определитель матрицы равен нулю), хотя некоторые из программных продуктов выдают в этом случае одно из возможных решений (например, Scilab). То же сообщение выдается, если система уравнений несовместна. Далее рассмотрим, как можно найти обратную матрицу. Пример 1.2. Вычислить обратную матрицу для матрицы 3 6 7 А 2 3 1 . 6 5 4 = 10