Как видим, значение exp(0)
1
, поэтому наш синий график “настоящей” экспоненты пересекает ось (0,1)
. Если присмотреться повнимательнее, то видно, что на самом деле мы нарисовали первое приближение (exp0(x)==0)
черным цветом поверх оси Это функция exp1(x)==1
(0,1)
, но мы можем построить более точную аппроксимацию.Используя два члена разложения (1+x)
(0,1)
. С помощью трех членов разложения (1+x+pow(x,2)/fac(2))
можем обнаружить признаки сходимости.Десять членов приближения дают очень хорошее приближение, особенно для значений x
–3
.На первый взгляд, мы могли бы получать все более точные аппроксимации, постоянно увеличивая количество членов степенного ряда. Однако существует предел, и после тринадцати членов происходит нечто странное: аппроксимация ухудшается, а после вычисления восемнадцати членов на рисунке появляются вертикальные линии.
double
Последний рисунок представляет собой хорошую иллюстрацию следующего принципа: если ответ выглядит хорошо, еще не значит, что программа работает правильно. Если программа проработает немного дольше или на несколько других данных, то может возникнуть настоящая путаница, как это произошло в данном примере.
15.6. Графические данные
С помощью этого примера мы обсудим следующие проблемы программирования, связанные с представлением данных:
• чтение файла;
• масштабирование данных для подгонки к окну;
• отображение данных;
• разметка графика.
Мы не будем вдаваться в художественные аспекты этой проблемы. В принципе мы строим “график для идиотов”, а не для художественной галереи. Очевидно, что вы сможете построить его намного более красиво, чем это нужно.
Имея набор данных, мы должны подумать о том, как их получше изобразить на экране. Для простоты ограничимся только данными, которые легко изобразить на плоскости, ведь именно такие данные образуют огромный массив приложений, с которыми работают большинство людей. Обратите внимание на то, что гистограммы, секторные диаграммы и другие популярные виды диаграмм на самом деле просто причудливо отображают двумерные данные. Трехмерные данные часто возникают при обработке серии двумерных изображений, при наложении нескольких двумерных графиков в одном окне (как в примере “Возраст населения Японии”) или при разметке отдельных точек. Если бы мы хотели реализовать такие приложения, то должны были бы написать новые графические классы или адаптировать другую графическую библиотеку.
Итак, наши данные представляют собой пары точек, такие как (year,number of children
year,number of children,number of adults,number of elderly
), то мы должны просто решить, какую пару или пары чисел хотим изобразить. В нашем примере мы рисуем пары (year,number of children
), (year,number of adults
) и (year,number of elderly
).