Community

이게 맞나??

클로드를 이용해서 코드를 짰는 데 왜 변화가 없을까 앞으로는 어케 해야할까? import numpy as np import matplotlib.pyplot as plt import math class Line: """직선 클래스: y = ax + b""" def __init__(self, a, b): self.a = a # 기울기 self.b = b # y절편 class Quadratic: def __init__(self, a, b, c): if a == 0: raise ValueError("a는 0이 될 수 없습니다.") self.a = a self.b = b self.c = c self.domain = np.linspace(-10, 10, 100) self.range = self.a * self.domain**2 + self.b * self.domain + self.c @classmethod def from_vertex_form(cls, a, h, k): """꼭짓점 형태 y = a(x-h)² + k 로 생성""" return cls(a, -2*a*h, a*h**2 + k) @classmethod def from_roots(cls, a, r1, r2): """두 근으로부터 이차함수 생성""" b = -a * (r1 + r2) # 수정: 곱셈 연산자 명시 c = a * r1 * r2 return cls(a, b, c) # 수정: b도 전달 def discriminant(self): """판별식 D = b² - 4ac""" return self.b**2 - 4*self.a*self.c def vertex(self): """꼭짓점 구하기""" h = -self.b / (2*self.a) k = self.a*h**2 + self.b*h + self.c return h, k def axis_of_symmetry(self): """대칭축 구하기""" return -self.b / (2*self.a) def intersection(self, line): """이차함수와 직선의 교점 구하기 이차함수: y = ax² + bx + c 직선: y = mx + n 교점: ax² + (b-m)x + (c-n) = 0 """ # 수정: 직선의 계수를 올바르게 사용 A = self.a B = self.b - line.a # 이차함수의 b - 직선의 기울기 C = self.c - line.b # 이차함수의 c - 직선의 y절편 # 판별식 D = B**2 - 4*A*C if D < 0: return None # 교점 없음 try: if D == 0: x = -B / (2*A) y = line.a * x + line.b return [(x, y)] else: sqrt_D = math.sqrt(D) x1 = (-B - sqrt_D) / (2*A) x2 = (-B + sqrt_D) / (2*A) y1 = line.a * x1 + line.b y2 = line.a * x2 + line.b return [(x1, y1), (x2, y2)] except ZeroDivisionError: raise ValueError("계산 오류") def plot(self, line=None): """이차함수 그리기 (직선도 함께 그릴 수 있음)""" plt.rcParams['font.family'] = 'Malgun Gothic' plt.rcParams['axes.unicode_minus'] = False plt.figure(figsize=(10, 6)) plt.plot(self.domain, self.range, 'b-', linewidth=2, label='이차함수') # 직선도 그리기 if line: line_y = line.a * self.domain + line.b plt.plot(self.domain, line_y, 'r-', linewidth=2, label='직선') # 교점 표시 points = self.intersection(line) if points: for x, y in points: plt.plot(x, y, 'go', markersize=10, label=f'교점 ({x:.2f}, {y:.2f})') plt.axhline(0, color="black", linewidth=0.5) plt.axvline(0, color="black", linewidth=0.5) plt.grid(color="gray", linestyle="--", linewidth=0.5) plt.legend() plt.show() if __name__ == "__main__": # 테스트 1: 기본 이차함수 plt.subplot(2,2,1) q1 = Quadratic(1, -2, 1) q1.plot() # 테스트 2: 꼭짓점으로 생성 q2 = Quadratic.from_vertex_form(1, 2, -3) print(f"꼭짓점: {q2.vertex()}") print(f"대칭축: {q2.axis_of_symmetry()}") # 테스트 3: 근으로 생성 q3 = Quadratic.from_roots(1, 2, 3) print(f"근으로 생성한 함수의 꼭짓점: {q3.vertex()}") plt.subplot(2,2,2) q3.plot() # 테스트 4: 직선과의 교점 q4 = Quadratic(1, 0, -4) # y = x² - 4 line1 = Line(1, 0) # y = x print(f"교점: {q4.intersection(line1)}") q4.plot(line1)

알림

알림이 없습니다