Книжная полка Сохранить
Размер шрифта:
А
А
А
|  Шрифт:
Arial
Times
|  Интервал:
Стандартный
Средний
Большой
|  Цвет сайта:
Ц
Ц
Ц
Ц
Ц

Решение задач линейной алгебры и прикладной математики в Python. Работа с библиотекой SciPy

Покупка
Новинка
Артикул: 844132.01.99
Доступ онлайн
500 ₽
В корзину
Рассмотрены задачи по линейной алгебре, вычислительной и прикладной математике, информационным технологиям и их решения с использованием языка программирования Python. Описана технология работы с библиотекой SciPy, приведены необходимые теоретические сведения и формулы для решения рассмотренных задач. Для оценки уровня усвоения студентами пройденного материала предложены варианты заданий для самостоятельной работы. Предназначено для бакалавров направлений подготовки 28.03.02 «Наноинженерия», 09.03.02 «Информационные системы и технологии», изучающих дисциплины «Обработка экспериментальных данных», «Прикладная математика», «Вычислительная математика», «Информационные технологии». Подготовлено на кафедре информатики и прикладной математики.
Титов, А. Н. Решение задач линейной алгебры и прикладной математики в Python. Работа с библиотекой SciPy : учебно-методическое пособие / А. Н. Титов, Р. Ф. Тазиева ; Минобрнауки России, Казан. нац. исслед. технол. ун-т. - Казань : КНИТУ, 2023. - 124 с. - ISBN 978-5-7882-3319-2. - Текст : электронный. - URL: https://znanium.ru/catalog/product/2172660 (дата обращения: 21.11.2024). – Режим доступа: по подписке.
Фрагмент текстового слоя документа размещен для индексирующих роботов
Министерство науки и высшего образования Российской Федерации 
Казанский национальный исследовательский 
технологический университет 
А. Н. Титов, Р. Ф. Тазиева 
РЕШЕНИЕ ЗАДАЧ  
ЛИНЕЙНОЙ АЛГЕБРЫ 
И ПРИКЛАДНОЙ  
МАТЕМАТИКИ В 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 


Доступ онлайн
500 ₽
В корзину