[코풀수: 대수] 이차 방정식

방정식 중 일차 방정식 은 너무 간단해서 공식이라고 까지 하지 않지만, 이차 방정식은 해를 구하기가 쉽지 않다. 따라서 근의 공식이 있다. 공식의 유도와 이를 활용하여 해를 구하는 코딩을 해보자. 다음 내용을 먼저 알아야 한다.

  • 인수분해
  • 제곱근
  • (선택) 허수


이차 방정식과 근의 공식


이차 방정식의 일반적인 형태는 다음과 같다.


위 수식에서 a, b, c는 실수인 상수이다. 이제 근을 구해보자. 양변을 a나누고 제곱식을 만들기 위해 수식을 약간 변형한다.




위의 식에서 제곱식을 풀면 아래와 같은 근의 공식을 얻을 수 있다.


루트안의 값에 따라 근이 달라진다. 따라서 그 값을 판별식이라고 한다. 판별식이 양수이면 2개의 실근, 영이면 1개의 실근, 음수이면 2개의 허근을 갖는다.




이차 방정식 (ax^2 + bx + c = 0)

a:

b:

c:



해는?

근의 공식이 있기 때문에 코딩은 어렵지 않다. 단지 a 가 0인 경우 예외처리, 그리고 판별식에 따라 값을 다르게 출력하면 된다.

<!DOCTYPE html>
<html>
<title>이차 방정식</title>
<body>

<h4>이차 방정식 (ax^2 + bx + c = 0)</h4>

<form>
  a: <input type="text" id="a" value="1"><br><br>
  b: <input type="text" id="b" value="2"><br><br>
  c: <input type="text" id="c" value="0"><br><br>
  <input type="button" id="find_x" value="해 구하기"><br><br>
</form>

<p id="result">해는? </p>

<script>
    document.getElementById("find_x").addEventListener("click", calc);
    
    function calc() {
        // 입력된 문자열을 숫자로 바꾸기
        a = Number(document.getElementById("a").value);
        b = Number(document.getElementById("b").value);
        c = Number(document.getElementById("c").value);
        if (isNaN(a) || isNaN(b) || isNaN(c)) {
            document.getElementById("result").innerHTML = "숫자를 입력하세요.";
            return;
        }

        if (a == 0) {
            document.getElementById("result").innerHTML = "2차 방정식이 아닙니다.";
        }
        else {
            var det = b * b - 4 * a * c;
            if (det > 0) {
                var x1 = (- b + Math.sqrt(det))/(2 * a);
                var x2 = (- b - Math.sqrt(det))/(2 * a);
                document.getElementById("result").innerHTML = "x1 = " + x1 + ", x2 = " + x2;
            }
            else if (det == 0)
            {
                var x = -b/(2 * a);
                document.getElementById("result").innerHTML = "x = " + x + " (중근)";
            }
            else {
                var x_r = -b/(2 * a);
                var x_i = Math.sqrt(-det)/(2 * a);
                document.getElementById("result").innerHTML = "x1 = " + x_r + " + i*(" + x_i + "), x2 = " + x_r + " - i*(" + x_i + ")";
            }
        }
    }
</script>

</body>
</html>

댓글