1 и 2 задача
This commit is contained in:
		
							parent
							
								
									700492ca5f
								
							
						
					
					
						commit
						f061197107
					
				@ -2,6 +2,12 @@ chezahuynya1
 | 
			
		||||
=============
 | 
			
		||||
 | 
			
		||||
bts metodi 1
 | 
			
		||||
1 +
 | 
			
		||||
2 +
 | 
			
		||||
3 -
 | 
			
		||||
4 -
 | 
			
		||||
5 -
 | 
			
		||||
6 -
 | 
			
		||||
 | 
			
		||||
--------
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										74
									
								
								app/menu_load.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								app/menu_load.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,74 @@
 | 
			
		||||
from app.utils.system import clear_console
 | 
			
		||||
from app.zadachi.zadacha1 import zadacha1
 | 
			
		||||
from app.zadachi.zadacha2 import zadacha2
 | 
			
		||||
 | 
			
		||||
class pod_menu:
 | 
			
		||||
    
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        pass  # Конструктор пока пустой, при необходимости можно добавить параметры
 | 
			
		||||
 | 
			
		||||
    def zadacha1_menu():
 | 
			
		||||
        """Меню для задачи 1 с подкатегориями."""
 | 
			
		||||
        clear_console()
 | 
			
		||||
        while True:
 | 
			
		||||
            print('\nЗадача 1:')
 | 
			
		||||
            print('1. линейно')
 | 
			
		||||
            print('2. квадратично')
 | 
			
		||||
            print('0. Назад')
 | 
			
		||||
 | 
			
		||||
            choice = input('Выберите подкатегорию: ')
 | 
			
		||||
 | 
			
		||||
            clear_console()
 | 
			
		||||
            z1 = zadacha1()  # создаем объект для задачи 1
 | 
			
		||||
 | 
			
		||||
            if choice == '1':
 | 
			
		||||
                z1.plot_lin_data()  # Выполнить первую подзадачу
 | 
			
		||||
                #return  # Вернуться в основное меню после выполнения
 | 
			
		||||
            elif choice == '2':
 | 
			
		||||
                z1.plot_sqr_data()  # Выполнить вторую подзадачу
 | 
			
		||||
                #return  # Вернуться в основное меню после выполнения
 | 
			
		||||
            elif choice == '0':
 | 
			
		||||
                break  # Вернуться в основное меню
 | 
			
		||||
            else:
 | 
			
		||||
                print('Неверный выбор, попробуйте снова.')
 | 
			
		||||
 | 
			
		||||
    def zadacha2_menu():
 | 
			
		||||
        """Меню для задачи 2 (расчет коэффициентов методом наименьших квадратов)."""
 | 
			
		||||
        clear_console()
 | 
			
		||||
        z1 = zadacha1()  # Используем объект задачи 1 для генерации данных
 | 
			
		||||
        z2 = zadacha2()  # Создаем объект для задачи 2
 | 
			
		||||
        
 | 
			
		||||
        while True:
 | 
			
		||||
            print('\nЗадача 2:')
 | 
			
		||||
            print('1. Рассчитать коэффициенты b0 и b1 для линейной модели')
 | 
			
		||||
            print('2. Сделать прогноз по рассчитанным коэффициентам')
 | 
			
		||||
            print('0. Назад')
 | 
			
		||||
 | 
			
		||||
            choice = input('Выберите подкатегорию: ')
 | 
			
		||||
 | 
			
		||||
            clear_console()
 | 
			
		||||
 | 
			
		||||
            if choice == '1':
 | 
			
		||||
                # Генерация линейных данных с помощью функции из задачи 1
 | 
			
		||||
                x_data, y_data = z1.create_lin_array()
 | 
			
		||||
 | 
			
		||||
                # Рассчет коэффициентов b0 и b1 методом наименьших квадратов
 | 
			
		||||
                b0, b1 = z2.calculate_coefficients(x_data, y_data)
 | 
			
		||||
 | 
			
		||||
                print(f'Рассчитанные коэффициенты:')
 | 
			
		||||
                print(f'b0 (свободный член) = {b0}')
 | 
			
		||||
                print(f'b1 (коэффициент наклона) = {b1}')
 | 
			
		||||
            elif choice == '2':
 | 
			
		||||
                # Пример предсказания на новых данных
 | 
			
		||||
                x_data, y_data = z1.create_lin_array()  # Сначала генерируем данные
 | 
			
		||||
                b0, b1 = z2.calculate_coefficients(x_data, y_data)  # Рассчитываем коэффициенты
 | 
			
		||||
 | 
			
		||||
                # Выполняем прогноз
 | 
			
		||||
                predicted_y = z2.predict(x_data, b0, b1)
 | 
			
		||||
 | 
			
		||||
                print(f'Предсказанные значения Y на основе рассчитанных коэффициентов:')
 | 
			
		||||
                print(predicted_y)
 | 
			
		||||
            elif choice == '0':
 | 
			
		||||
                break  # Вернуться в основное меню
 | 
			
		||||
            else:
 | 
			
		||||
                print('Неверный выбор, попробуйте снова.')
 | 
			
		||||
