МУНИЦИПАЛЬНОЕ
ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
«СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА №19»
ШКОЛЬНАЯ НАУЧНО-ПРАКТИЧЕСКАЯ КОНФЕРЕНЦИЯ
Построитель графиков функций
Авторы: Бураков Андрей
Кузьмин Александр
Научный руководитель:
Коханов Леонид Валерьевич
г.Новочебоксарск 2009 г.
СОДЕРЖАНИЕ
1. Цели и задачи __________________________3
2. Математическая модель __________________4
3. Компьютерная реализация _______________11
1. Цели и задачи
При решении
различных задач естественно-научного цикла (математика, физика, химия,
биология, экономика) приходится часто строить графики различных функций. В
школьном курсе это чаще всего это функции одной переменной, выраженной в виде y = f(x).
Существуют
различные способы построения графиков функций, исходя из их свойств, областей
определения и значений, точек экстремума, промежутков возрастания и убывания,
четности и нечетности, выпуклости и точек перегиба. Все это изучается в курсе
алгебры и начал анализа.
Однако зачастую
аналитическое выражение функции может быть чрезвычайно сложным, и для
построения ее графика нужны более серьезные знания, либо внешний вид графика
представить вообще невозможно.
В таких случаях
может помочь компьютерная программа – построитель графиков функций.
Главной целью
данной работы является написание программы «Построитель графиков функций» на
языке программирования Паскаль.
Для достижения
этой цели возникают следующие задачи:
1. Выбор способа построения
графика функции
2. Подбор математический
аппарата для решения проблемы и построение математической модели
3. Компьютерная реализация на
языке Паскаль.
2.
Математическая модель
Поскольку
необходимо написать компьютерную программу, строящую график практически любой
функции, заданной выражением y = f(x), прежде всего необходимо выбрать способ построения графика.
Разнообразные аналитические методы, подвластные человеку, для компьютерной
реализации слишком сложны, поэтому просто воспользуемся способом построения
графика «по точкам».
При построении
графика функции «по точкам» необходимо построить таблицу зависимости y=f(x), нанести точки с соответствующими
координатами на координатную плоскость и постараться соединить эти точки
плавной линией.
x
|
x1
|
x2
|
x3
|
|
|
|
|
|
xN
|
y
|
y1
|
y2
|
y3
|
|
|
|
|
|
yN
|
Казалось бы,
ничего сложного в данном построении нет, поскольку в языке программирования
Паскаль имеются соответствующие графические возможности: прямоугольная
декартова система координат, графические примитивы для построения точек и
отрезков, выбор цветов для графических построений. Однако возникает ряд
проблем.
Обычная
прямоугольная декартова система координат на плоскости выглядит так:
При этом
координаты точки (x,y) выражаются действительными (вещественными)
числами.
Графические
возможности Паскаля гораздо более ограничены. Координатная плоскость компьютера
представляет собой систему координат стандарта VGA 640x480 точек с 16-цветной
палитрой.
При этом
координаты точки (x,y) выражаются строго целыми числами в
соответствующих диапазонах: от 0 до 639 по x и от 0 до 479 по y.
Очевидно, данных
диапазонов совершенно недостаточно, и если мы построим график в этих
координатах, он будет сильно ограничен, искажен и к тому же зеркально отображен
относительно оси Ox.
С другой стороны,
поскольку вычислительные возможности компьютера огромны, можно строить
зависимость x от y с любым шагом вычислений,
ограничения будут только по времени вычислений.
Таким образом,
главная задача, которую нам предстоит решить – это перевести просчитанную
зависимость в новую систему координат, чтобы на экране получить реальную
картинку графика функции.
Для этого нам
потребуются некоторые сведения из области математики.
Договоримся
вначале, что наша функция задана на некотором отрезке [a,b] и непрерывна на этом отрезке
(например, случай деления на нуль приведет к ошибке). В этом случае известно,
что функция на данном отрезке достигает своего минимального и максимального
значений ymin и ymax.
Для вычисления
экстремальных значений функции придется вначале просчитать все значения функции
на данном отрезке с достаточно малым шагом и выбрать среди них искомые (если
шаг вычислений будет недостаточно мал, мы получим сильные искажения).
В результате
график функции будет ограничен неким прямоугольником: отрезком [a,b] по оси Ox и отрезком [ymin , ymax] по оси Oy.
Теперь наша
задача заключается в отображении этого прямоугольника на прямоугольник экрана VGA 640x480 с перевертыванием по оси Oy.
Обозначим новые
координаты соответственно через x1 и y1,
а ограничения через x1max=639 и y1max=479.
В результате мы
должны получить аналогичную картинку в системе координат x1, y1:
Для данного
построения требуется произвести преобразования отрезков:
f1: [a , b] – [0 , x1max]
f2: [ymin , ymax] – [0
, y1max]
Другими словами,
требуется произвести растяжение (сжатие) по осям при помощи указанных
преобразований. Для этого нужно воспользоваться сведениями из области
аналитической геометрии, а именно, уравнением прямой, проходящей через две
данные точки (x1,y1) , (x2,y2)
(в данном случае
(x1,y1) , (x2,y2) - координаты двух точек в системе
координат (x,y) )
Это уравнение нам
потребуется для построения наших функций f1 и f2.
Построим
аналитическое выражение для функции f1:
или после
соответствующих преобразований:
Для нашей
программы эта формула перепишется в формате Паскаля:
x1:=round(x1max*(x-a)/(b-a))
Аналогично
построим аналитическое выражение для функции f2:
или после соответствующих
преобразований:
Для нашей
программы эта формула перепишется в формате Паскаля:
y1:=round(y1max*(y-ymin)/(ymin-ymax)+y1max)
Стандартная
функция round используется для
округления чисел до целого.
Для построения
графика функции вначале переведем графический курсор в начальную точку, а затем
воспользуемся циклом по x в пределах от a до b, каждый раз строя отрезок из
последней точки до следующей шагом s при помощи оператора -line(x1,y1), где координаты x1 и y1 вычисляются при помощи указанных формул.
После построения
самого графика функции необходимо построить реальные оси Ox и Oy.
Ось Ox переходит в ось Ox1, ее уравнение в реальных координатах
имеет вид y=0. Пересчитаем координату y в y1, а затем воспользуемся оператором
line(0,y1,x1max,y1)
Ось Oy переходит в ось Oy1, ее уравнение в реальных координатах
имеет вид x=0. Пересчитаем координату x в x1, а затем воспользуемся
оператором
line(x1,0,x1,y1max)
Тем самым
поставленная задача будет решена.
3.
Компьютерная реализация
В качестве
вводных данных в программе будут использованы начало и конец отрезка и шаг
вычислений a, b, s.
Сама функция
задается в разделе function.
После этого
определяем минимальное и максимальное значение функции на этом отрезке ymin и ymax.
Затем происходит
инициализация графики, определение цветов и собственно построение графика при
помощи оператора -line(x1,y1).
В конце программы
строятся реальные оси координат Ox и Oy.
Ниже приводится
текст программы на языке Паскаль:
program grafic;
uses graph;
const x1max=639;
y1max=479;
var gd,gm,x1,y1:integer;
x,y,ymin,ymax,a,b,s:real;
function f(x:real):real;
begin
f:=;
{задание функции}
end;
begin
write('a=');readln(a);
write('b=');readln(b);
write('s=');readln(s);
ymin:=f(a);
ymax:=f(a);
x:=a;
repeat
y:=f(x);
if y<ymin then
ymin:=y;
if y>ymax then
ymax:=y;
x:=x+s
until x>b;
gd:=detect;
initgraph(gd,gm,'');
setcolor(lightred);
setbkcolor(black);
x:=a;
y:=f(x);
x1:=0;
y1:=round(y1max*(y-ymin)/(ymin-ymax)+y1max);
moveto(x1,y1);
repeat
y:=f(x);
x1:=round(x1max*(x-a)/(b-a));
y1:=round(y1max*(y-ymin)/(ymin-ymax)+y1max);
lineto(x1,y1);
x:=x+s
until x>b;
setcolor(yellow);
y1:=round(y1max*ymin/(ymax-ymin)+y1max);
line(0,y1,x1max,y1);
line(x1max,y1,x1max-10,y1-10);
line(x1max,y1,x1max-10,y1+10);
x1:=round(x1max*a/(a-b));
line(x1,0,x1,y1max);
line(x1,0,x1+10,10);
line(x1,0,x1-10,10);
readln;
closegraph;
end.
Оставьте свой комментарий
Авторизуйтесь, чтобы задавать вопросы.