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

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

.doc
Скачиваний:
0
Добавлен:
09.09.2026
Размер:
60 Кб
Скачать

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В. И. Ульянова (Ленина)

Кафедра МО ЭВМ

отчет

по лабораторной работе №1

по дисциплине «Информатика»

Тема: Основные управляющие конструкции языка Python

Студентка гр. 2383

Бараева Е. Н.

Преподаватель

Шевская Н. В.

Санкт-Петербург

2022

Цель работы.

Научиться пользоваться основными управляющими конструкции языка 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.

Оформите решение в виде отдельной функции 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.

Таблица 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.

ПРИЛОЖЕНИЕ А ИСХОДНЫЙ КОД ПРОГРАММЫ

Название файла: 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

pass

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

pass

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

pass

5

Соседние файлы в папке 1 сем