Пример работы в 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; % конец цикла выбора пунктов меню

Содержание:


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


Правда про биржи студ. работ!


Помощь глазами студента New!


Что такое онлайн помощь?

Онлайн помощь по математике

Решение задач по математике
Советы тем кто собирается заказывать
В каких случаях студенты заказывают решение?
Польза или вред
Онлайн помощь на экзаменах
Решение теормеха
РГР по теормеху
Решение сопромата
Расчет по сопромату
Онлайн помощь бухучет
Решение статистики на заказ
Решение задач по экономике
Решение задач по эконометрике на заказ
Тесты по экономике
Заказать решение теормеха
Помощь онлайн сопромат
Решение физики
Пройти тест по бухучету
Нюансы онлайн помощи
Карта сайта

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

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