La relazione stock-reclutamento per questo tipo di popolazione ha prodotto la tabella: NtNt+1
clear all global Nt Nt0 Nt1 % Numero di aringhe (10^3 tonellate)al tempo t Nt=[ ]; % Numero di aringhe (10^3 tonellate)al tempo t+1 Nt1=[ ]; plot(Nt,Nt1,'o') title('Stock-Reclutamento per una popolazione di aringhe del Mare del nord') xlabel('Nt [ 10^3 tonnellate]') ylabel('Nt+1 [ 10^3 tonnellate] ') Tramite una procedura di fitting ai minimi quadrati è possibile risalire alla funzione relativa al modello di Ricker capace di descrivere la dinamica di questa popolazione
% Approssimazione ai minimi quadrati con il modello di Richer % % N(t+1)= lambda* N(t)*exp(-K*N(t)) % % p = [ lambda, K ]: parametri da identificare % ======================================== Nt0= Nt(1); p=[ ]; % valori iniziali dei parametri da identificare options=optimset('TolX',0.001); % [p,fmin,exit,out]=fminsearch('Rerr',p,options); % % Rappresentazione grafica dei risultati % % y dati calcolati con il modello % Nt1 dati misurati % for i=1:length(Nt) y(i)= ricker(p,Nt(i)); end
%%%%%%%%%%%%%% % Calcolo dell'errore % tra i valori misurati e quelli calcolati (modello di Ricker) % % ( Errore = Distanza euclidea) %%%%%%%%%%%%%%%% function z=Rerr(p) global Nt Nt0 Nt1 % len = length(Nt); for i=1:len y(i)= ricker(p,Nt(i)); end z=norm(y-Nt1); %%%%%%%%%% % Definizione del MODELLO DI % RICKER % % N(t+1)= lambda* N(t)*exp(-K*N(t)) %%%%%%%%%% function y =ricker(param,N) global Nt Nt0 Nt1 lambda=param(1); K=param(2); y=lambda*N*exp(-K*N);
figure(2) plot(Nt,Nt1,'o',Nt,y) title( 'Modello di Ricker per una popolazione di aringhe') xlabel('Nt [ 10^3 tonnellate]') ylabel('Nt+1 [ 10^3 tonnellate]') legend('Dati misurati','Modello di Ricker')