Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Символьные вычисления в Python. Основы работы с библиотекой SymPy. Учебно-методическое пособие
.pdf
81
Покажем, как строятся графики функций с разными значениями
параметра range.
Пример 2.5. Построить графики функций
2
и)35(
sinx
y x z cos x==
в одном графическом окне. Для первой функции задать
[1,3],x
для
второй –
[1.5, 4].x
Решение:
from sympy import *
from sympy.plotting import plot
x = symbols('x')
p1=plot((3*x**sin(x),(x,1,3)),(5*cos(x)**2,(x,1.5,4)),show=False)
p1[0].line_color = 'red';
p1[1].line_color = 'g';
p1.show()
Рис. 2.8. Графики функций с разными пределами изменения
аргументов
В графическое окно можно добавить текст и графический прими-
тив (например, отрезки прямых). Делается это с использованием маркеров и аннотаций.
Пример 2.6. На отрезке [-4, 4] найти минимум функции
2
sin
.
6
xx
y
x
=
+
В качестве начального приближения при поиске точки ми-
нимума взять точку х0 = -2. Дать графическое решение. Отметить на графике точку минимума. Показать координаты точки. Сделать поясняющие надписи.

Решение:
from sympy.plotting import plot
from sympy import *
x = symbols('x')
y=(x**2*sin(x))/(x+6)
t=latex(y,mode='inline',fold_short_frac=False)
z=diff(y,x)
xmin=nsolve(z,x,-2);ymin=y.subs(x,xmin)
plot(y,(x,-4,4),line_color='red',
title='График функции на отрезке [-4, 4]',
markers=[{'args':[xmin,ymin,'o'],
'color':"green",'ms':10},
{'args': [[xmin, 0], [ymin, ymin]],
'color': 'gray', 'ls': '--',"lw":2},
{'args': [[xmin, xmin], [ymin, 0]],
'color': 'gray', 'ls': '--',"lw":2},],
annotations=[{'xy':(zmin,1),"s": "Точка минимума",
'size':14,'ha':'center','va': 'bottom','color':"brown"},
{'xy':(xmin,.2),"s": "$x_{min}$",'ha':'center',
'size':16,'color':"k"},
{'xy':(.1,ymin),"s": "$y_{min}$",
'size':16,'color':"k"}],
legend=True,label='y='+t,size=(10,3))
Рис. 2.9. Графическое решение задачи оптимизации
Комментарий. Задаем функцию, минимум которой необходимо
найти (y). Подготавливаем текст легенды. Находим производную от
функции y (переменная z). Решаем уравнение z = 0 при начальном приближении, равном -2. Решение уравнения – точка xmin, значение функции в этой точке – ymin. Строим график функции y на отрезке [-4, 4].
82

83
С помощью параметра markers отмечаем на графике точку минимума
маркером в виде кружка зеленого цвета размером 10. Из точки с координатами (xmin, ymin) проводим прямые, параллельные осям X и Y, до
пересечения с осями Y и X соответственно пунктирными линиями серого цвета толщиной 2. Для этого задаем координаты начала и конца
каждой линии: сначала координаты Х, затем Y. Цвет задаем параметром 'color', стиль линии (line style) – параметром 'ls', толщину – параметром,"lw" (line width).
С помощью параметра annotations задаем точку начала каждой
надписи. Надпись может располагаться слева от этой точки ('ha':'left'),
заканчиваться в этой точке ('ha':'right') или быть симметричной относительно этой точки ('ha':'center'). С помощью параметра 's' задаем текст
надписи, с помощью параметров 'size' и 'color' – ее размер и цвет. Список возможных цветов можно посмотреть в работе А. Н. Титова
и Р. Ф. Тазиевой4. Параметром 'va':"top" задаем размещение надписи
под точкой с указанными координатами. Другое возможное значение
параметра 'va' – 'bottom'. Надпись будет располагаться над указанной
точкой. Надписи xmin, ymin набираем с использованием возможностей,
которые предоставляет LaTeX.
Далее выводим легенду, текст которой состоит из символьной
строки 'y=', к которой добавляется запись уравнения кривой y, выполненная в LaTeX. Для удобства увеличиваем размеры графического окна
по оси Х.
2.1.2 . П о с т р о е н и е п а р а м е т р и ч е с к и з а д а н н ы х
к р и в ы х на п л о с к о с т и
Для построения параметрически заданных кривых в SymPy пред-
назначена функция plot_parametric(*args, show=True, **kwargs).
Если мы хотим построить одну кривую, то используется конструкция plot_parametric((expr_x, expr_y), range), для построения нескольких кривых с одними и теми же пределами изменения аргументов x и y – plot_parametric((expr_x, expr_y), ..., range), для построения
4
Титов А. Н., Тазиева Р. Ф. Визуализация данных в Python. Работа с библиотекой Matplotlib: учеб.-метод.
пособие. Казань: Изд-во КНИТУ, 2022. 92 с.

84
нескольких кривых с разными пределами изменения аргументов x и y – plot_parametric((expr_x, expr_y, range), ...). Параметры функции plot_parametric() идентичны параметрам функции plot().
Пример 2.7. Построить график функции, заданной параметриче-
ски:
3
3
( ) 8cos ( )
, [ , ].
( ) 8sin ( )
x t t
t
y t t
=
−
=
Решение:
from sympy import *
from sympy.plotting import plot_parametric
t= symbols('t');
x=8*cos(t)**3;
y=8*sin(t)**3;
plot_parametric((x, y), (t, -pi, pi),line_color = 'red')
Рис. 2.10. График функции, заданной параметрически
Пример 2.8. Построить графики двух функций, заданных пара-
метричски:
1
1
( ) 3(cos( ) sin( ))
( ) 5( sin( ))
, , [ 2 ,2 ].
( ) 5(1 cos( )) ( ) 3(sin( ) cos( ))
x t t t t
x t t t
t
y t t y t t t t
=+
=−
−
= − = −
Решение:
from sympy import *
from sympy.plotting import plot_parametric
t= symbols('t');x=5*(t-sin(t));y=5*(1-cos(t));
x1=3*(cos(t)+t*sin(t));y1=3*(sin(t)-t*cos(t))
z=plot_parametric((x, y),(x1,y1),(t,-2*pi,2*pi),
legend=True,show=False)
z[0].line_color = 'g';z[0].line_color = 'magenta';z.show()

Рис. 2.11. Графики двух функций, заданных параметрически,
1
1
( ) 3 sin( )
( ) 5sin( )
, [ , ], , [ 2 ,2 ].
( ) 5cos( ) ( ) 3cos( )
x t t t
x t t
tt
y t t y t t
=
=
− −
==
с одинаковыми пределами изменения аргумента
Пример 2.9. Построить графики двух функций, заданных пара-
метрически:
Решение:
from sympy import *
from sympy.plotting import plot_parametric
t= symbols('t')
x=5*sin(t);
y=5*cos(t);
x1=3*t*sin(t);
y1=3*cos(t)
z=plot_parametric((x, y,(t,-pi,pi)),(x1,y1,(t,-2*pi,2*pi)),
legend=True,show=False)
z[0].line_color = 'brown';z[1].line_color = 'gold';z.show()
Рис. 2.12. Графики двух функций, заданных параметрически,
с разными пределами изменения аргумента
85

86
Для построения графика неявно заданной функции или области,
удовлетворяющей совокупности неравенств, используют функцию
plot_implicit: plot_implicit(expr, x_var=None, y_var=None, adaptive=True,
depth=0, points=300, line_color='blue', show=True, **kwargs). Здесь
expr – уравнение или неравенство. Остальные аргументы функции ана-
логичны аргументам функции plot().
Пример 2.10. Построить график функции y2+x3=12.
Решение:
from sympy import plot_implicit, symbols, Eq, And,exp
x, y = symbols('x y')
p1 = plot_implicit(Eq(x**2 + y**3, 12),line_color='red',
adaptive=False)
Рис. 2.13. График неявно заданной функции y2+x3=12
Краткий комментарий. По умолчанию значения x_var, y_var
принимают значения от -5 до 5. Значение параметра adaptive=False позволило увеличить толщину линии.
Пример 2.11. Построить область, ограниченную неравенствами
4
0 1; 0 1; 1; .
25
x y x y xy +
Решение:
from sympy import plot_implicit, symbols, Eq, And
x, y = symbols('x y')
plot_implicit(And(y + x<=1, x*y<=4/25),(x,0,1),(y,0,1),
line_color='gray')

87
Рис. 2.14. Область, удовлетворяющая неравенствам
4
0 1; 0 ;1 1;
25
x y x y xy +
Подробнее о построении графиков непараметрических кривых
можно узнать в работе И. В. Блиновой и И. Ю. Попова5.
2.2 . П о с т р о е н и е г р а ф и к о в т р е х м е р н ы х
п о в е р х н о с т е й
Для построения графиков трехмерных поверхностей в библио-
теке предназначены функции plot3d(), plot3d_parametric_line(),
plot3d_parametric_surface().
2 . 2 . 1 . Ф у н к ц и я p l o t 3 d
Для построения 3D-графиков используют функцию plot3d(). Если
мы хотим построить один 3D-график, то используется конструкция
5
Блинова И. В., Попов И. Ю. Кривые, заданные параметрически и в полярных координатах: учеб. посо-
бие. Санкт-Петербург: Университет ИТМО, 2017. 56 с.

plot3d(expr, range_x, range_y, **kwargs), для построения нескольких
[ 3,3], [ 4,4].xy − −
Рис. 2.15. График трехмерной поверхности z=x3-z
4
Пример 2.13. Построить графики двух поверхностей: z=x2-y2;
z1=x2+y2;
, [ 3,3].xy−
Решение:
from sympy import *
from sympy.plotting import plot3d
x,y= symbols('x y');z=x**2-y**2;z1=x**2+y**2;
plot3d(z,z1,(x,-3,3),(y,-3,3))
кривых с одними и теми же пределами изменения аргументов x и y – конструкция plot3d(expr1, expr2, range_x, range_y, **kwargs),
для построения нескольких 3D-кривых с разными пределами изменения аргументов x и y – конструкция plot3d((expr1, range_x, range_y),
(expr2, range_x, range_y), ... , **kwargs). Если параметр range опущен,
предполагаются пределы изменения от -10 до 10. Параметры функции
plot3d() аналогичны параметрам функции plot().
Пример 2.12. Построить поверхность z=x3-y4.
Решение:
from sympy import *
from sympy.plotting import plot3d
x,y= symbols('x y');z=x**3-y**4;plot3d(z,(x,-3,3),(y,-4,4))
88

Рис
. 2.16. Графики двух поверхностей z=x2-y2; z1=x2+y
2
Построить поверхность можно, определив требуемую функцию
как лямбда-функцию:
from sympy import *
from sympy.plotting import plot3d
x,y= symbols('x y')
f=lambda x,y: x**2+y**2
plot3d(f(x,y),(x,-3,3),(y,-3,3))
2 . 2 . 2 . П о с т р о е н и е п а р а м е т р и ч е с к и х 3D- к р и в ы х
Для построения кривых в 3D используют функцию plot3d_parametric_line. Если нужен один график, используют конструкцию
plot3d_parametric_line(expr_x, expr_y, expr_z, range, **kwargs), для по-
строения нескольких кривых применяют функцию
plot3d_parametric_line((expr_x, expr_y, expr_z, range), ..., **kwargs). Ар-
гумент range должен быть задан для каждой кривой. Параметрами
функции могут быть nb_of_points, line_color, label, title, size. Назначение
этих параметров было рассмотрено в подразд. 2.1.1.
89

Пример 2.14. Построить кривую, уравнение которой задано па-
( ) sin
( ) cos( ), [ 6,6].
x t t
y t t t
zt
=
= −
=
Рис. 2.17. График кривой, уравнение которой задано параметрически
Вариант построения графика двух кривых:
from sympy import *
from sympy.plotting import plot3d_parametric_line
t = symbols('t')
w=plot3d_parametric_line((t,sin(t),cos(t),(t,-6,6)),
(sin(t),t*2,cos(t),(t,-3,3)),show=False)
w[0].line_color = 'g';w[1].line_color = 'r'
w.show()
раметрически:
Решение:
from sympy import *
from sympy.plotting import plot3d_parametric_line
t = symbols('t');x,y,z= symbols('x y z');x=sin(t);y=cos(t);z=t;
plot3d_parametric_line(x,y,z,(t,-6,6),line_color = 'brown')
90
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
