Загрузка данных



import math
import numpy as np

# ==========================================
# ЗАДАНИЕ 11. БИБЛИОТЕКИ MATH И NUMPY
# ==========================================


# 1. Библиотека Math: константы и функции
print("========== ПУНКТ 1. БИБЛИОТЕКА MATH ==========")

print("Число pi =", math.pi)
print("Число e =", math.e)

print("Квадратный корень из 25 =", math.sqrt(25))

degrees = 180
radians = math.radians(degrees)

print(degrees, "градусов в радианах =", radians)
print(radians, "радиан в градусах =", math.degrees(radians))


# 2. Квадратный корень и перевод градусов
print("\n========== ПУНКТ 2. МАТЕМАТИЧЕСКИЕ ФУНКЦИИ ==========")

number = 144
print("Квадратный корень из", number, "=", math.sqrt(number))

angle = 90
print("90 градусов в радианах =", math.radians(angle))
print("1.5708 радиан в градусах =", math.degrees(1.5708))


# 3. Матрицы NumPy: копирование и умножение
print("\n========== ПУНКТ 3. МАТРИЦЫ NUMPY ==========")

# Создаём случайную матрицу размером 3x10
A = np.random.randint(1, 10, size=(3, 10))
print("Исходная матрица A:")
print(A)

# Транспонируем матрицу
A_T = A.T
print("\nТранспонированная матрица A.T:")
print(A_T)

# Простое присваивание: B ссылается на ту же матрицу, что и A
B = A

# Создаём независимую копию
C = A.copy()

# Изменяем элемент B (это также изменит A)
B[0, 0] = 100
print("\nМатрица B после изменения:")
print(B)
print("Матрица A после изменения B:")
print(A)

# Изменяем элемент независимой копии C
C[0, 1] = 200
print("\nМатрица C после изменения:")
print(C)
print("Матрица A после изменения C:")
print(A)

# Сравниваем матрицы
print("\nA и B одинаковы:", np.array_equal(A, B))
print("A и C одинаковы:", np.array_equal(A, C))

# Поэлементное умножение
print("\nПоэлементное умножение A * C:")
print(A * C)

# Матричное умножение
print("\nМатричное умножение A @ A.T:")
print(A @ A.T)


# 4. Метод наименьших квадратов (МНК)
print("\n========== ПУНКТ 4. МЕТОД НАИМЕНЬШИХ КВАДРАТОВ ==========")

# Матрица A размером 3x10 и вектор B длиной 10
A = np.random.rand(3, 10)
B = np.random.rand(10)

print("Матрица A:")
print(A)

print("\nВектор B:")
print(B)

# Способ 1: решение через нормальные уравнения
X1 = np.linalg.solve(A @ A.T, A @ B)
print("\nРешение через матричные операции:")
print(X1)

# Способ 2: функция numpy.linalg.lstsq
X2 = np.linalg.lstsq(A.T, B, rcond=None)[0]
print("\nРешение через numpy.linalg.lstsq:")
print(X2)

# Сравниваем результаты
print("\nРезультаты практически совпадают:", np.allclose(X1, X2))


# 5. Последовательности: range, arange, linspace
print("\n========== ПУНКТ 5. ПОСЛЕДОВАТЕЛЬНОСТИ ==========")

# range — встроенная функция Python
a = range(0, 11)
print("range:", list(a))
print("Тип данных:", type(a))

# arange — массив NumPy с шагом 1
b = np.arange(0, 11)
print("\narange:", b)
print("Тип данных:", type(b))

# linspace — 11 равномерных точек от 0 до 10 включительно
c = np.linspace(0, 10, 11)
print("\nlinspace:", c)
print("Тип данных:", type(c))


print("\n========== ПРОГРАММА ЗАВЕРШЕНА ==========")