Добавил:
baraevaliza
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабы 2022-2023 / 1 сем / Baraeva_Elizaveta_lb1
.pdf
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В. И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра МО ЭВМ
ОТЧЕТ
по лабораторной работе №1
по дисциплине «Информатика»
Тема: Основные управляющие конструкции языка Python
Студентка гр. 2383
Бараева Е. Н.
Преподаватель
Шевская Н. В.
Санкт-Петербург
2022

2
Цель работы.
Научиться пользоваться основными управляющими конструкции языка
Python в том числе модулем numpy.
Задание.
Вариант 1
Задача 1.
Оформите решение в виде отдельной функции check_collision. На вход
функции подаются два ndarray -- коэффициенты bot1, bot2 уравнений прямых
bot1 = (a1, b1, c1), bot2 = (a2, b2, c2) (уравнение прямой имеет вид
ax+by+c=0). Функция должна возвращать точку пересечения траекторий
(кортеж из 2 значений), предварительно округлив координаты до 2 знаков
после запятой с помощью round(value, 2).
Примечание: помните про ранг матрицы и как от него зависит наличие
решения системы уравнений. В случае, если решение найти невозможно
(например, из-за линейно зависимых векторов), функция должна вернуть
None.
Задача 2.
Оформите задачу как отдельную функцию check_surface, на вход которой
передаются координаты 3 точек (3 ndarray 1 на 3): point1, point2, point3.
Функция должна возвращать коэффициенты a, b, с в виде ndarray для
уравнения плоскости вида ax+by+c=z. Перед возвращением результата
выполнение округление каждого коэффициента до 2 знаков после запятой с
помощью round(value, 2).
Примечание: помните про ранг матрицы и как от него зависит
существование решения системы уравнений. В случае, если решение найти
невозможно (невозможно найти коэффициенты плоскости из-за, например,
линейно зависимых векторов), функция должна вернуть None.
Задача 3.

3
Оформите решение в виде отдельной функции check_rotation. На вход
функции подаются ndarray 3-х координат дакибота и угол поворота. Функция
возвращает повернутые ndarray координаты, каждая из которых округлена до
2 знаков после запятой с помощью round(value, 2).
Выполнение работы.
На вход функции check_collision подаются 2 массива (bot1, bot2) с
коэффициентами уравнения прямой. Для того чтобы найти точку пересечения,
была создана матрица a_b с коэффициентами при x, y и была создана матрица
c со свободными коэффициентами. Затем с помощью функции
np.linalg.matrix_rank() были вычислены ранги созданных матриц. Потом
через цикл for возвращается результат решения двух матриц с округлением до
2 знаков после запятой, если решения нет, то возвращается None.
На вход функции check_surface подаются 3 массива (point1, point2, point3)
с координатами точек. Для того чтобы найти уравнение плоскости, были
созданы 2 матрицы z и x_y_c с помощью функции np.array(). Затем также
были вычислены ранги, посчитан результат и произведен возврат.
На вход функции check_rotation подается массив с тремя координатами
vec и угол поворота rad. Для изменения угла поворота, была создана матрица
изменения угла rotation_matrix. Матрица с измененными координатами была
вычислена с помощью функции np.dot(). Затем было округление матрицы до
2 знаков после запятой и возвращение ее.
Разработанный программный код см. в приложении А.
Тестирование.
Результаты тестирования представлены в табл. 1.

4
Таблица 1 – Результаты тестирования
№ п/п
Входные данные
Выходные данные
Комментарии
1.
check_collision([-3, -6, 9],
[8, -7, 0])
(0.91, 1.04)
Проверка функции
check_collision.
Верно.
2.
check_collision([100, 0,
100], [100, 0, 0])
None
Проверка функции
check_collision.
Верно.
3.
check_surface([1, -6, 1], [0,
-3, 2], [-3, 0, -1])
[2. 1. 5.]
Проверка функции
check_surface.
Верно.
4.
check_surface([100, 0,
100], [100, 0, 0], [0, 0,
-100])
None
Проверка функции
check_surface.
Верно.
5.
check_rotation([1, -2, 3],
1.57)
[2. 1. 3.]
Проверка функции
check_rotation.
Верно.
6.
check_rotation([-5, 7, 1],
-2.657)
[ 7.69 -3.86 1. ]
Проверка функции
check_rotation.
Верно.
Вывод.
Были изучены основные управляющие конструкции языка Python.
Разработаны 3 функции, выполняющие различные задачи с использованием
модуля numpy, в частности numpy.linalg.

5
ПРИЛОЖЕНИЕ А
ИСХОДНЫЙ КОД ПРОГРАММЫ
Название файла: main_lb1.py
import numpy as np
def check_collision(bot1, bot2):
a_b = np.array(([bot1[0], bot1[1]], [bot2[0], bot2[1]]))
c = np.array(([-bot1[2]], [-bot2[2]]))
Rank_a_b = np.linalg.matrix_rank(a_b)
Rank_c = np.linalg.matrix_rank(c)
if Rank_c >= 1 and Rank_a_b >= 2:
result = np.linalg.solve(a_b, c)
answer = round(result[0][0], 2), round(result[1][0], 2)
return answer
else:
return None
def check_surface(point1, point2, point3):
z = np.array(([point1[2]], [point2[2]], [point3[2]]))
point1[2], point2[2], point3[2] = 1, 1, 1
x_y_c = np.array((point1, point2, point3))
Rank_x_y_c = np.linalg.matrix_rank(x_y_c)
Rank_z = np.linalg.matrix_rank(z)
if Rank_z >= 1 and Rank_x_y_c >= 3:
result = np.linalg.solve(x_y_c, z)
answer = np.array((round(result[0][0], 2),
round(result[1][0], 2), round(result[2][0], 2)))
return answer
else:
return None
def check_rotation(vec, rad):
rotation_matrix = np.array(([np.cos(rad), -np.sin(rad), 0],
[np.sin(rad), np.cos(rad), 0], [0, 0, 1]))
vec = np.array(vec)
result = np.dot(rotation_matrix, vec)
answer = np.array((round(result[0], 2), round(result[1], 2),
round(result[2], 2)))
return answer
Соседние файлы в папке 1 сем
