InfectionMatrix = zeros(100,100);
InfectionMatrix(50,50) = 1;
for k = 1:1:90
[i,j] = find(InfectionMatrix > 0.7);
%Random Number Generator
a = 0.0270;
b = 0.3250;
RANDOM = (b-a).*rand(8,1) + a;
%%%%%%%%%%%%%%%%%%%%%%%%
i(i == 1) = [];
i(i == length(InfectionMatrix)) = [];
j(j == 1) = [];
j(j == length(InfectionMatrix)) = [];
InfectionMatrix(i-1,j) = InfectionMatrix(i-1,j)+ RANDOM(1);
InfectionMatrix(i-1,j+1) = InfectionMatrix(i-1,j+1)+ RANDOM(2);
InfectionMatrix(i-1,j-1) = InfectionMatrix(i-1,j-1)+ RANDOM(3);
InfectionMatrix(i,j+1) = InfectionMatrix(i,j+1)+ RANDOM(4);
InfectionMatrix(i,j-1) = InfectionMatrix(i,j-1)+ RANDOM(5);
InfectionMatrix(i+1,j+1) = InfectionMatrix(i+1,j+1) + RANDOM(6);
InfectionMatrix(i+1,j-1) = InfectionMatrix(i+1,j-1) + RANDOM(7);
InfectionMatrix(i+1,j) = InfectionMatrix(i+1,j) + RANDOM(8);
rng('shuffle')
TooHigh = find(InfectionMatrix > 100);
for m = 1:1:length(TooHigh)
InfectionMatrix(TooHigh(m)) = 100;
end
end
h = heatmap(InfectionMatrix)
old_warning_state = warning('off', 'MATLAB:structOnObject');
hs = struct(h);
warning(old_warning_state);
hs.XAxis.TickValues = [];
hs.YAxis.TickValues = [];
Я хочу смоделировать упрощенное представление о распространяющейся инфекции. Есть 2 вещи, которые я хотел бы выполнить.
Я хотел бы знать, как изменить распространение инфекции, чтобы сделать его более круговым, очевидно, есть проблемы с угловыми узлами, прогрессирующими в форме звезды.
Я также хотел бы знать, как изменить нижнюю половину карты, чтобы прогрессировать вдвое медленнее, чем верхняя, то есть RANDOM для генерации случайных чисел будет RANDOM/2.
Такая идея.
Буду признателен за любую помощь в улучшении моего кода, которая не имеет отношения к указанным мною проблемам.





Я не уверен, к чему вы стремитесь, но я думаю, вы захотите использовать двумерную свертку такого рода
Infected = zeros(100);
Infected(50,50) = 1;
InfectionMatrix = zeros(100);
for k = 1:90
RANDOM = (b-a).*rand(3,3) + a;
RANDOM(2,2) = 0;
RANDOM = RANDOM .* fspecial('gaussian',3,1); % sigma=1 3x3 kernel
InfectionMatrix = InfectionMatrix + conv2(Infected,RANDOM,'same');
Infected = InfectionMatrix > 0.7;
end
Вы можете модулировать случайное число с помощью гауссовского фильтра, такого как fspecial (), чтобы гарантировать, что они выпадают по углам.
Я этого не понимаю, как будет выглядеть прогресс со временем? Как мне реализовать это в собственном коде?
В этом вопросе нет вопроса