Урок 1. Построение графиков функций. Элементы интерполяции
Построения на плоскости
Введение
Большую часть информации об окружающем мире человек получает от органов зрения. Часто визуальный анализ данных может быть намного эффективнее, чем разглядывание длинных колонок чисел. Рассматривая таблицу чисел (рис 1.1), не сразу удастся понять, с какими данными мы имеем дело. Но взглянув на кривую, построенную по этим данным, мы легко угадаем знакомую нам еще со школы параболу.
рис. 1.1
График функции представляет собой цифровую модель одномерных данных. С помощью этой модели у нас есть возможность лучше понять их природу, например, оценить интервалы монотонности и наличие экстремумов.
На этом уроке мы разберем одну из «вечных» задач — построение графиков функций. Мы научимся строить графики в декартовой и полярной системах координат, оптимизировать процедуру их построения; разберем особенности построения разрывных функций. Также мы узнаем, что такое интерполяция и разберем несколько ее видов.
Системы координат
Прежде, чем перейти к алгоритмам построения графиков, вкратце приведем некоторые сведения о координатных системах. В любой системе координат на плоскости точка задается парой значений (a, b). Каждая такая пара однозначно определяет место точки на плоскости. Обратное, вообще говоря, выполняется не всегда.
Декартова система координат
В декартовой системе координат, как правило, пары обозначаются (x, y), хотя это и не принципиально. Смысл значения x — это проекция точки на ось OX, y — это проекция на ось OY.
рис. 1.2
Полярная система координат
В полярной системе координат точки будем обозначать парой (r, t). Где r — это расстояние от точки О, называемой полюсом, а t — угол между горизонтальным лучом, исходящим из полюса, направленным вправо, и радиусом-вектором, указывающим на точку (рис. 1.3).
рис. 1.3
В ряде случаев полярные координаты оказываются удобнее декартовых. Например, для задания кривых на плоскости, особенно для задания различных спиралей, таких как спираль Архимеда, логарифмическая спираль, трилистника. Также полярная система координат используется:
— в астрономических наблюдениях;
— в фотографии — используют фильтр, переводящий координаты точек из прямоугольной системы в полярную, создавая сферический эффект снимка;
— в биржевых графиках — необычный формат на основе полярных координат предложил в 1990-е годы российский математик Владимир Иванович Елисеев;
— во взаимосвязи градусов и времени (в году 365 дней, в окружности — 360 градусов);
— в медицине — компьютерная томография сердца изображается в полярной системе координат;
— в системах безопасности при идентификации по радужной оболочке глаза.
Способы задания функций
Функции, заданные следующим образом y = f (x), называются заданными явно. Здесь y явно зависит от переменной x, а f определяет некоторое правило, по которому, взяв переменную x, можно получить y. При этом переменная x называется независимой переменной, а y зависимой. Или говорят, что y является функцией x.
Например: y = 2x + sin2x.
Функция может быть задана следующим образом:
x = X (t)
y = Y (t)
Здесь x и y являются функциями независимой переменной t. Такой способ задания функций называется параметрическим. Например, следующая пара функций определяет окружность радиусом 1:
x=cos (t)
y=sin (t)
Построение графика в декартовой системе координат
Для определенности мы начнем с построения графика функции, заданной явно в декартовой системе. Сформулируем шаги, необходимые для построения:
— Получить список точек в обычной системе координат.
— Получить список точек в компьютерной системе координат, преобразовав точки из обычной системы.
— Соединить получившиеся точки линией.
Ниже представлен пример кода, с помощью которого можно получить массив точек с координатами в обычной системе координат.
Код достаточно простой, но поскольку мы с вами находимся в начале пути, немного комментариев к нему не будут лишними. Во-первых, в коде присутствуют границы отрезка, на котором мы собираемся строим наш график — это A и B. Во-вторых, сама функция f (x) задана локально и в нашем случае это y=x2. От исходной функции требуется, чтобы она была определена при всех значениях внутри заданного отрезка. Очевидно, что наша функция этому условию удовлетворяет. Далее, N — это число точек для построения. На самом деле выбор этого значения — сама по себе весьма интересная задача. От выбора числа N зависит, как будет выглядеть наш график. Понятно, что нет смысла брать слишком много точек, поскольку разрешение экрана конечно. С другой стороны, точек не может быть мало, иначе график будет угловатым и не будет отображать истинное поведение функции. Обратите внимание на формулу для вычисления X [i]. При i=0, X [i] =A, а при i=N-1 (максимальной значение i в цикле), мы получаем X [i] =B. Поскольку формула для X [i] линейна относительно i, значит в массиве X будут лежать значения от A до B с равномерным шагом.
Согласно шагу 2, необходимо преобразовать данные из обычной системы координат в компьютерную. Экран монитора тоже представляет из себя декартову систему координат, с той лишь разницей, что ось Y здесь направлена вниз. Определим несколько величин:
[A, B] — отрезок, на котором задана исходная функция.
Ymax — максимальное значение функции на отрезке.
Ymin — минимальное значение функции на отрезке.
(X_win_min, Y_win_min) — левый верхний угол на экране монитора.
(X_win_max, Y_win_min) — правый верхний угол на экране монитора.
(X_win_min, Y_win_max) — левый нижний угол на экране монитора.
(X_win_max, Y_win_max) — правый нижний угол на экране монитора.
рис. 1.4
Теперь, когда у нас все готово, приведем формулы преобразования точек из обычной системы координат в компьютерную.
В данных формулах (X, Y) — это координаты точки в обычной системе координат, а (Xwin, Ywin) — координаты на экране монитора. Обратите внимание, что формулы не симметричны относительно осей X и Y. Как уже было упомянуто, это связано с тем, что компьютерная система координат устроена так, что ось Y направлена вниз, в то время, как в обычной системе эта ось направлена вверх. Данные формулы универсальны — используя их, можно вписать график любой функции в любой прямоугольник на экране. Тем не менее, все-таки есть очевидные ограничения на их использование. Во-первых, Ymax и Ymin должны достигаться на отрезке [A, B]. Существуют функции, которые не имеют максимума или минимума на заданном отрезке. Например, гипербола y=1/x не имеет ни того, ни другого на отрезке [-1, 1]. Ниже мы разберем как строить графики таких функций. Во-вторых, Ymax и Ymin должны быть различны, иначе в знаменателе мы получим ноль. Этот случай, впрочем, разрешается элементарно. Если у нас Ymax равен Ymin, то мы имеем дело с функцией y=const и в этом случае ее графиком будет просто горизонтальная линия.
Определим две функции, с помощью которых мы будем производить конвертацию.
Сама конвертация выглядит так, как показано на листинге ниже. В данном коде мы воспользовались функционалом, который предоставляет нам System.Linq для поиска минимального и максимального значений в массиве Y, а также для самой конвертации.
В переменных Xwin и Ywin теперь у нас лежит коллекция координат точек, которые мы соединим линией.
Построение графика в полярной системе координат
Для построения графика функции, заданной в полярной сис