Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Символьные вычисления в Python. Основы работы с библиотекой SymPy. Учебно-методическое пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
3
7. ( ) ,[0,2]. 8. ( ) sin , [ , ]. 9. ( ) sin , [ , ]. 32
xx
f x f x f x x
   

= = − = −
 
2
10. ( ) 2 , [ , ]. 11. ( ) 2 sin , [ , ]. 12. ( ) 1 ,[ , ]. 2
x
f x x f x f x x
     
= − − = − − = + −
13. ( ) 2 1,[ 2,2]. 14. ( ) 2 1,[0,1]. 15. ( ) 2 ,[ 1,1].
x
f x x f x x f x= − − = + = −
16. ( ) , [ 1,1]. 17. ( ) 2 1,[0,3]. 18. ( ) 3 , [ 2,2].
xx
f x e f x x f x= − = − + = −
1
19. ( ) , [ 1,1]. 20. ( ) 2 1,[ 1,1]. 21. ( ) (1 ), [ 1,1].
2
22. ( ) sin( ),[ 1,1]. 23. ( ) 2 1,[ 1,1]. 24. ( ) sin , [ 1,1]. 2
f x x f x ch x f x x x
f x x x f x sh x f x x
= − − = + − = − −

= − = + − = −
 
71
72
2 . П О С Т Р О Е Н И Е Г Р А Ф И К О В В S Y M P Y
Библиотека SymPy обладает весьма скромными возможностями в области графики по сравнению с такими библиотеками, как Matplotlib или Seaborn, однако часто и этих возможностей бывает достаточно для несложной визуализации полученных в ней результатов.
Модуль Plotting библиотеки SymPy позволяет строить 2D- и 3D-гра­фики, используя в качестве основы библиотеку Matplotlib. При отсутствии Matplotlib в качестве базы можно использовать TextBackend или textplot.
Для построения графиков функций вида y = f(x) используется функция plot(); для построения графиков функций, заданных парамет­рически, – функция plot_parametric(); для построения графиков функ­ций, заданных неявно, – функция plot_implicit(); для построения трех­мерных графиков – функция plot3d(); для построения линий в 3D, за­данных параметрически, – функция plot_parametric_line(); для построе­ния трехмерных фигур, уравнения которых заданы параметрически, – plot_parametric_surface(). В качестве аргумента может быть использо­ван объект класса Series («Ряды»).
2 . 1 . П о с т р о е н и я к р и в ы х на п л о с к о с т и
2 . 1 . 1 . Ф у н к ц и и p l o t и t e x t p l o t
Функция plot() возвращает экземпляр класса Plot. По умолча­нию в качестве бэкенда используется библиотека Matplotlib, но вме­сто нее можно использовать texplot, pyglet или API Google Charts. Если библиотека Matplotlib не установлена, можно воспользоваться функцией textplot(), которая имеет простой синтаксис:
sympy.plotting.textplot.textplot(expr, a, b, W=55, H=21).
Строится график функции expr на интервале [a, b]. Выраже­ние expr должно содержать один символ, например х. Параметры W (width) и H (height) задают ширину и высоту графика соответственно.
Код для построения графика функции
2
y x sinx=
ке [-3, 3], когда в качестве бэкенда используется ASCII:
from sympy import Symbol, sin
from sympy.plotting import textplot
x = Symbol('x')
textplot(x**2*sin(x), -3, 3)
на отрез-
Рис. 2.1.
График функции y = x2·sinx (backend ASCII)
Гораздо больше возможностей для построения графиков функ­ции одной переменной предоставляет функция plot. Ее синтаксис:
plot(expr, range, title=None, xlabel=None, ylabel=None, xlim=None, ylim=None, axis_center='auto', axis=True, xscale='linear', yscale='linear', legend=False, annotations=None, markers=None, rectangles=None, size=None, **kwargs).
Эта функция позволяет строить графики функций, заданных с по­мощью символьной арифметики, используя многочисленные бэкенды
(matplotlib, textplot, старый модуль pyglet для SymPy, API диаграмм Google и т. д.). Созданный с помощью нее рисунок может содержать
произвольное количество графиков функций, заданных в символьном виде, списки координат точек и т. д. Plot имеет атрибут _series, содер­жащий ряды данных, которые необходимо нанести на график. Эти ряды данных являются экземплярами классов, не импортированных с помо­щью sympy import *. Кастомизация рисунка происходит на двух уров­нях. Существуют глобальные параметры, которые касаются рисунка в целом (например, заголовок, метки по осям, масштаб и т. д.), и вари­анты рядов данных (например, имя) и эстетики (например, цвет, форма точки, тип линии и т. д.).
73
74
Параметры функции и их назначение:
– title: str (строка) – для установки заголовка графика;
– xlabel: str (строка) – для задания метки по оси Х;
– ylabel: str (строка) – для задания метки по оси Y;
– label: str (строка) – для задания текста легенды;
– legend: bool – указывает, размещать ли легенду на графике;
– xscale: {'linear', 'log'} – для задания шкалы по оси Х;
– yscale: {'linear', 'log'} – для задания шкалы по оси Y;
– axis: bool – указывает, нужно ли прорисовывать оси координат на графике;
– axis_center – кортеж из двух значений типа float или значения {'center', 'auto'} для задания точки пересечения осей координат;
– xlim – кортеж из двух значений типа float для задания границ отображения оси Х;
– ylim – кортеж из двух значений типа float для задания границ отображения оси Y;
– size – кортеж из двух значений типа float для задания размеров графика (width, height), по умолчанию None;
– markers (маркеры) – cписок словарей, указывающих тип требу­емых маркеров. Ключи в словаре должны быть эквивалентны аргумен­там функции plot() matplotlib вместе с ключевыми словами, связанными с маркером;
– annotations – список словарей, указывающих тип требуемой ан­нотации. Ключи в словаре должны быть эквивалентны аргументам функции annotate() matplotlib.
Рассмотрим аргументы функции plot на примерах. Сначала по­строим график с использованием одного параметра функции plot:
plot(expr).
Пример 2.1. Построить график функции
2
.y x sinх=
Решение:
from sympy import symbols,sin
from sympy.plotting import plot
x = symbols('x');plot(x**2*sin(x))
График, полученный в результате работы программы, представ­лен на рис. 2.2.
Комментарий к программе. Импортируем нужные нам функ­ции (symbols,sin) из библиотеки SymPy. Из модуля sympy.plotting им- портируем функцию plot. В приведенном примере использован только
один аргумент функции plot – выражение, задающее функцию, график
2
y x sinх=
которой нужно построить. Вместо последней строки кода можно было записать y=x**2*sin(x);plot(y). Поскольку пределы изменения аргумента (х в нашем случае) не заданы, они устанавливаются по умол­чанию (от –10 до 10). Цвет графика – синий (по умолчанию).
Рис. 2.2. График функции
Можно задать другие пределы изменения аргумента, воспользо­вавшись конструкцией plot(expr,range), здесь параметр range – кортеж, задающий интервал построения графика. Можно самим задать количе­ство точек, по которым будет строиться график, присвоив nb_of_points соответствующее значение (при этом значение параметра adaptive нужно установить следующим образом: adaptive = False). Цвет кривой можно изменить с помощью глобального параметра line_color. По­строим график рассмотренной ранее функции на интервале [-3, 3] по
10 точкам линией красного цвета:
from sympy import symbols,sin
from sympy.plotting import plot
x = symbols('x')
plot(x**2*sin(x),(x,-3,3),line_color='r',
adaptive = False,nb_of_points =10)
Цвет линии можно задать числом от 0 до 1, тем самым указав отте­нок серого цвета, например line_color="0.9". В соответствии с цветовой моделью RGB можно задавать цвет кортежем, указав интенсивность (в диапазоне от 0 до 1) соответственно красной, зеленой и синей состав- ляющих определяемого цвета (например, line_color=(1,0,0) – красный или
line_color=(0,1,0,.4) – последнее число регулирует насыщенность цвета).
75
76
Рис. 2.3. График функции y = x2sinx, построенный по 10 точкам
Рассмотрим некоторые другие аргументы функции plot на при­мере построения графика функции  
с
на отрезке [-5, 6]. Код
программы с использованием нескольких параметров функции plot:
from sympy import symbols,sin
from sympy.plotting import plot
x = symbols('x')
plot(x**2/(cos(x)+3),(x,-5,6),line_color='tomato',
title='График функции',
xlabel="Ось Х", ylabel="Ось Y",
xlim=(-4,4), ylim=(-1,8), axis_center=(2,1),
axis=True, legend=True,
label=r'$y=\frac{x^2}{cos(x)+3}$',size=(7,3))
Рис. 2.4. График функции
2
cos 3
x
yx=
+
77
Краткий комментарий к программе. Параметры используемой в коде функции plot. Первый параметр – функция, график которой мы
строим. Второй параметр – кортеж (x,-5,6). С его помощью задаем пре­делы изменения аргумента х. Далее задаем цвет кривой, устанавливаем текст заголовка, подписей по осям. С помощью параметров xlim=(-4,4), ylim=(-1,8) меняем пределы отображения графика. Пересечение осей координат переносим в точку с координатами (2, 1). Если параметр axis=False, то оси не отображаются. С помощью переменной label за­даем текст легенды, записанный с помощью LaTex. Поскольку значе­ние параметра legend=True, легенда отобразится на графике. При отсут­ствии переменной label и значения параметра legend=True текст ле­генды соответствует первому параметру функции plot. В нашем случае текст легенды выглядит следующим образом: x**2/(cos(x)+3). Пара­метр size задает размеры графика в дюймах (width, height) – кортеж со значениями ширины и высоты графика.
Пример 2.2. Построить график полинома Лежандра 7-й степени на отрезке [0, 1]. Нанести на график легенду. Легенда должна содержать поясняющий текст и уравнение полинома. При выводе уравнения поли­нома использовать LaTeX. Отметить первую и последнюю точки гра­фика маркерами.
Решение. LaTeX представляет собой инструмент для создания профессиональных документов. Верстка документа в LaTeX занимает длительное время и достаточно сложна. Python предоставляет простой
санных с использованием синтаксиса языка, в LaTeX. Код программы, в котором реализована эта возможность:
from sympy import *
y=legendre_poly(7,x)
x = symbols('x'); y=legendre_poly(7,x)
t='Полином Лежандра 7 степени\n'
h=latex(y,mode='inline',fold_short_frac=False)
y1=y.subs(x,0)
y2=y.subs(x,1)
plot(y,(x,0,1),line_color='tomato',label=t+h,
markers=[{'args':[[0,1],[y1,y2],'o']}],legend=True)
Рис. 2.5. График полинома Лежандра 7-й степени
2
sin( )ln( ) и 1.5 co ()s
x
y x x x z x==
[2, 7].x
Комментарий к программе. Строим полином Лежандра 7-й сте- пени. Наличие второго параметра в функции legendre_poly() обязательно. Формируем поясняющий текст («Уравнение полинома»). Знак \n озна­чает переход на новую строку. Записываем уравнение полинома в LaTeX. Первый параметр функции latex – это полученное уравнение полинома. Второй параметр добавляет знаки $ в начало и конец выражения, что необходимо для вывода его на график. Без третьего параметра в получен­ном выражении знак деления выведется как /. Если вывести значение пе­ременной h на экран, получим: '$\\frac{429 x^{7}}{16} – \\frac{693 x^{5}}{16} + \\frac{315 x^{3}}{16} – \\frac{35 x}{16}$'. Так выглядит уравнение полинома, набранное в LaTeX. Тип полученного выражения – str (строка). Вычисляем значения полинома в точках 0 (y1) и 1 (y2). Строим график полинома на отрезке [0, 1] линией цвета tomato. Форми­руем текст легенды: добавляем к поясняющему тексту уравнение поли­нома. В параметре markers задаем координаты точек по оси Х ([0,1]) и Y ([y1,y2]) и вид маркеров (о). Объединенный текст включаем в легенду, которую выводим на график (legend=True).
В одном графическом окне можно построить несколько графи­ков. Покажем, как это можно сделать.
Пример 2.3. В одном графическом окне построить графики функ- ций Нанести на график легенду.
Решение:
from sympy import *
from sympy.plotting import plot
линиями разного цвета.
78
x = symbols('x')
p1=plot(x*sin(x)*log(x),1.5**x*cos(x)**2,(x,2,7),
legend=True,show=False) p1[0].line_color = 'red'; p1[1].line_color = 'g'; p1.show()
Комментарий к программе. Создаем объект р1 класса Plot. За-
даем две функции: x*sin(x)*log(x) и 1.5**x*cos(x)**2, графики которых хотим построить. Поскольку пределы изменения аргумента х у графи­ков одинаковые, задаем их одним кортежем – (x,2,7). Добавляем к гра­фикам легенду (legend=True). Если установить show=True, то цвет кри­вых будет одинаковым (синим в нашем случае). Не поможет и вариант line_color='red' (или любой другой цвет): параметр line_color – глобаль­ный, поэтому все кривые будут этого (красного) цвета. Повременим с выводом графика (show=False) и сначала изменим цвет у кривых объ­екта p1 (p1[0] – это первая кривая, p1[1] – вторая кривая): p1[0].line_color = 'red'; p1[1].line_color = 'g'. Только после этого выводим на кран содержимое графического окна. Если в приведенной программе опустить параметр show (или show=True), то на экран выведутся два графических окна. В первом из них графики будут одного (синего) цвета, во втором – красного и зеленого.
Рис. 2.6. Два графика в одном графическом окне
Возможен и другой вариант решения примера 2.3. Можно исполь-
зовать функцию append(arg), чтобы добавить второй график к первому:
from sympy import * from sympy.plotting import plot x = symbols('x')
79
p1=plot(x*sin(x)*log(x),(x,2,7), legend=True,line_color='r',show=False) p2 = plot(1.5**x*cos(x)**2,(x,2,7), show=False,line_color='g',legend=True) p1.append(p2[0]);p1.show()
Добавить один график к другому можно с использованием ме-
тода extend: p1.extend(p2).
Пример 2.4. Построить график первой и второй производных
функции w = xlog(x) + sin2(x) на интервале [1, 7].
Решение. Как находить производные от функций, было показано
в подразд. 1.3. В далее приведенном коде переменные c и d – первая и вторая производные исходной функции:
from sympy import diff, sin,log from sympy.abc import x from sympy.plotting import plot w = x*log(x) + sin(x)**2; c=diff(w,x); d=diff(w,x,2) p1=plot(c,(x,1,7),label='График первой производной',
legend=True,line_color = 'red',show=False) p2=plot(d,(x,1,7),label='График второй производной',
legend=True,line_color = 'g',show=False) p1.extend(p2); p1.show()
Рис. 2.7. Графики первой и второй производных
функции w = xlog(x) + sin2(x)
80
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]