Исправить код Matlab для репликации графа - PullRequest
0 голосов
/ 25 апреля 2020

Я пытался повторить первую цифру по этой ссылке https://www.iitk.ac.in/kangal/resources.shtml, но я не уверен, что написал этот код правильно или нет. Пожалуйста, исправьте, где я сделал ошибки. Видимо, есть две разницы:

1.Пик кривой не у родительских значений 2 и 5
2. Начальные значения дочерних решений не из -1. Когда я определяю диапазон x и y от -1, это нарушает фигуру.

eta1=2;
eta2=5;
eta3=10;

x = (0:0.01:100);
y = (0:0.01:100);


for i = 1:length(x)
    if x(i) <= 1
        fc11(i) = 0.5*(eta1+1)*x(i).^eta1;
    else
        fc11(i) = (0.5*(eta1+1))./(x(i).^(eta1+2));
    end
end
for i = 1:length(x)
    if x(i) <= 1
        fc21(i) = 0.5*(eta2+1)*x(i).^eta2;
    else
        fc21(i) = (0.5*(eta2+1))./(x(i).^(eta2+2));
    end
end
for i = 1:length(x)
    if x(i) <= 1
        fc31(i) = 0.5*(eta3+1)*x(i).^eta3;
    else
        fc31(i) = (0.5*(eta3+1))./(x(i).^(eta3+2));
    end
end

for i = 1:length(y)
    if y(i) <= 1
        fc12(i) = 0.5*(eta1+1)*y(i).^eta1;
    else
        fc12(i) = (0.5*(eta1+1))./(y(i).^(eta1+2));
    end
end
for i = 1:length(y)
    if y(i) <= 1
        fc22(i) = 0.5*(eta2+1)*y(i).^eta2;
    else
        fc22(i) = (0.5*(eta2+1))./(y(i).^(eta2+2));
    end
end
for i = 1:length(y)
    if y(i) <= 1
        fc32(i) = 0.5*(eta3+1)*y(i).^eta3;
    else
        fc32(i) = (0.5*(eta3+1))./(y(i).^(eta3+2));
    end
end

linVec = {'-', '-.','--'};
colorVec = {'k', 'b', 'r'};
figure(1)

plot([x y+2],[fc11 fc12],'Color',colorVec{1}, 'LineStyle',linVec{1}, 'LineWidth',2);
hold on
plot([x y+2],[fc21 fc22],'Color',colorVec{2}, 'LineStyle',linVec{2}, 'LineWidth',2);
plot([x y+2],[fc31 fc32],'Color',colorVec{3}, 'LineStyle',linVec{3}, 'LineWidth',2);
hold off
legend('\eta=2', '\eta=5','\eta=10')
title('Probability distribution for creating children solutions of continuous variables')
xlabel('children solution')
ylabel('probability density per child')
xlim([-1 8])
ylim([0 3])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...