방정식을 함수로 유추해보자. 연립 방정식
과 일차 함수
을 보면 비슷하다. 이원 일차 연립방정식에서 y의 앞의 계수가 1이고 x를 등호의 반대 방향으로 넘기면 두 개의 일차 함수가 된다.
방정식을 먼저 다시 보자.
b와 d가 영이 아니면 다음과 같이 수식을 변경할 수 있다.
위의 두 수식에서 y1 = y2일 때가 해가 될 것이다. 잘 생각해 보면 두 함수(직선)의 기울기가 같으면, 즉 평행하면 만나는 점이 없을 것이다. 두 직선이 일치하면 해는 무수히 많을 것이고. 연립방정식의 두 식을 그래프로 시각화 함으로써 부정과 불능이 어떤 의미인지를 쉽게 파악할 수 있게 되었다.
이원 일차 연립 방정식
코드는 연립 방정식을 푸는 것과 일차 함수를 그리는 것을 합한 것이다. 해가 항상 그래프의 한 가운데 오도록, 방정식의 해중에서 x값을 그리는 함수의 마지막 인자(Parameter)로 넣었다.
이차 방정식은 어떨까? 이차함수와 y = 0 함수의 만나는 점이 아닐까?
함수와 방정식
방정식을 먼저 다시 보자.
b와 d가 영이 아니면 다음과 같이 수식을 변경할 수 있다.
위의 두 수식에서 y1 = y2일 때가 해가 될 것이다. 잘 생각해 보면 두 함수(직선)의 기울기가 같으면, 즉 평행하면 만나는 점이 없을 것이다. 두 직선이 일치하면 해는 무수히 많을 것이고. 연립방정식의 두 식을 그래프로 시각화 함으로써 부정과 불능이 어떤 의미인지를 쉽게 파악할 수 있게 되었다.
이원 일차 연립 방정식
ax + by = p
cx + dy = 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 함수의 만나는 점이 아닐까?
댓글
댓글 쓰기