[코풀수: 해석] 연립방정식과 함수

방정식을 함수로 유추해보자. 연립 방정식일차 함수 을 보면 비슷하다. 이원 일차 연립방정식에서 y의 앞의 계수가 1이고 x를 등호의 반대 방향으로 넘기면 두 개의 일차 함수가 된다.


함수와 방정식


방정식을 먼저 다시 보자.


b와 d가 영이 아니면 다음과 같이 수식을 변경할 수 있다.


위의 두 수식에서 y1 = y2일 때가 해가 될 것이다. 잘 생각해 보면 두 함수(직선)의 기울기가 같으면, 즉 평행하면 만나는 점이 없을 것이다. 두 직선이 일치하면 해는 무수히 많을 것이고. 연립방정식의 두 식을 그래프로 시각화 함으로써 부정과 불능이 어떤 의미인지를 쉽게 파악할 수 있게 되었다.

이원 일차 연립 방정식
ax + by = p
cx + dy = q

a:
b:
p:

c:
d:
q:



해는?

코드는 연립 방정식을 푸는 것과 일차 함수를 그리는 것을 합한 것이다. 해가 항상 그래프의 한 가운데 오도록, 방정식의 해중에서 x값을 그리는 함수의 마지막 인자(Parameter)로 넣었다.

<!DOCTYPE html>
<html>
<title>이원 일차 연립 방정식과 함수</title>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<script type="text/javascript">
    google.charts.load('current', {'packages':['corechart']});
    google.charts.setOnLoadCallback(drawChart);

    function drawChart(a1 = -1, b1 = 2, a2 = -2, b2 = 3, ans_x = 1) {
        var data = new google.visualization.DataTable();
        data.addColumn('number', 'x');
        data.addColumn('number', 'y1');
        data.addColumn('number', 'y2');

        for (var i = 0; i < 9; i++) {
            var x = (i - 4)*0.5 + ans_x;
            var y1 = a1 * x + b1;
            var y2 = a2 * x + b2;
            data.addRow([x, y1, y2]);
        }

        var options = {
            title: 'y1 = ' + a1 + 'x + ' + b1 + ", y2 = " + a2 + 'x + ' + b2,   
            legend: {position: 'in'},
            hAxis: {title: 'x'},
            vAxis: {title: 'y'},
            pointSize: 10
        };

        var chart = new google.visualization.LineChart(document.getElementById('chart'));

        chart.draw(data, options);
    }
</script>
<body>

<h4>이원 일차 연립 방정식<br>ax + by = p<br>cx + dy = q</h4>

<form>
  a: <input type="text" id="a" value="1"><br>
  b: <input type="text" id="b" value="1"><br>
  p: <input type="text" id="p" value="2"><br><br>
  c: <input type="text" id="c" value="2"><br>
  d: <input type="text" id="d" value="1"><br>
  q: <input type="text" id="q" value="3"><br><br>
  <input type="button" id="solve" value="해 구하기"><br><br>
</form>

<p id="result">해는?</p>
<div id="chart" style="width: 90%; height: 500px"></div>

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

        // 해 구하기
        var ans_x = 0, ans_y = 0;
        var det = a * d - b * c;
        var x_temp = d * p - b * q;
        var y_temp = a * q - c * p;
        if (det == 0) {
            if (x_temp == 0 && y_temp == 0) {
                document.getElementById("result").innerHTML = "해가 무수히 많습니다(부정).";
            }
            else {
                document.getElementById("result").innerHTML = "해가 없습니다(불능).";
            }
        }
        else {
            ans_x = x_temp/det;
            ans_y = y_temp/det;
            document.getElementById("result").innerHTML = "(x, y) = (" + ans_x + ", " + ans_y + ")";
        }
        // 그래프 그리는 함수 호출하기
        if (b != 0 && d != 0) {
            var a1 = - a/b;
            var b1 = p/b;
            var a2 = - c/d;
            var b2 = q/d;
            drawChart(a1, b1, a2, b2, ans_x);
        }
        else {
            document.getElementById("chart").innerHTML = "y의 계수가 영이어서 함수로 표현할 수 없습니다.";
        }
    }
</script>

</body>
</html>

이차 방정식은 어떨까? 이차함수와 y = 0 함수의 만나는 점이 아닐까?

댓글