Enter coefficients for the rational function in the form: f(x) = (ax² + bx + c) / (dx² + ex + f)
Numerator (P(x))
Denominator (Q(x))
Graphing Properties
How to Graph Rational Functions
A rational function is defined as the ratio of two polynomials, f(x) = P(x) / Q(x). Graphing these functions requires identifying specific characteristics like asymptotes, intercepts, and holes.
Step 1: Find the y-intercept
To find where the graph crosses the y-axis, evaluate the function at x = 0. If the denominator is not zero at x=0, the y-intercept is (0, P(0)/Q(0)).
Step 2: Find the x-intercepts
The x-intercepts occur where the numerator P(x) = 0, provided those values do not also make the denominator zero. These are the "zeros" of the function.
Step 3: Identify Vertical Asymptotes and Holes
Set the denominator Q(x) = 0 and solve for x.
If a value makes only the denominator zero, it is a Vertical Asymptote.
If a value makes both the numerator and denominator zero, it is a Hole (removable discontinuity).
Step 4: Determine the Horizontal Asymptote
Compare the degree of the numerator (n) and the degree of the denominator (m):
n < m: The horizontal asymptote is the x-axis (y = 0).
n = m: The horizontal asymptote is y = (leading coefficient of P) / (leading coefficient of Q).
n > m: There is no horizontal asymptote (there may be a slant/oblique asymptote).
Example Analysis: For f(x) = (x² – 5x + 6) / (x² – x – 2):
– Numerator factors to (x-2)(x-3). Zeros at x=2, x=3.
– Denominator factors to (x-2)(x+1). Zeros at x=2, x=-1.
– Since x=2 is in both, there is a Hole at x=2.
– Vertical Asymptote at x = -1.
– Horizontal Asymptote at y = 1 (since degrees are equal).
function solveQuadratic(a, b, c) {
if (a === 0) {
if (b === 0) return [];
return [-c / b];
}
var disc = b * b – 4 * a * c;
if (disc < 0) return [];
if (disc === 0) return [-b / (2 * a)];
return [
(-b + Math.sqrt(disc)) / (2 * a),
(-b – Math.sqrt(disc)) / (2 * a)
];
}
function calculateRationalProperties() {
var na = parseFloat(document.getElementById('num_a').value) || 0;
var nb = parseFloat(document.getElementById('num_b').value) || 0;
var nc = parseFloat(document.getElementById('num_c').value) || 0;
var da = parseFloat(document.getElementById('den_d').value) || 0;
var db = parseFloat(document.getElementById('den_e').value) || 0;
var dc = parseFloat(document.getElementById('den_f').value) || 0;
var output = document.getElementById('properties-output');
var resultDiv = document.getElementById('rational-result');
if (da === 0 && db === 0 && dc === 0) {
output.innerHTML = "Error: Denominator cannot be zero.";
resultDiv.style.display = "block";
return;
}
// 1. Y-Intercept
var yInt;
if (dc !== 0) {
yInt = (nc / dc).toFixed(2);
} else {
yInt = "Undefined (Vertical Asymptote at x=0)";
}
// 2. Roots (Potential X-intercepts and Asymptotes)
var numRoots = solveQuadratic(na, nb, nc);
var denRoots = solveQuadratic(da, db, dc);
var holes = [];
var xIntercepts = [];
var vertAsymptotes = [];
// Check Denominator roots for Asymptotes or Holes
for (var i = 0; i < denRoots.length; i++) {
var dr = denRoots[i];
var isHole = false;
for (var j = 0; j < numRoots.length; j++) {
if (Math.abs(dr – numRoots[j]) < 0.0001) {
holes.push(dr.toFixed(2));
isHole = true;
break;
}
}
if (!isHole) {
vertAsymptotes.push(dr.toFixed(2));
}
}
// Check Numerator roots for X-intercepts
for (var k = 0; k < numRoots.length; k++) {
var nr = numRoots[k];
var isHoleMatch = false;
for (var l = 0; l < holes.length; l++) {
if (Math.abs(nr – parseFloat(holes[l])) < 0.0001) {
isHoleMatch = true;
break;
}
}
if (!isHoleMatch) {
xIntercepts.push(nr.toFixed(2));
}
}
// 3. Horizontal Asymptote
var horizAsymptote = "";
var degNum = (na !== 0) ? 2 : (nb !== 0 ? 1 : 0);
var degDen = (da !== 0) ? 2 : (db !== 0 ? 1 : 0);
if (degNum < degDen) {
horizAsymptote = "y = 0";
} else if (degNum === degDen) {
var leadN = (degNum === 2) ? na : (degNum === 1 ? nb : nc);
var leadD = (degDen === 2) ? da : (degDen === 1 ? db : dc);
horizAsymptote = "y = " + (leadN / leadD).toFixed(2);
} else {
horizAsymptote = "No Horizontal Asymptote (Slant Asymptote exists)";
}
// Format output
var html = "Y-Intercept: (0, " + yInt + ")";
html += "X-Intercepts: " + (xIntercepts.length > 0 ? xIntercepts.join(", ") : "None") + "";
html += "Vertical Asymptotes: " + (vertAsymptotes.length > 0 ? "x = " + vertAsymptotes.join(", x = ") : "None") + "";
html += "Holes (Removable Discontinuities): " + (holes.length > 0 ? "at x = " + holes.join(", ") : "None") + "";
html += "Horizontal Asymptote: " + horizAsymptote + "";
// Domain
var domainExclusions = denRoots.map(function(r) { return "x ≠ " + r.toFixed(2); });
html += "Domain: " + (domainExclusions.length > 0 ? "All real numbers except " + domainExclusions.join(" and ") : "All real numbers") + "";
output.innerHTML = html;
resultDiv.style.display = "block";
}