Известны
корни ,
и
многочлена третьей степени
.
Вывести на экран области притяжения этих корней относительно отображения
Ньютона
. Граница этих областей составляет
фрактальное множество Ньютона.
Для каждого
варианта задана тройка корней многочлена :
Вариант |
|
|
|
Вариант |
|
|
|
|
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).
Ссылка на скачивание - внизу страницы.