Вы находитесь на странице: 1из 8

Основы программирования на Python можно изучить с помощью следующих

источников:
Сайты с уроками:

1. https://devpractice.ru/python-lessons/
2. https://pythonworld.ru/samouchitel-python
3. https://devpractice.ru/python-lessons/

Книги и методички:

1. СысоеваМ.В., СысоевИ.В. Программирование для .нормальных. с нуля на языке Python:


Учебник. В двух частях. Часть 1: М.: Базальт СПО; МАКС Пресс, 2018. 176 с.
2. Федоров, Д.Ю. Программирование на языке высокого уровня Python: учебное пособие
для прикладного бакалавриата — М.: Издательство Юрайт, 2018. — 153 с.

Лабораторная работа №1

Моделирование и графическое представление функций в среде Python

Цель работы: познакомиться с базовым синтаксисом языка Python, основными


методами задания функций и элементарными математическими операциями и командами
в среде Python и пакете numpy, способами графического представления данных в пакете
matplotlib.

1.1. Краткие теоретические сведения


Любая функция может быть записана с помощью арифметических действий и
различных других функций. В Python представлены встроенные функции и
дополнительные, собранные в различные библиотеки. Чтобы пользоваться этими
дополнительными функциями, нужно перед их вызовом загрузить библиотеку, в которой
находятся данные функции, или загрузить сами функции из библиотек. Библиотеки для
удобства следует загружать под определенным сокращенным именем. Например, загрузим
библиотеку numpy под именем «np», воспользуемся функцией sin() из этой библиотеки и
выведем значение sin( ) :

In[]: import numpy as np


print(np.sin(pi))

Out[]: 0

Как видно, в Python перед именем вызываемой из некоторой библиотеки функции


записывается имя библиотеки, под которым мы ее загрузили.
Рассмотрим построение графика функции. Одной из основных библиотек в Python
для визуализации данных является библиотека matplotlib. Будем использовать для
построения графика функцию plot() из модуля pyplot библиотеки matplotlib.
Для построения функции необходимо создать набор значений аргумента. Этот
набор можно создать в виде массива с помощью функции arange(a,b,c) из библиотеки
numpy, где a – начало интервала аргумента, b – конец интервала, c – шаг аргумента.
Функция arange(a,b,c) создает набор значений от a включительно, до b не
включительно, с шагом c.
Для работы с числами в Python имеются встроенные арифметические операторы,
такие как сложение (+), вычитание (-), умножение (*), деление (/), возведение в
степень(**) и др. [https://pythonworld.ru/tipy-dannyx-v-python/chisla-int-float-complex.html;
https://devpractice.ru/python-lesson-4-arithmetic-operations/].
В качестве примера, построим график функции sin(x) на интервале от 0 до 20  ,
шаг аргумента 0.1 (Пример 1.1).

Пример 1.1. Построение графика функции sin(x) .

In[]:
1. import numpy as np
2. import matplotlib.pyplot as plt
3. x = np.arange(0, 20 * np.pi, 0.1)
4. plt.plot(x, np.sin(x),marker='*', color='r')
5. plt.show()

Out[]:

Рис. 1.1. Результат работы программы из примера 1.1

В этом примере мы использовали дополнительные возможности визуализации,


доступные в функции plot(). В частности, в качестве точек графика использован маркер
в виде звездочки «*», а его цвет выбран красным. Более подробно с многообразием стилей
отображения графиков можно ознакомиться в источниках [https://devpractice.ru/matplotlib-
lessons/, https://python-scripts.com/matplotlib, https://pythonworld.ru/novosti-mira-
python/scientific-graphics-in-python.html, https://jenyay.net/Matplotlib/Matplotlib]. Константу
 взяли из библиотеки numpy, (поэтому np.pi, а не просто pi).
В примере 1.1 мы использовали для размера рисунка и большинства других
параметров значения по умолчанию. Так, при выполнении команды plt.plot()
создавался стандартный рисунок (figure), стандартная область для рисования графика на
рисунке (axes), стандартные оси координат области для рисования (axis) и т.д. В Python
имеется возможность более детальной настройки рисунка и его элементов. Для
демонстрации этого подхода к построению рисунков, построим график функции из
примера 1.1 (Пример 1.2).

Пример 1.2. Построение графика функции sin(x) .

In[]:
1. import numpy as np
2. import matplotlib.pyplot as plt
3. x = np.arange(0, 20 * np.pi, 0.1)
4.
5. # Создаем фигуру
6. fig = plt.figure(figsize=(10,5)) # Задаем пропорции фигуры
7. ax = fig.add_subplot()# На созданную фигуру наносим оси координат
8.
9. ax.plot(x, np.sin(x),marker='*', color='r')
10. plt.show()

Out[]:

Рис. 1.2. Результат работы программы из примера 1.2.

В примере 1.2 мы сами создаем рисунок (fig = plt.figure), задаем его размер
(figsize=(10,5)), создаем область рисования (ax = fig.add_subplot()), и получаем тем
самым доступ ко всем элементам рисунка. В дальнейшем чаще всего будем использовать
именно этот подход к построению графиков.
Если выражение, представляющее функцию, довольно громоздкое, а к функции
приходятся часто обращаться, данную функцию в Python можно задать один раз как
некоторую новую функцию, и в дальнейшем в коде вызывать её. Рассмотрим способ
создания собственной функции.
Функция в Python  объект, принимающий аргументы и возвращающий значение.
Функция в Python задается с помощью инструкции def:

def название функции:


return выражение функции

Инструкция return определяет, что нужно вернуть значение стоящего за ней


выражения (Пример1.3).
Пример 1.3. Задание функции, возводящей выражение в степень 2.

In[]:
def kvadrat(limit):
return limit**2
print(kvadrat(10))

Out[]: 100

Код работает так: название функции задается в строке после слова def, после названия
функции в скобках указываются переменные функции (можно использовать для
переменной любое имя), в данном случае имя переменной «limit». При вызове функции
будет возвращаться выражение, стоящее после команды return, т.е. в данном случае
limit**2.
Особенностью синтаксиса языка Python является применение для объединения
нескольких строк в один блок форматирования в виде отступов строк в блоке (отступ
четыре пробела), вместо, например, ключевых слов «begin» и «end», обозначающих
начало и конец блока [https://pythonworld.ru/osnovy/sintaksis-yazyka-python.html]. Такое
форматирование применяется для задания функций, циклов, условий и т.д.
Графики разных функций можно строить в разных областях (subplot). В
matplotlib реализовано несколько способов создания рисунков с несколькими
областями: fig.add_axes(), fig.add_subplot(), plt.subplot() и т.д.
При использования методов fig.add_subplot() или plt.subplots() по
умолчанию оставляется некоторое свободное пространство между создаваемыми
областями. Изменять размер этих областей можно методом plt.tight_layout(). Метод
имеет четыре параметра:
 pad  расстояние между краями рисунка figure и краями subplots;
 h_pad  расстояние по вертикали между subplots;
 w_pad  расстояние по горизонтали между краями соседних subplots.
 rect  прямоугольник (левый, низ, правый, верх) в относительных координатах figure,
в который будут вписаны все области subplots.
1.2. Пример решения типового задания на языке Python
Построим для примера два графика одной функции: заданной с помощью команды
def и записанной непосредственно в функции plot(). Проверим, что графики не зависят
от способа задания функции.
Начинаем с импорта необходимых библиотек и модулей:

In[]:

1. import numpy as np
2. import matplotlib.pyplot as plt

Далее, создаем будущий рисунок:

3. fig = plt.figure(figsize=(15,5)) # Задаем пропорции рисунка


4. fig.suptitle('Построение графика функции', # Заголовок всего рисунка
5. y = 1.1, # Положение надписи в единицах размера рисунка
6. fontsize = 18) # Размер шрифта заголовка

Создаем набор значений аргумента:

7. x = np.arange(0, 20*np.pi, 0.1)

Задаем функцию:

8. def func(x):
9. return np.sin(x)*x

Создаем первую область для рисования графика:

10. ax1 = fig.add_subplot(121)

Команда subplot() создает область для построения рисунков в виде матрицы (или сетки).
Числа в скобках означают следующее: первое число – количество строк матрицы, второе –
количество столбцов, третье число – номер рисунка, нумерация начинантся с левого
верхнего угла.
Далее строим сам график и настраиваем его параметры и параметры первой
области рисования:

11. ax1.plot(x, func(x),


12. marker='*',
13. color='r',
14. label="Задание через def")
15. ax1.tick_params(axis = 'x', # Применяем параметры к оси х
16. labelrotation = 45) # Поворот подписей на 45 градусов
17. ax1.set_xlabel('x',fontsize=16)
18. ax1.set_ylabel('f(x)',fontsize=16)
19. ax1.tick_params(axis = 'both', # Применяем параметры к обеим осям
20. labelsize = 16) # Размер подписи
21. ax1.legend(fontsize=16)
22. ax1.grid(which='major',
23. color = 'gray',
24. linestyle = ':') # Добавляем линии основной сетки

То же самое делаем со второй областью:

25. ax2 = fig.add_subplot(122) # Создаем ворую область рисования


26. ax2.plot(x, np.sin(x)*x,
27. marker='*',
28. color='b',
29. label="Непосредственное применение sin(x)*x")
30. ax2.set_xlabel('x',fontsize=12)
31. ax2.set_ylabel('f(x)',fontsize=12)
32. ax2.tick_params(axis = 'both',
33. labelsize = 12)
34. ax2.legend(fontsize=12)
35. ax2.grid(which='major',
36. color = 'gray',
37. linestyle = '--')

Задаем расстояние между областями для рисования (subplot):

38. fig.tight_layout(w_pad = 5)

и выводим график:

39. plt.show()

Результат работы программы представлен на рисунке 1.3.

Рис. 1.3. Результат работы программы.

1.3. Задания для выполнения работы


В данной работе требуется провести компьютерное моделирование
математической функции средствами языка Python. Для этого нужно построить и сравнить
графики функции, заданной как некоторая новая функция пользователя с помощью
команды deff, и без создания новой функции путём записи математического выражения
функции и команды присваивания. Задание выполнить двумя вариантами: графики
функций рядом друг с другом в виде строки и графики один под другим в виде столбца.
Все получившиеся четыре графика выполнить разными цветами, разными маркерами и
разной толщиной линии (или размером маркера).
В ходе выполнения работы должны быть решены следующие задачи:
а) Сформулировать словесный алгоритм программы;
б) Построить блок-схему программы;
в) Написать код программы;
г) Сравнить графики функций;
д) Для графиков применить дополнительные возможности визуализации: разные цвета и
маркеры, размеры шрифтов, подписей осей и т.д.;
е) Сделать выводы и составить отчет.