@ -0,0 +1,60 @@
 | 
			
		||||
import numpy as np
 | 
			
		||||
import matplotlib.pyplot as plt
 | 
			
		||||
 | 
			
		||||
class zadacha1:
 | 
			
		||||
    
 | 
			
		||||
    def __init__(self):
 | 
			
		||||
        pass  # Конструктор пока пустой, при необходимости можно добавить параметры
 | 
			
		||||
    
 | 
			
		||||
    # Метод для генерации линейного массива данных
 | 
			
		||||
    def create_lin_array(self, b0=2, b1=4, N=500, noise_std=10):
 | 
			
		||||
        """
 | 
			
		||||
        Генерация массива данных по линейной зависимости Y = b0 + b1 * X + error
 | 
			
		||||
        :param b0: свободный коэффициент
 | 
			
		||||
        :param b1: коэффициент при X
 | 
			
		||||
        :param N: количество точек данных
 | 
			
		||||
        :param noise_std: стандартное отклонение для случайной ошибки
 | 
			
		||||
        :return: массивы X и Y
 | 
			
		||||
        """
 | 
			
		||||
        X = np.linspace(1, 500, N)  # создаем массив X с равномерным шагом
 | 
			
		||||
        error = np.random.normal(0, noise_std, N)  # генерируем шум
 | 
			
		||||
        Y = b0 + b1 * X + error  # генерируем Y по линейному закону
 | 
			
		||||
        return X, Y
 | 
			
		||||
 | 
			
		||||
    # Метод для генерации квадратичного массива данных
 | 
			
		||||
    def create_sqr_array(self, a=1, b=3, c=2, N=500, noise_std=10):
 | 
			
		||||
        """
 | 
			
		||||
        Генерация массива данных по квадратичной зависимости Y = a * X^2 + b * X + c + error
 | 
			
		||||
        :param a: коэффициент при X^2
 | 
			
		||||
        :param b: коэффициент при X
 | 
			
		||||
        :param c: свободный коэффициент
 | 
			
		||||
        :param N: количество точек данных
 | 
			
		||||
        :param noise_std: стандартное отклонение для случайной ошибки
 | 
			
		||||
        :return: массивы X и Y
 | 
			
		||||
        """
 | 
			
		||||
        X = np.linspace(1, 500, N)  # создаем массив X
 | 
			
		||||
        error = np.random.normal(0, noise_std, N)  # генерируем шум
 | 
			
		||||
        Y = a * X**2 + b * X + c + error  # генерируем Y по квадратичному закону
 | 
			
		||||
        return X, Y
 | 
			
		||||
 | 
			
		||||
    # Метод для отображения графика линейных данных
 | 
			
		||||
    def plot_lin_data(self, b0=2, b1=4, N=500, noise_std=10):
 | 
			
		||||
        """
 | 
			
		||||
        Отображение сгенерированных линейных данных и теоретической линии
 | 
			
		||||
        """
 | 
			
		||||
        X, Y = self.create_lin_array(b0, b1, N, noise_std)  # Генерация данных
 | 
			
		||||
        plt.scatter(X, Y)  # График рассеяния
 | 
			
		||||
        plt.plot(X, b0 + b1 * X, color='red')  # Линейная функция без шума
 | 
			
		||||
        plt.title("Линейная зависимость с шумом")
 | 
			
		||||
        plt.show()
 | 
			
		||||
 | 
			
		||||
    # Метод для отображения графика квадратичных данных
 | 
			
		||||
    def plot_sqr_data(self, a=1, b=3, c=2, N=500, noise_std=10):
 | 
			
		||||
        """
 | 
			
		||||
        Отображение сгенерированных квадратичных данных и теоретической кривой
 | 
			
		||||
        """
 | 
			
		||||
        X, Y = self.create_sqr_array(a, b, c, N, noise_std)  # Генерация данных
 | 
			
		||||
        plt.scatter(X, Y)  # График рассеяния
 | 
			
		||||
        plt.plot(X, a * X**2 + b * X + c, color='red')  # Квадратичная функция без шума
 | 
			
		||||
        plt.title("Квадратичная зависимость с шумом")
 | 
			
		||||
        plt.show()
 | 
			
		||||
