Что считает калькулятор
Калькулятор строит график функции, которую вы записали сами, и отвечает на вопросы, которые обычно задают по картинке: где кривая пересекает ось x, где она встречается со второй функцией, где у неё локальные максимумы и минимумы, чему равно значение в выбранной точке. Рядом с графиком стоит точка x₀: её можно двигать ползунком и смотреть, как меняются f(x₀), g(x₀) и их разность.
Под графиком перечислены найденные нули, точки пересечения и экстремумы, и каждое из этих чисел можно проверить подстановкой. Окно по вертикали подбирается по значениям функции в видимой части.
Как записать функцию
В поле f(x) вводится выражение от x. Кроме x доступны параметры a, b и c: их значения задаются ползунками ниже, и одно и то же выражение можно быстро перебрать с разными коэффициентами. Степень записывается знаком ^, умножение звёздочкой: a*x^3 + b*x + c. Скобки работают как обычно, унарный минус тоже: -x^2 читается как минус квадрат, а не как квадрат минуса.
Из функций поддерживаются sin, cos, tan, asin, acos, atan, sqrt, abs, exp, ln и log. Логарифм log десятичный, ln натуральный. Числа π и e записываются как pi и e. Неявное умножение допускается в простых случаях: 2x, 3(x+1), 2sin(x) разбираются правильно, но привычку ставить звёздочку лучше сохранить, потому что xy будет ошибкой: двухбуквенных имён в выражении нет.
Пустое поле, незакрытая скобка, неизвестное имя функции или знак в конце выражения дают сообщение об ошибке под полем. Прежний график при этом остаётся на месте, чтобы не терять результат из-за случайной опечатки, но подпись под графиком прямо говорит, что показан прежний расчёт.
Вторая функция g(x) включается галочкой сравнения. Она рисуется голубой пунктирной линией, и на графике отмечаются точки, где f(x) = g(x).
Как получается результат
Кривая строится по выборке: окно по x делится на N интервалов, в каждой точке вычисляется значение функции, соседние точки соединяются отрезками. Для рисунка берётся 1000 интервалов, этого хватает, чтобы линия выглядела гладкой. Точки, где функция не определена, разрывают линию: у 1/x получаются два отдельных куска вместо вертикальной черты через ноль.
Нули ищутся по смене знака. Если на соседних точках значения разного знака, между ними есть корень, и калькулятор уточняет его делением отрезка пополам: 80 итераций уменьшают отрезок настолько, что дальше уже не позволяет точность чисел двойной записи. Найденный корень дополнительно проверяется значением функции: у полюса вроде 1/x около нуля знак тоже меняется, но значение там не близко к нулю, и такая точка корнем не считается. Совпадающие корни, попавшие в допуск (xmax − xmin)·10⁻⁶, показываются один раз.
Экстремумы ищутся по трём соседним точкам выборки: если функция росла и начала падать, между ними локальный максимум, если падала и начала расти, минимум. Положение вершины уточняется по параболе, проведённой через эти три точки, поэтому для x³ − 3x на экране видно (−1; 2) и (1; −2), а не приблизительные значения с шага сетки.
Вертикальное окно подбирается по значениям в видимой части: берётся минимум и максимум выборки, добавляется запас 4% с каждой стороны, затем границы расширяются до целых делений. Шаг делений выбирается из ряда 1, 2, 2,5, 5, 10 с нужным множителем, чтобы подписи не слипались. Для кубической функции на отрезке от −3 до 3 получается окно от −20 до 20 с шагом 5.
Пример, который можно повторить
Откройте страницу: в поле f(x) стоит a*x^3 + b*x + c, ползунки дают a = 1, b = −3, c = 0, то есть f(x) = x³ − 3x. Вторая функция g(x) = 0,5x включена, окно по x от −3 до 3.
Нули функции: −1,732, 0 и 1,732. Проверка подстановкой: (√3)³ − 3√3 = 3√3 − 3√3 = 0. Локальный максимум в точке (−1; 2), минимум в (1; −2): производная 3x² − 3 обращается в ноль при x = ±1, а значения там 1 − 3 = −2 и −1 + 3 = 2.
Возьмите x₀ = 2. На экране f(2) = 8 − 6 = 2, g(2) = 1, разность 1. Точка на графике стоит выше голубой линии, и это видно без вычислений.
Пересечения двух функций дают −1,871, 0 и 1,871. Это корни уравнения x³ − 3x = 0,5x, то есть x(x² − 3,5) = 0, откуда x = 0 и x = ±√3,5 ≈ ±1,8708.
Опыт с плотностью выборки
Ползунок N в последней панели задаёт, на сколько интервалов делится окно при поиске нулей, пересечений и экстремумов. На кубической функции число нулей от N не зависит: три корня находятся и при 20, и при 1000 интервалах.
Другое дело быстрые колебания. Выберите готовую функцию «быстрые колебания», это sin(20x). На отрезке от −3 до 3 у неё 39 нулей: это kπ/20 при целом k от −19 до 19. При N = 40 и N = 1000 калькулятор находит все 39. А при N = 20 шаг выборки равен 0,3, что почти совпадает с периодом 0,314, поэтому колебания попадают почти в одну фазу и находится один ноль из 39.
Так ведёт себя любой график, построенный по точкам: чем быстрее меняется функция, тем плотнее нужна выборка. Поэтому в таблице опыта рядом стоят три значения N и разница между ними видна сразу.
Где модель останавливается
Калькулятор работает с действительными числами и не ищет комплексные корни. Касание оси без смены знака может остаться незамеченным: у x² на отрезке от −1 до 1 ноль есть, но при 1000 интервалах он попадает ровно в точку выборки и находится, а при 999 интервалах функция касается нуля между точками и смены знака не происходит.
Вертикальные асимптоты не размечаются, разрыв просто разрывает линию. Экстремум ищется только локальный и только там, где он виден на выборке: очень узкий пик между двумя точками останется незамеченным. Значения у краёв экрана не считаются экстремумами, даже если функция там самая большая.
Масштаб ограничен: ширина и высота окна держатся в пределах от 10⁻⁶ до 10⁹, дальше кнопки зума перестают действовать. Это защита от того, чтобы случайное вращение колеса не увелило график в пустоту.
Ещё одно ограничение связано с записью выражения. Степень вычисляется через возведение в степень с плавающей точкой, поэтому x^3 при отрицательном x считается правильно, а выражение вроде x^0,5 при отрицательном x даёт не число, и такая точка просто не рисуется. Запись sqrt(x) ведёт себя так же.
Калькулятор не строит графики в полярных координатах, не работает с параметрическими кривыми и не показывает производную как отдельную функцию. Для касательной и секущей есть отдельный калькулятор производной, для площади под кривой отдельный калькулятор интеграла.