Основы работы с блокнотом Jupyter Notebook и примеры решения задач

Структура блокнота и основные операции

Ячейка Markdown

Markdown - простой язык для оформления документов. Ячейки этого типа используются для пояснения методики расчетов. Помимо обычного текста, ячейка может содержать:

  • списки:

    1. первый
    2. второй
    3. третий
  • таблицы:
Заголовок 1 Заголовок 2
Ячейка 1 Ячейка 2
Ячейка 3 Ячейка 4
  • математические формулы: $ (x-a)^2 + (y-b)^2 = R^2 $,
  • изображения: Менделеев
  • другие объекты, которые можно разместить на веб-странице (с помощью HTML-тегов).

Ячейка кода

В ячейках кода необходимо писать команды в соответствии с правилами Python. Эти команды при вычислении ячейки интерпретируются и выполняются. Результат выводится сразу после ячейки.

При вычислении ячейки с кодом она получает последовательный номер ввода - In[?]. А результат вычисления ячейки - номер вывода - Out[?]:

In [ ]:
2 * 2

Режимы работы

  • режим выполнения (command mode) [Esc]
  • режим редактирования ячейки (edit mode) [Enter]

Выполнение кода в ячейках

  • Shift-Enter - выполнить и перейти к следующей
  • Ctrl-Enter - выполнить без перехода к следующей ячейке
  • Alt-Enter - выполнить и добавить новую ячейку ниже
In [ ]:
print('Hello!') # Потренируйтесь на этой ячейке

Справка по клавишам

Для часто выполняемых действий назначены "горячие" клавиши.

См. Help/Keyboard Shortcuts

Операции с блокнотом

  • создание
  • переименование
  • сохранение
  • загрузка (.ipynb и .html)
  • открытие существующего блокнота
  • nbviewer

Примеры решения задач

Построение графика функции одной переменной

Построить в одной системе координат графики функций:

  • $ f_1(x) = x^2 - 4 $
  • $ f_2(x) = x + 4$
In [ ]:
# Подключаем пакеты:
import numpy as np #работа с массивами
import matplotlib.pyplot as plt #графики
# Инициализация отображения графиков в блокноте:
%matplotlib inline 
In [ ]:
# Задаем диапазон изменения независимой переменной:
x = np.linspace(-5, 5, 21)

# Задаем функции:
f1 = lambda x: x**2 - 4
f2 = lambda x: x + 4
In [ ]:
# График "по-быстрому"
plt.plot(x, f1(x))
plt.plot(x, f2(x));
In [ ]:
# График красивый
plt.plot(x, f1(x), label='$f_1(x)$')
plt.plot(x, f2(x), label='$f_2(x)$')
plt.xlabel('$x$', fontsize=16)
plt.title('График функции', fontsize=18)
plt.legend(loc='best', fontsize=14);

Задание: Построить "красивый" график функций: sin(x) и cos(x) на интервале $(-4\pi;4\pi)$

Совет: необходимые функции и константа содержатся в пакете numpy. К ним можно обратиться так: np.pi, np.sin()

In [ ]:
# Здесь ваш код

Работа с матрицами

Вычислить скалярное произведение векторов: $V (1, 0, 0)$ и $W (6, 5, 4)$

In [ ]:
V = np.array([1, 0, 0])
W = np.array([6, 5, 4])

V.dot(W)

Для заданной матрицы

$$ A = \begin{pmatrix} 1 & -2 & -3\\ 4 & 5 & 6\\ 7 & 8 & 9\\ \end{pmatrix} $$

вычислить:

  • $A^T$,
  • $|A|$,
  • ранг $A$,
  • $A^{-1}$,
  • $A^{-1}A$,
  • $A\cdot V$
In [ ]:
# Задаем матрицу:
A = np.matrix([[1, -2, -3],
              [4, 5, 6],
              [7, 8, 9]])
A
In [ ]:
# Транспонирование:
A.T
In [ ]:
# Определитель:
np.linalg.det(A)
In [ ]:
np.round(np.linalg.det(A)) #округление
In [ ]:
# Ранг:
np.linalg.matrix_rank(A)
In [ ]:
# Обратная матрица:
A.I
In [ ]:
# Произведение матриц:
A.I * A
In [ ]:
np.round(A.I * A)
In [ ]:
# Произведение матрицы на вектор:
print(A, V)
A.dot(V)

Задание: Проверить, имеет ли решение данная система линейных уравнений:

$ \left{ \begin{array}\\ x - y + z = 1 \\ y + 2z = 2 \\ x + z = 3 \end{array} \right. $

Если решение существует, то найти его

Построение графика функции двух переменных

Пусть требуется построить график функции: $ g(x,y) = \sin \sqrt{x^2 + y^2} $

In [ ]:
g = lambda x, y: np.sin(np.sqrt(x**2 + y**2))
In [ ]:
# Интервалы изменения по X и Y
x = np.linspace(-5, 5, 101)
y = x
In [ ]:
# Координаты узлов сетки для построения графика
X, Y = np.meshgrid(x, y)
In [ ]:
# Значения функции в узлах сетки
Z = g(X, Y)
In [ ]:
# Графики встраиваются в блокнот
%matplotlib inline

Способ 1: Визуализация матрицы значений функции в узлах сетки как изображения

In [ ]:
plt.imshow(Z, cmap=plt.cm.viridis)
plt.colorbar();

Способ 2: Контурный график

In [ ]:
plt.contourf(X, Y, Z, 50, cmap = plt.cm.viridis)
plt.colorbar()
contours = plt.contour(X, Y, Z, 5, colors='black')
plt.clabel(contours, inline=1);

Способ 3: График поверхности

In [ ]:
# График в отдельном окне
%matplotlib
In [ ]:
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot_surface(X, Y, Z, alpha=0.3, cmap=plt.cm.viridis, linewidth=0, rstride=4, cstride=4)

ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
ax.set_title('График поверхности')

# Направление обзора и расстояние до наблюдателя
ax.view_init(elev=45, azim=23)
#ax.dist=6

plt.show()

Задание: Требуется построить контурный график и поверхность функции Розенброка:

$f(x,y) = (1-x)^2 + 100(y-x^2)^2 $

Интересным является поведение функции в окрестности точки $(0, 0)$

Символьная математика

Символьные вычисления (symbolic math) используются для аналитического решения математических задач. Например, можно вычислять производные, интегралы, оперировать с матрицами, искать корни уравнений, упрощать выражения...

В Python символьные вычисления реализованы в пакете SymPy.

Исследование функции

Необходимо найти нули и экстремумы функции:

$ f(x) = x^2 - 2x + 1 $

In [ ]:
import sympy as sp
sp.init_printing() 
In [ ]:
x = sp.symbols('x') # Переменная x теперь содержит символ 'x'
In [ ]:
f = x**2 - 2*x + 1  - 4# Выражение для функции
f
In [ ]:
# График функции
%matplotlib inline
sp.plot(f, (x, -2, 4)); #sympy содержит свою функцию для быстрого построения графиков

Нули функции:

In [ ]:
sp.solve(f, x) #Корни уравнения f(x) = 0

Производная:

In [ ]:
df = f.diff(x)
df
In [ ]:
# Вычислить значение производной при x = 5:
df.subs(x, 5)

Стационарные точки:

In [ ]:
sp.solve(df) # Точки, в которых производная равна 0

Тип экстремума:

In [ ]:
f.diff(x, 2) # Вторая производная

Знак второй производной положителен, следовательно найден минимум

Задание: Найти экстремумы функции: $ f(x) = x^4 - 4x^3 - 8x^2$ и определить их тип.

Проверить решение с помощью графика