Варианты индивидуального задания:


1) f ( x )  5 sin( 5 x )  x 2  x 3 , на интервале [0, 10 ] .
2) f ( x )  5 cos( 3 x )  x 2  x 2 , на интервале [0, 15 ]
3) f ( x )  5 sin( 5 x )  x  x 3 cos( x ) , на интервале [0, 20 ]
4) f ( x )  2 sin(10 x )  x cos( x ) , на интервале [0, 10 ]
5) f ( x )  5 x sin(5 x )  10 x cos( x ) , на интервале [0, 15 ]
6) f ( x )  x 2 sin( 2 x )  5 x cos( x 2 ) , на интервале [0, 6 ]
7) f ( x)  5 x 2 sin(7 x)  5 x cos( x) , на интервале [0, 10 ]
8) f ( x )  5 x 2 cos(5 x)  5 x 3 cos(2 x) , на интервале [0, 8 ]
9) f ( x )  5 x 2 cos(5 x )  5 x 3 sin( 3x ) , на интервале [0, 5 ]
10) f ( x )  cos(5 x 2 )  5 x 2 cos( x ) , на интервале [0, 5 ]
11) f ( x )  5 x sin(5 x 2 )  x 2 sin( 3x ) , на интервале [0, 5 ]
12) f ( x )  2 x 2 exp(5 x )  3 x 3 cos( 2 x ) , на интервале [0, 2 ]
13) f ( x )  5 x 2 cos(5 x )  5 exp(2 x ) , на интервале [0, 2 ]
14) f ( x )  5 x 2 cos( x ) cos( 2 x ) , на интервале [0, 3 ]
15) f ( x )  x 2  sin( x ) sin( 2 x ) , на интервале [0, 3 ]
16) f ( x )  3 x 2 cos( x ) sin( 2 x ) , на интервале [0, 3 ]
17) f ( x )  2 x 2 sin( 2  x ) cos( 2 x ) , на интервале [0, 3 ]
18) f ( x )  5 x 2 cos( x ) cos( 2 x  2) , на интервале [0, 3 ]
19) f ( x )  3 x 2 cos(0.1x 2 ) cos( 2 x ) , на интервале [0, 3 ]
20) f ( x )  5 x 2 cos( x ) cos( 2 x )  x , на интервале [0, 3 ]
21) f ( x )  5 x 2  cos( x ) cos( 2 x ) , на интервале [0, 3 ]
22) f ( x )  cos( x ) cos( 2 x )  x sin( x ) , на интервале [0, 4 ]
23) f ( x )  sin( x ) cos( 2 x )  x sin( x ) , на интервале [0, 4 ]
24) f ( x )  exp(0.1x ) cos( 2 x )  sin( x ) , на интервале [0, 4 ]
25) f ( x )  sin( x ) cos( 2 x )  exp(0.5 x ) , на интервале [0, 4 ]

1.4. Контрольные вопросы


1. Как задается функция в Python?
2. Что означает return в процедуре объявления функции?
3. В чем особенность форматирования кода в Python?
4. Для чего предназначена библиотека matplotlib?
5. Для чего предназначен пакет numpy?
6. Как вызывается функция из пакета?
7. Как построить несколько графиков с помощью библиотеки matplotlib?
8. Какая функция используется для построения двухмерного графика с помощью
библиотеки matplotlib?

Вам также может понравиться