Simulate predator prey system using loops

조회 수: 16 (최근 30일)
Nathan Bhoedjang
Nathan Bhoedjang 2020년 4월 23일
답변: Muthaffar A-Jassim 2020년 4월 23일
I've written a code to simulate a predator-prey system in MATLAB (code below). I want to simulate the movements of each animal, but I don't know how to turn the output of a loop into a simulation. I'm quite new to MATLAB so some help would be appreciated. To clear things up: I've put each animal in a structure and put those in two maps: one for preys and one for predators.
% VARIABELEN
numDays = 50;
probbrirthPrey = 0.06;
probbirthPred = 0.04;
birthagePrey = 10;
birthagePred = 10;
axis = 10;
W = 0:1:axis;
rpred = 2;
rprey = 1.5;
preyid = 0;
predid = 0;
% MAPPEN MET INITIËLE DIEREN
predMap = containers.Map('KeyType', 'int64', 'ValueType', 'any');
pred = struct('x', rand * axis, 'y', rand * axis, 'age', 25, 'honger', 0);
predid = predid + 1;
predMap(predid) = pred;
preyMap = containers.Map('KeyType', 'int64', 'ValueType', 'any');
prey = struct('x', rand * axis, 'y', rand * axis, 'age', 15);
preyid = preyid + 1;
preyMap(preyid) = prey;
prey = struct('x', rand * axis, 'y', rand * axis, 'age', 20);
preyid = preyid + 1;
preyMap(preyid) = prey;
fields = {'x', 'y', 'age'};
% DAGEN
for t = 1:numDays
disp(['---> DAG ', num2str(t),':']);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% PROOIDIEREN (PREYS)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('Prooidieren:');
for p = keys(preyMap)
thep = p{1};
fprintf(' Prooidier %d\n',thep);
newPrey = preyMap(thep);
fprintf(' Coördinaten: (%.2f, %.2f)', newPrey.x, newPrey.y)
% COÖRDINATEN
d = rand * rprey;
rad = rand * 2 * pi;
newpreyx = newPrey.x + cos(rad) * d;
newpreyy = newPrey.y + sin(rad) * d;
while newpreyx<0 || newpreyx>axis || newpreyy<0 || newpreyy>axis
d = rand * rprey;
rad = rand * 2 * pi;
newpreyx = newPrey.x + cos(rad) * d;
newpreyy = newPrey.y + sin(rad) * d;
end
newPrey.x = newpreyx;
newPrey.y = newpreyy;
% LEEFTIJD
newPrey.age = newPrey.age + 1;
% WEERGAVE
Plaats = sprintf(' Beweegt naar: (%.2f, %.2f)', newPrey.x, newPrey.y);
disp(Plaats)
Leeftijd = sprintf(' Leeftijd: %d', newPrey.age);
disp(Leeftijd)
% GEBOORTE
if newPrey.age > birthagePrey
out=rand;
if out<probbrirthPrey
child = struct('x', W(randi([1,numel(W)])), 'y', W(randi([1,numel(W)])), 'age', 0);
preyid = preyid + 1;
preyMap(preyid) = child;
fprintf(' Prooidier %d krijgt kind %d', thep, preyid);
end
end
preyMap(thep) = newPrey;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% ROOFDIEREN (PREDATORS)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
disp('Roofdieren:');
for q = keys(predMap)
theq = q{1};
fprintf(' Roofdier %d\n',theq);
newPred = predMap(theq);
fprintf(' Coördinaten: (%.2f, %.2f)', newPred.x, newPred.y)
newPred.honger = newPred.honger + 1;
% COÖRDINATEN
d = rand * rpred;
rad = rand * 2 * pi;
newpredx = newPred.x + cos(rad) * d;
newpredy = newPred.y + sin(rad) * d;
while newpredx<0 || newpredx>axis || newpredy<0 || newpredy>axis
d = rand * rpred;
rad = rand * 2 * pi;
newpredx = newPred.x + cos(rad) * d;
newpredy = newPred.y + sin(rad) * d;
end
newPred.x = newpredx;
newPred.y = newpredy;
% LEEFTIJD
newPred.age = newPred.age + 1;
% WEERGAVE
Plaats = sprintf(' Beweegt naar: (%.2f, %.2f)', newPred.x, newPred.y);
disp(Plaats)
Leeftijd = sprintf(' Leeftijd: %d', newPred.age);
disp(Leeftijd)
% GEBOORTE
if newPred.age > birthagePred
out=rand;
if out<probbirthPred
pred = struct('x', W(randi([1,numel(W)])), 'y', W(randi([1,numel(W)])), 'age', 0, 'honger', 0);
predid = predid + 1;
predMap(predid) = pred;
fprintf(' Roofdier %d krijgt kind %d', theq, predid);
end
end

답변 (1개)

Muthaffar A-Jassim
Muthaffar A-Jassim 2020년 4월 23일
x^3+3*x-2*x-6

카테고리

Help CenterFile Exchange에서 Animation에 대해 자세히 알아보기

제품


릴리스

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by