Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабы 2022-2023 / 1 сем / Baraeva_Elizaveta_lb1

.pdf
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
243 Кб
Скачать
МИНОБРНАУКИ РОССИИ
САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ
ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
«ЛЭТИ» ИМ. В. И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра МО ЭВМ
ОТЧЕТ
по дисциплине «Информатика»
Тема: Основные управляющие конструкции языка 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 сем