@ -0,0 +1,35 @@
 | 
			
		||||
import numpy as np
 | 
			
		||||
 | 
			
		||||
class zadacha2:
 | 
			
		||||
    def calculate_coefficients(self, X, Y):
 | 
			
		||||
        """
 | 
			
		||||
        Функция для расчета коэффициентов b0 и b1 по методу наименьших квадратов (МНК)
 | 
			
		||||
        :param X: массив значений независимой переменной
 | 
			
		||||
        :param Y: массив значений зависимой переменной
 | 
			
		||||
        :return: коэффициенты b0 и b1
 | 
			
		||||
        """
 | 
			
		||||
        n = len(X)
 | 
			
		||||
        
 | 
			
		||||
        # Вычисляем средние значения X и Y
 | 
			
		||||
        mean_x = np.mean(X)
 | 
			
		||||
        mean_y = np.mean(Y)
 | 
			
		||||
        
 | 
			
		||||
        # Вычисляем коэффициент b1
 | 
			
		||||
        numerator = np.sum((X - mean_x) * (Y - mean_y))
 | 
			
		||||
        denominator = np.sum((X - mean_x) ** 2)
 | 
			
		||||
        b1 = numerator / denominator
 | 
			
		||||
        
 | 
			
		||||
        # Вычисляем коэффициент b0
 | 
			
		||||
        b0 = mean_y - b1 * mean_x
 | 
			
		||||
        
 | 
			
		||||
        return b0, b1
 | 
			
		||||
 | 
			
		||||
    def predict(self, X, b0, b1):
 | 
			
		||||
        """
 | 
			
		||||
        Функция для предсказания значений Y на основе коэффициентов b0 и b1
 | 
			
		||||
        :param X: массив значений независимой переменной
 | 
			
		||||
        :param b0: коэффициент b0 (свободный член)
 | 
			
		||||
        :param b1: коэффициент b1 (коэффициент при X)
 | 
			
		||||
        :return: предсказанные значения Y
 | 
			
		||||
        """
 | 
			
		||||
        return b0 + b1 * X
 | 
			
		||||
							
								
								
									
										0
									
								
								app/zadachi/zadacha4.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/zadachi/zadacha4.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								app/zadachi/zadacha5.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/zadachi/zadacha5.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										0
									
								
								app/zadachi/zadacha6.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								app/zadachi/zadacha6.py
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										11
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								main.py
									
									
									
									
									
								
							@ -1,23 +1,24 @@
 | 
			
		||||
 | 
			
		||||
from app.utils.config import debug
 | 
			
		||||
from app.utils.system import clear_console
 | 
			
		||||
#from test_module import *
 | 
			
		||||
from app.menu_load import pod_menu
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def main_menu():
 | 
			
		||||
    clear_console()
 | 
			
		||||
    while True:
 | 
			
		||||
        print('\nMain Menu:')
 | 
			
		||||
        print('1. Start')
 | 
			
		||||
        print('1. Задача 1')
 | 
			
		||||
        print('2. Задача 2')
 | 
			
		||||
        print('0. Exit')
 | 
			
		||||
 | 
			
		||||
        choice = input('Select an option: ')
 | 
			
		||||
 | 
			
		||||
        clear_console()
 | 
			
		||||
        if choice == '1':
 | 
			
		||||
            #return test()
 | 
			
		||||
            return
 | 
			
		||||
 | 
			
		||||
            pod_menu.zadacha1_menu()  # Переход к подменю Задачи 1
 | 
			
		||||
        elif choice == '2':
 | 
			
		||||
            pod_menu.zadacha2_menu()  # Переход к подменю Задачи 2
 | 
			
		||||
        elif choice == '0':
 | 
			
		||||
            print('Exiting program...')
 | 
			
		||||
            break
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user