Так как точек которые должны быть прорисованы достаточно много, необходимо выполнить цикл обработки для все точек функции. Этот цикл будет выглядеть следующим образом:
Для все точек функции выполнить
Берём очередную точку
Новая точка = Преобразование над очередной точкой
Теперь осталось выяснить откуда взять все те значения для которых мы вводили обозначения и которые используются в разработанном нами преобразовании.
Первое. Если взялись строить график, стало быть, нам известна область, на которой мы будем строить график. Эта область конечна и её границы по координате x и есть величины Left, Right.
Предположим, что мы строим график на этой области по N точкам. Это означает, что в нашем распоряжении массив координат y для N точек. Наибольшее значение y в этом массиве есть величина Up и наименьшее значение y есть величина Down.
Тогда Long_x = Right – Left и Long_y = Up – Down.
Из вышесказанного ясно, что перед выполнением преобразования необходимо рассчитать числовые значения всех требуемых точек функции в заданной области и затем найти максимальные и минимальные значения игреков. Поэтому программа будет включать в себя следующие блоки:
Ввод границ области построения графика.
Ввод количества точек построения.
Расчёт шага построения.
Расчёт значений координат y
Расчёт максимума и минимума значений y – ков
Выполнение операций преобразования.
Выше появился термин “шаг построения”. Разумно строить точки следующим образом. Пусть самая левая точка графика – это левая граница области построения. Следующая точка это левая + шаг построения, то есть небольшое число. И каждая очередная точка это предыдущая + шаг построения. Если делать так, то координаты х можно не держать в массиве. Каждую координата можно рассчитать по очевидной формуле:
xi = Left + шаг * i если первую точку считать с номером 0 и
xi = Left + шаг * (i – 1) если первая точка имеет номер 1.
После того, как выполнены все шесть блоков, можно смело пользоваться циклической операцией построения графика описанной в самом начале данной лекции.
Важное замечание
Необходимо помнить, что экран монитора не квадрат, а прямоугольник, кроме того, исходная область построения графика то же прямоугольник и совсем не обязательно подобный прямоугольнику экрана монитора. Это означает, что коэффициент подобия для координат x может оказаться иным, чем коэффициент подобия для координат y.
Это означает, что преобразованный график, скорее всего, окажется искаженным, с точностью до подобия или по оси Ox или по оси Oy, но это неизбежная плата за возможность просмотреть весь график.
Построение графика в окрестности точек разрыва
Проблема построения графика в такой окрестности заключается в том, что ордината функции изменяется очень быстро на очень маленьком интервале изменения абсциссы, а вы помните, что наш алгоритм проводит преобразование масштабирования графика функции. Это преобразование в случае обработки окрестности точки разрыва приведёт к тому, что большая часть графика будет изображена в очень маленьком масштабе. Математически это будет верно, но получившаяся картинка окажется совершенно ненаглядной, и построение графика потеряет смысл, так как главная функция графика это всё же наглядность.
Как с этим бороться. Идея решения данной проблемы такова – необходимо научится определять точку разрыва, и в её окрестности строить график не проводя вычислений и масштабирования, а схематично, исходя из общих свойств точки разрыва.
Как и в случае с экстремумами и точками перегиба нам нельзя пользоваться точными определениями математического анализа, о причинах этого мы уже говорили. Следовательно, первое, что требуется сделать это дать определение разрыва.
Определить разрыв можно так – точка разрыва это такая точка в окрестности, которой функция изменяется слишком быстро.
Это очень неточное определение. Здесь два неясных термина. Во-первых, непонятно, что значит слишком быстро и, во-вторых, какого размера интервал принимается за окрестность точки разрыва. Однако уже ясно, что под это определение может попасть не только точка разрыва, а и такая точка, в окрестности которой функция просто имеет большую первую производную, то есть изменяется действительно быстро, но это наша плата за возможность проведения численного счета. А теперь займёмся уточнением определения.
Мы будем исходить из того, что в окрестности точки разрыва график строится схематично. Это означает, что график строится неточно, а, следовательно, если окрестность будет велика, то и в целом построение графика будет неточным.
Отсюда возникает первая мысль, что размер окрестности должен быть таким, чтобы визуально окрестность точки разрыва не занимала значительную часть области построения графика. Итак нам необходимо уметь искать окрестности точек разрыва.
Для начала заметим, что в окрестности точки разрыва график функции удовлетворяет следующим свойствам:
1. Функция либо неограниченно растёт, либо неограниченно убывает.
2. Скорость её роста увеличивается также неограниченно.
Эти два свойства помогут нам обнаруживать необходимые окрестности с высокой степенью точности. Введём некоторые обозначения.
Max – верхняя граница значений ординат
Min – нижняя граница значений ординат.
Шаг – шаг изменения абсциссы.
А – начало области построения графика
В – конец области построения графика
Важное замечание. Нам важно не просто найти окрестность, а во-первых, достаточно точно определить абсциссу точки разрыва, а во-вторых, определить тип разрыва, а их может быть два:
Нестрогое описание процесса расчётов
Для поиска точек разрыва, мы пройдём всю область построения с шагом достаточно маленьким, но таким который позволит пройти всю область за разумное время. На каждом шаге процесс будет вычисляться новая абсцисса путем прибавления к предыдущей абсциссе величины шага. Для каждой вновь посчитанной абсциссы будем вычислять ординату, и если посчитанная ордината окажется за пределами отрезка [min, max] то будем предполагать, что найдена окрестность точки разрыва, после чего должен быть запущен процесс проверки этого предположения.
Min – это минимальная из уже посчитанных ординат и max – это максимальная из уже посчитанных ординат.
Процесс проверки предположения заключается в следующем:
· Резко уменьшим шаг движения и сделав ещё некоторое количество шагов убедимся, что функция продолжает изменятся быстрым темпом в том же направлении. Если этого не происходит, то, следовательно, это не окрестность точки разрыва.
· Продолжаем движение вперёд. Если функция скачком изменит направление изменения (разрыв первого типа) или скачком измениться значение ординаты (разрыв второго типа), значит, мы нашли окрестность разрыва.
· Будем сжимать окрестность с сохранением её свойств до тех пор, пока она не станет достаточно маленькой. Её центр и есть точка разрыва.