Inflection points of a polynomial calculator
This inflection points of a polynomial calculator finds the real x-coordinates where a polynomial changes concavity.
Run — free
Supply coefficients in descending degree order, including zeros for any missing powers. The calculator forms the second derivative, isolates all of its real zeros, and checks the sign on both sides of every candidate. That final check matters because a zero of the second derivative is only a possible inflection point; it is not an inflection point unless concavity truly changes there.
Enter the polynomial without losing missing terms
Represent the polynomial as a coefficient list ordered from the highest power down to the constant term. For example, a cubic has four positions: the coefficient of x cubed, the coefficient of x squared, the coefficient of x, and the constant. If one of those powers is absent from the written formula, put zero in its position. This preserves the degree attached to every coefficient and prevents an omitted term from shifting all later values. The first coefficient must be nonzero, every value must be finite, and the list must describe at least a quadratic polynomial. You may also choose the number of decimal places used in the returned coordinates. Precision changes presentation, not the mathematical search. A quadratic has a constant second derivative, so it cannot change concavity and correctly returns an empty coordinate list. Higher-degree polynomials may return one point, several points, or none. The result reports only x-coordinates because that is the defined output of this calculator; substitute each coordinate into the original polynomial separately if you also need the corresponding y-coordinate.
Why solving the second derivative is not enough
An inflection point requires a change from concave up to concave down, or the reverse. Zeros of the second derivative identify candidates, but some candidates fail that definition. For instance, an even-multiplicity zero can touch the horizontal axis without crossing it, leaving the second derivative with the same sign on both sides. This calculator avoids reporting such false positives. It differentiates the coefficient list twice, finds every distinct real zero of that second-derivative polynomial, and divides the real line into intervals around those zeros. It then evaluates the second derivative inside the interval immediately to the left and immediately to the right of each candidate. A candidate is returned only when those signs oppose each other. This interval method also handles repeated roots: a repeated root with odd multiplicity changes sign and remains an inflection point, while one with even multiplicity does not. Complex roots are irrelevant because they are not x-coordinates on the real graph, so they are not included in either the candidate list or the final result.
Interpret and verify the returned coordinates
Each returned number is an x-coordinate at which the graph changes concavity. Read the coordinates from left to right and use the sign of the second derivative between them to describe the graph. A positive second derivative means the polynomial is concave up on that interval; a negative second derivative means it is concave down. When the result is empty, the calculator is not claiming that the second derivative has no zeros. It means no real zero produces the required sign change, or the second derivative is a nonzero constant. Rounded coordinates are convenient for reports and plotting, but substitution near a high-multiplicity root can be sensitive, so increase the requested precision before using a decimal result in later calculations. The computation is deterministic and bounded to degree twenty, with no network call or sampled graph. Root isolation follows the derivative structure of the polynomial rather than scanning a fixed grid, which helps it find closely spaced candidates that a coarse plot may miss. For an independent check, differentiate twice, mark the returned coordinates on a sign chart, and confirm opposite signs in adjacent intervals.
What you can do with it
Check a calculus exercise
Confirm which zeros of the second derivative are genuine concavity changes rather than stationary candidates.
Prepare a polynomial sketch
Place the returned x-coordinates on a sign chart before drawing concave-up and concave-down intervals.
Validate symbolic output
Compare a computer algebra candidate list with an independent deterministic sign-change test.
FAQ
What does the calculator cost?
A request through the API costs $0.002. The browser calculation is available without a server-side computation.
Why is a zero of the second derivative sometimes omitted?
A zero is omitted when the second derivative has the same sign on both sides, so the graph does not change concavity there.
How should I enter a missing polynomial term?
Insert a zero coefficient for the missing power so every position still corresponds to the correct descending degree.
Does the result include y-coordinates?
No. The result contains the requested x-coordinates only. Evaluate the original polynomial at each returned value to obtain y-coordinates.
Can a quadratic polynomial have an inflection point?
No. Its second derivative is constant, so its concavity cannot change.
Are complex inflection coordinates returned?
No. Inflection points describe changes along a real graph, so only real x-coordinates are considered.
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/calculus/inflection-points-polynomial \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"coefficients":[1,0,-3,2]}'const res = await fetch("https://api.kit.forhosting.com/calculus/inflection-points-polynomial", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"coefficients": [
1,
0,
-3,
2
]
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/calculus/inflection-points-polynomial",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"coefficients": [
1,
0,
-3,
2
]
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/calculus/inflection-points-polynomial", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"coefficients":[1,0,-3,2]}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"coefficients":[1,0,-3,2]}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/calculus/inflection-points-polynomial", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"coefficients": [
1,
0,
-3,
2
]
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "calculus.inflection_points_polynomial",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Limits
max_coefficients | 21 |
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |