Пример работы в Matlab 2

Решаем на заказ! Пример работы в Matlab 2

Заказать работу
Узнать стоимость

ПРИМЕРЫ РЕШЕНИЙ


Домашняя работа. Фракталы и множества  Мандельброта и Жюлиа в MATLAB.

Работы ЛЮБОЙ сложности в MATLAB, для заказа -- контакты в шапке сайта.

Возможно выполнение ТОЛЬКО практической части работы как тут, а возможно написание работы полностью ПОД ключ, с теорией и нужной оригинальностью. 






% Множества Мандельброта и Жюлиа
    clear all; close all; clc;
% Запускаем цикл выбора пунктов меню: 
m=0;D=0;
while m<6
    m=menu('SeLect FractaL:','1. Koh Curve','2. Minkovsky FractaL','3. Levi FractaL','4. JuLia','5. ManDeLbrot','EXIT');
    if m==6 % Если нажата 6-ая кнопка
        break; % Выходим из выбора пунктов меню
    end;
    figure(1);
    switch m
        case 1
            % Задаём координаты Конца и начала прямой
            mn=0; 
            while mn<5 % цикл выбора числа итераций:
            mn=menu('SeLect Max. Number of iteRation:','N=2','N=4','N=6','N=8','EXIT');
            if mn==5 % Если нажата 5-ая кнопка
                break; % Выходим из выбора пунктов меню
            end;
            % Рисуем коорд. оси:
            plot([-1 1],[0 0],'k-','LineWidth',3);
            hold on; % Вкл. Режим наложения изображений
            plot([0 0],[-1 1],'k-','LineWidth',3);
            text(0,1,'+j');
            text(1,0,'+1');
            if not(D==0) 
                clear x
                clear y
            end;
            N=2*mn; 
            %[X,Y]=ginput(2); 
            X(1)=-1;X(2)=1;
            Y(1)=0;Y(2)=0;
            % Длина прямой
            %L=sqrt((X(2)-X(1))^2-(Y(2)-Y(1))^2);
            x(1,1)=X(1); y(1,1)=Y(1);
            x(1,2)=(X(2)-X(1))/3+X(1); y(1,2)=(Y(2)-Y(1))/3+Y(1);
            x(1,3)=(X(2)-X(1))*2/3+X(1); y(1,3)=(Y(2)-Y(1))*2/3+Y(1);
            x(1,4)=X(2); y(1,4)=Y(2);
            plot(x(1,:),y(1,:),'ob-','LineWidt',3);
            pause(0.1);
            title(strcat('Koh Curve, itRations k=',num2str(1)));
            hold off;
            for k=2:2:N % цикл итераций
                n=(length(x(k-1,:))-1)/3;
            % Сдвигаем точки дальнего конца отрезка в предыдущей итерации
                for kk=0:n-1
                    x(k,kk*4+1)=x(k-1,kk*3+1); y(k,kk*4+1)=y(k-1,kk*3+1);
                    x(k,kk*4+2)=x(k-1,kk*3+2); y(k,kk*4+2)=y(k-1,kk*3+2);
                    x(k,kk*4+4)=x(k-1,kk*3+3); y(k,kk*4+4)=y(k-1,kk*3+3);
                    x(k,kk*4+5)=x(k-1,kk*3+4); y(k,kk*4+5)=y(k-1,kk*3+4);
                    % рассчитываем координаты новой средней точки: 
                    xp2=x(k-1,kk*3+3)-x(k-1,kk*3+2);
                    yp2=y(k-1,kk*3+3)-y(k-1,kk*3+2);
                    R2=xp2^2+yp2^2;
                    cc=R2/2;
                    aa=R2;
                    bb=-2*yp2*cc;
                    ee=cc^2-R2*xp2^2;
                    D=bb^2-4*aa*ee;
                    % Получаем координаты веришины вставленного треугольника
                    y1=(-bb+sqrt(D))/2/aa;
                    x1=(cc-y1*yp2)/xp2+x(k-1,kk*3+2);
                    y1=y1+y(k-1,kk*3+2);
                    y2=(-bb-sqrt(D))/2/aa;
                    x2=(cc-y2*yp2)/xp2+x(k-1,kk*3+2);
                    y2=y2+y(k-1,kk*3+2);
                    % Выбираем корень, 
                    % который рисует треугольник наружу
                    if abs(x2)>abs(x1)
                        y(k,kk*4+3)=y2;
                        x(k,kk*4+3)=x2;
                    elseif abs(x2)<=abs(x1)
                        y(k,kk*4+3)=y1;
                        x(k,kk*4+3)=x1;
                    end;
                    if abs(y2)<=abs(y1)
                        y(k,kk*4+3)=y1;
                        x(k,kk*4+3)=x1;
                    elseif abs(y2)>abs(y1)
                        y(k,kk*4+3)=y2;
                        x(k,kk*4+3)=x2;
                    end;
                end;
                % Рисуем кривую со вставленным новым треугольником
                plot(x(k,:),y(k,:),'.b-','LineWidt',1);
                axis([-1 1 -1 1]);
                axis('square');
                title(strcat('Koh Curve, itRations k=',num2str(k)));
                pause(0.5);
            % Производим новое разбиение отрезков на три: 
            % и записываем новую итерацию: 
                n=length(x(k,:))-1;
                for kk=0:n-1
                    x(k+1,kk*3+1)=x(k,kk+1); 
                    y(k+1,kk*3+1)=y(k,kk+1);
                    x(k+1,kk*3+2)=(x(k,kk+2)-x(k,kk+1))/3+x(k,kk+1); 
                    y(k+1,kk*3+2)=(y(k,kk+2)-y(k,kk+1))/3+y(k,kk+1);
                    x(k+1,kk*3+3)=(x(k,kk+2)-x(k,kk+1))*2/3+x(k,kk+1); 
                    y(k+1,kk*3+3)=(y(k,kk+2)-y(k,kk+1))*2/3+y(k,kk+1);
                    x(k+1,kk*3+4)=x(k,kk+2); 
                    y(k+1,kk*3+4)=y(k,kk+2);
                end;
            % рисуем новое разбиение отрезков следующей итерации
                plot(x(k+1,:),y(k+1,:),'.b-','LineWidt',1);
                axis([-1 1 -1 1]);
                axis('square');
                title(strcat('Koh Curve, itRations k=',num2str(k+1)));
                pause(0.5);
            end; % Конец цикла итераций
        end; % Конец цикла выбора числа итераций
        case 4
            % Поиск точек множества Жюлиа методом обратных итераций (МОИ): 
            mn=0; 
            while mn<5 % цикл выбора порядка Z^n:
            mn=menu('SeLect Z^n:','n=2','n=3','n=4','n=5','EXIT');
            if mn==5 % Если нажата 5-ая кнопка
                break; % Выходим из выбора пунктов меню
            end;
            n=mn+1; M=[100 225 625 1600];  
            mn=menu('SeLect Total Points Number:','m=100','m=225','m=625','m=1600','EXIT');
            if mn==5 % Если нажата 5-ая кнопка
                break; % Выходим из выбора пунктов меню
            end;
            plot([-1 1],[0 0],'k-','LineWidth',3);
            hold on; % Вкл. Режим наложения изображений
            plot([0 0],[-1 1],'k-','LineWidth',3);
            text(0,1,'+j');
            text(1,0,'+1');
            % Задаём координаты вершин области поиска 
            [X,Y]=ginput(2);
            Y=sort(Y);X=sort(X);
            % число точек по координатам
            nx=sqrt(M(mn))*(X(2)-X(1))/(Y(2)-Y(1)); 
            ny=sqrt(M(mn))*(Y(2)-Y(1))/(X(2)-X(1)); ; 
            % шаги по координатам
            hx=(X(2)-X(1))/nx; hy=(Y(2)-Y(1))/ny;
            % Задаём циклы перебора координат начальной точки c=a+i*b
            kk=0; % Инициируем счётчик точек множества Жюлиа
            for a=X(1):hx:X(2)
                for b=Y(1):hy:Y(2)
            z(1)=a+i*b;
            plot([a],[b],'k-','LineWidth',1);
            N=5; % максимальное число точек в цикле итераций
            for k=1:N % цикл счёта итераций
                z(k+1)=z(k)^n+z(1);
                % Вычисляем расстояние между точками в итерациях
                r(k)=abs(z(k+1)-z(k)); 
            end; % конец цикла счёта точек итераций
            % цикл проверки расстояний между точками итераций
            for k=1:N-1 
                % Если расстояния между точками итераций
                if r(k)<r(k+1) 
                    % то данную точку С не защитываем, 
                    % цикл проверки заканчивается
                    plot([a],[b],'*k-','LineWidth',1);
                    break; 
                end; % Конец условия проверки расстояний между точками итераций
            end;
            if k>=N-1
                kk=kk+1; % Увеличиваем счётчик точек на 1
                c(kk)=a+i*b; % Запоминаем точку 
                plot([a],[b],'ob-','LineWidth',1);
                title(strcat('f(z)=z^',num2str(n),'+C; Point Number: k=',num2str(kk),'; C(k)=',num2str(c(kk))));
                pause(0.01); % пауза для отображения картинки
            end;
                end;
            end; % Конец циклов перебора координат начальной точки c=a+i*b
            % цикл отсева внутренних точек
            kc=0;
            for k=1:length(c)
                % Определяем число соседних с C(k) точек 
                % по отстоянию по каждой координате
                sumC=0;
                for kk=1:length(c)
                    if and(abs(imag(c(kk))-imag(c(k)))<1.001*hy,abs(real(c(kk))-real(c(k)))<1.001*hx)
                        sumC=sumC+1;
                    end;
                end;
                if sumC<7 % Если среди соседних точек хотя бы одна из пустого пространства
                    kc=kc+1; % увеличиваем счётчик внешних точек на 1
                    JR(kc)=c(k); % запоминаем эту точку в множестве Жюлиа
                    % Рисуем множество Жюлиа
                    plot([real(JR(kc))],[imag(JR(kc))],'or-','LineWidth',3);
                    title(strcat('f(z)=z^',num2str(n),'+C; Point Number: k=',num2str(kc),'; JR(k)=',num2str(JR(kc))));
                    pause(0.01);
                end;
            end; % Конец цикла отсева внутренних точек
            hold off; % Выкл. Режим наложения изображений
            end; % конец цикла выбора порядка Z^n:
        case 5
            % Поиск точек множества Мандельброта методом обратных итераций (МОИ): 
            mn=0; n=2;
            while mn<5 % цикл выбора числа точек по действ. оси:
            M=[50 100 200 400];  
            mn=menu('SeLect ReaL Axis Points Number:','m=50','m=100','m=200','m=400','EXIT');
            if mn==5 % Если нажата 5-ая кнопка
                break; % Выходим из выбора пунктов меню
            end;
            plot([-2 2],[0 0],'k-','LineWidth',3);
            hold on; % Вкл. Режим наложения изображений
            plot([0 0],[-2 2],'k-','LineWidth',3);
            text(0,2,'+2j');
            text(2,0,'+2');
            % число точек по координатам
            nx=M(mn); 
            % шаги по координатам
            hx=(2-(-2))/nx; hy=hx;
            % Задаём циклы перебора координат начальной точки c=a+i*b
            kk=1; % Инициируем счётчик точек МандельБрота
            c(1)=-2+i*0; % первая точка МандельБрота
            for a=-2+hx:hx:2
                Y=sqrt(4-a^2);
                for b=-Y:hy:Y
            z(1)=a+i*b;
            if abs(z(1))<2 % условие |c|<2
            %plot([a],[b],'k-','LineWidth',1);
            N=10; % максимальное число точек в цикле
            for k=1:N % цикл счёта итераций
                z(k+1)=z(k)^n+z(1);
                % Вычисляем расстояние между точками в итерациях
                if abs(z(k+1))>=2 
                    break;
                elseif k==N 
                    kk=kk+1; % Увеличиваем счётчик точек на 1
                    c(kk)=a+i*b; % Запоминаем точку
                    plot([a],[b],'.r-','LineWidth',1);
                    title(strcat('f(z)=z^',num2str(n),'+C; Point Number: k=',num2str(kk),'; C(k)=',num2str(c(kk))));
                    pause(0.01); % пауза для отображения картинки
                end;
            end; % конец цикла счёта точек итераций
            end; % Конец условия |c|<2
                end;
            end; % Конец циклов перебора координат начальной точки c=a+i*b
            hold off; % Выкл. Режим наложения изображений
            end; % конец цикла выбора числа точек по действ. оси
    end; % конец селектора кнопок главного меню
end; % конец цикла выбора пунктов меню

Содержание:


Заказать диплом


Математика
MATLAB
СМО и GPSS
Экономика
Физика
Cопромат и теормех
Бухучет
Карта сайта

РЕШИТЬ-МАТЕМАТИКУ.РФ

Помощь на экзаменах по математике, срочное решение задач! КРУГЛОСУТОЧНАЯ консультация.