Известны корни , и многочлена третьей степени . Вывести на экран области притяжения этих корней относительно отображения Ньютона . Граница этих областей составляет фрактальное множество Ньютона.
Для каждого варианта задана тройка корней многочлена :
Вариант |
Вариант |
|||||||
1 |
11 |
|||||||
2 |
12 |
|||||||
3 |
13 |
|||||||
4 |
14 |
|||||||
5 |
15 |
|||||||
6 |
16 |
|||||||
7 |
17 |
|||||||
8 |
18 |
|||||||
9 |
19 |
|||||||
10 |
20 |
Пример 12. Корни многочлена равны , , . Найдем область притяжения этих корней относительно отображения Ньютона. Область притяжения будем раскрашивать в красный цвет, – в зеленый, – в синий. По формуле Виеты находим . Производная от функции равна . Рассматриваем комплексные числа, принадлежащие области комплексной плоскости, состоящей из точек , удовлетворяющих соотношениям и . Каждое такое число берем в качестве первого приближения . Применяем к нему преобразование до тех пор, пока не будет достигнуто выполнение неравенства . Затем находим корень, близкий к , и закрашиваем исходную точку в соответствующий цвет. Если приближение корня достигнуто за четное число шагов , то точка окрашивается светлым оттенком этого цвета, иначе – темным.
Программа.
#include<graphics.h>
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<complex.h>
#include<math.h>
#define MITER 100
class Wnd
{
double xmin, ymin, xmax, ymax;
int left, top, right, bottom;
public:
Wnd(double x0, double y0, double x1, double y1,
int xleft = 0, int ytop = 0,
int xright = 639, int ybottom = 479):
xmin(x0), ymin(y0), xmax(x1), ymax(y1),
left(xleft), top(ytop)
{
if(xleft < 0 || ytop < 0)
{
printf("\n Error in the output domain"); exit(1);
}
if(xright < 0) right = getmaxx();
else right = xright;
if(ybottom < 0) bottom = getmaxy();
else bottom = ybottom;
}
int ex(double x);
int ey(double y);
void putpoint(double x, double y, int color);
};
int Wnd::ex(double x)
{
return left + (x - xmin) * (right - left) / (xmax - xmin);
}
int Wnd::ey(double y)
{
return top + (ymax - y) * (bottom - top) / (ymax - ymin);
}
int colors[6]={RED, LIGHTRED, GREEN, LIGHTGREEN, BLUE, LIGHTBLUE};
complex f(complex z)
{
return z * z * z – 2 * z * z + 9. * z / 4 -5. / 4;
}
complex fs(complex z)
{
return 3 * z * z – 4 * z + 9. / 4;
}
complex i(0., 1.);
complex root[3]; // = {(1., 0.), (0.5, 1.), (0.5, -1.)};
void Wnd::putpoint(double x, double y, int color)
{
putpixel(ex(x), ey(y), color);
}
int main()
{
int gd = VGA, gm = VGAHI, j;
double re, im, xinc, yinc;
int pput, ncolors = 0,n;
initgraph(&gd, &gm, "..\\BGI");
Wnd w(-2., -2., 2., 2., 0, 0, getmaxx(), getmaxy());
xinc = 4. / 640; yinc = 4. / 480;
complex z;
ncolors = 3; root[0] = 1.; root[1] = 0.5 + i; root[2] = 0.5 - i;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.