Markdown - простой язык для оформления документов. Ячейки этого типа используются для пояснения методики расчетов. Помимо обычного текста, ячейка может содержать:
Заголовок 1 | Заголовок 2 |
---|---|
Ячейка 1 | Ячейка 2 |
Ячейка 3 | Ячейка 4 |
В ячейках кода необходимо писать команды в соответствии с правилами Python. Эти команды при вычислении ячейки интерпретируются и выполняются. Результат выводится сразу после ячейки.
При вычислении ячейки с кодом она получает последовательный номер ввода - In[?]
. А результат вычисления ячейки - номер вывода - Out[?]
:
2 * 2
Shift-Enter
- выполнить и перейти к следующейCtrl-Enter
- выполнить без перехода к следующей ячейкеAlt-Enter
- выполнить и добавить новую ячейку нижеprint('Hello!') # Потренируйтесь на этой ячейке
Для часто выполняемых действий назначены "горячие" клавиши.
См. Help/Keyboard Shortcuts
Построить в одной системе координат графики функций:
# Подключаем пакеты:
import numpy as np #работа с массивами
import matplotlib.pyplot as plt #графики
# Инициализация отображения графиков в блокноте:
%matplotlib inline
# Задаем диапазон изменения независимой переменной:
x = np.linspace(-5, 5, 21)
# Задаем функции:
f1 = lambda x: x**2 - 4
f2 = lambda x: x + 4
# График "по-быстрому"
plt.plot(x, f1(x))
plt.plot(x, f2(x));
# График красивый
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()
# Здесь ваш код
Вычислить скалярное произведение векторов: $V (1, 0, 0)$ и $W (6, 5, 4)$
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 = np.matrix([[1, -2, -3],
[4, 5, 6],
[7, 8, 9]])
A
# Транспонирование:
A.T
# Определитель:
np.linalg.det(A)
np.round(np.linalg.det(A)) #округление
# Ранг:
np.linalg.matrix_rank(A)
# Обратная матрица:
A.I
# Произведение матриц:
A.I * A
np.round(A.I * A)
# Произведение матрицы на вектор:
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} $
g = lambda x, y: np.sin(np.sqrt(x**2 + y**2))
# Интервалы изменения по X и Y
x = np.linspace(-5, 5, 101)
y = x
# Координаты узлов сетки для построения графика
X, Y = np.meshgrid(x, y)
# Значения функции в узлах сетки
Z = g(X, Y)
# Графики встраиваются в блокнот
%matplotlib inline
plt.imshow(Z, cmap=plt.cm.viridis)
plt.colorbar();
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);
# График в отдельном окне
%matplotlib
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 $
import sympy as sp
sp.init_printing()
x = sp.symbols('x') # Переменная x теперь содержит символ 'x'
f = x**2 - 2*x + 1 - 4# Выражение для функции
f
# График функции
%matplotlib inline
sp.plot(f, (x, -2, 4)); #sympy содержит свою функцию для быстрого построения графиков
Нули функции:
sp.solve(f, x) #Корни уравнения f(x) = 0
Производная:
df = f.diff(x)
df
# Вычислить значение производной при x = 5:
df.subs(x, 5)
Стационарные точки:
sp.solve(df) # Точки, в которых производная равна 0
Тип экстремума:
f.diff(x, 2) # Вторая производная
Знак второй производной положителен, следовательно найден минимум
Задание: Найти экстремумы функции: $ f(x) = x^4 - 4x^3 - 8x^2$ и определить их тип.
Проверить решение с помощью графика