Inscription / Connexion Nouveau Sujet
Niveau logiciels
Partager :

modèle proies prédateurs

Posté par
miiss-grincheuzz
01-03-12 à 20:13

Bonjour à tous,
je viens chercher votre aide sur un problème d'informatique concernant le logiciel scilab, voici l'énoncé de mon problème:
" On s'intéresse à une version discrète du système proies-prédateurs. La suite (xn) est la population des proies (xn est la quantité de proies et yn est la quantité de prédateurs, pour
une certaine unité de mesure).
On suppose que :

xn+1= xn+ xn*(-yn)t
yn+1= yn- yn*(-xn)t

pour certains paramètres. Prenons : ====1, t= 0,01 .

1. Écrire un programme qui trace (xn), (yn) en fonction du temps (sur 10000 itérations) pour :
(a) x0 = y0 = 1

Voici ce que j'ai fait:
"
a=1;
b=1;
d=1;
g=1 ;
dt= 0.01;

function f= u(t)
    u(0)=1 ;
    for n= 0:1000
        u(n)= u(n-1)+ u(n-1)*(a-b*v(n-1))*dt ;
        end
    endfunction
    
function f2= v(t)
    v(0)=1;
    for n= 0:1000
        v(n+1)= v(n)-v(n)*(d-g*u(n))*dt ;
        end
    endfunction

"
Cependant, cela ne me revoie pas la valeur de ma suite u(n) ou v(n) (qui correspondent respectivement à x(n) et y(n)).
Quelqu'un saurait-il y voir plus clair?

Posté par
dhalte
re : modèle proies prédateurs 02-03-12 à 18:38

je ne connais pas bien la syntaxe de Scylab, mais je remarque que tes fonctions cherchent chacune à calculer indépendamment u(n) et v(n)
imagine appeler la fonction f=u(t):
elle calcule u(1000) dans une boucle où v(i) n'est pas calculé : je ne sais pas ce que Scylab va te donner pour v(-1) --première boucle de f()-- mais un langage un minimum costaud te jettera méchamment.

Posté par
miiss-grincheuzz
re : modèle proies prédateurs 02-03-12 à 19:08

oui j'ai remarqué ce problème, mais je ne sais pas comment calculer ce système, étant donné qu'il faut calculé en fonction de u et de v pour chacune! j'ai fais cela aujourd'hui :
( ça marche mais cela me renvoie pour n'importe quel u(n) et v(n) 1 )


clear


a=1;
b=1;
d=1;
g=1 ;
dt= 0.01;

function f=u(n)
if n == 0 then
f = 1
else
f = u(n-1)+u(n-1)*(a-b*v(n-1))*dt ;
end
endfunction

function f1=v(n)
if n == 0 then
f1 = 1
else
f1 = v(n-1)-v(n-1)*(d-g*u(n-1))*dt ;
end
endfunction

Posté par
Foreverson
re : modèle proies prédateurs 02-03-12 à 19:13

Comme le dit dhalte, xn+1 et yn+1 doivent être calculés l'un après l'autre, dans la même boucle.

Tu instaures un paramètre t mais tu ne l'utilises pas. Utilise le dans le programme, et ensuite quand tu exécuteras, tu mettras t=10000.
Bref, ça c'est du détail.

Revenons-en au cœur du problème : si cela est possible (désolé Scilab c'est un peu loin pour moi), je te propose de créer deux vecteurs x et y (ne t'embête avec u et v, garde les mêmes notations ce sera plus simple), de longueur t+1, contenant des 0 partout. Je crois me souvenir que c'est faisable.

Ensuite, on part dans une boucle : n varie de 0 à t-1 et on construit successivement les xn+1 et yn+1 que l'on stocke dans les vecteurs respectifs qu'on a créés.

Grosso modo quelque chose comme ça :

function f= proie(t)
création et initialisation des vecteurs x et y à faire par toi-même
x(0)=1;
y(0)=1;
    for n= 0:t-1
        x(n+1)= x(n)+ x(n)*(a-b*v(n))*dt ;
y(n+1)= y(n)-y(n)*(d-g*u(n))*dt ;
        end
    endfunction

J'ai pas regardé en détail le problème que tu as à résoudre mais cela fonctionnera déjà mieux comme ça

Posté par
Foreverson
re : modèle proies prédateurs 02-03-12 à 19:23

Avec

function [x,y]= proie(t)


ce sera encore mieux !

Posté par
miiss-grincheuzz
re : modèle proies prédateurs 02-03-12 à 19:31

A peu près ça:

a=1;
b=1;
d=1;
g=1 ;
dt= 0.01;




function [x,y]= proie(t)
x(0)=1;
y(0)=1;
t=1000 ;
    for n= 0:t-1
        x(n+1)= x(n)+ x(n)*(a-b*v(n))*dt ;
        y(n+1)= y(n)-y(n)*(d-g*u(n))*dt ;
        end
    endfunction



De plus, avec la méthode que j'ai fait précédemment, c'est à dire avec la boucle for, je trouve le bon résultat puisque si je calcul manuellement le résultat est toujours 1.
Pensez-vous que cette méthode est bonne aussi ?

Posté par
Foreverson
re : modèle proies prédateurs 02-03-12 à 19:45

Pour ton programme de 19h08, oui je pense que ça marche mais tu demandes un boulot de fou à ta machine. Le but étant de réaliser un graph, il faut stocker les xi et les yi petit à petit pour pouvoir les dessiner ensuite

En gros, pour t'expliquer vite fait, quand tu calcules u(35), il va calculer u(1), u(2), ..., u(34) ; v(1), v(2), ..., v(34) et tu vas perdre toutes ces informations, tu n'auras que la valeur de u(35) qui sera retournée.
-> des calculs pour pas grand-chose !

a=1;
b=1;
d=1;
g=1 ;
dt= 0.01;



function [x,y]= proie(t)
x=zeros(1, t+1) #un vecteur de longueur t+1
y=zeros(1, t+1)
x(0)=1;
y(0)=1;
    for n= 0:t-1
        x(n+1)= x(n)+ x(n)*(a-b*v(n))*dt ;
        y(n+1)= y(n)-y(n)*(d-g*u(n))*dt ;
        end
    endfunction

Ensuite, quand tu lances proie(10000), tu vas avoir en retour ton vecteur x, ton vecteur y, et tu pourras faire un graph

Posté par
miiss-grincheuzz
re : modèle proies prédateurs 02-03-12 à 19:51

Oui c'est pour cela que lorsque j'essayais de calculer u(1000) , j'attendais au moins 10 minutes avant d'avoir une réponse !!!
D'accord je n'avais pas saisi ce que vous entendiez par "vecteur", pour moi la fonction zeros créee des matrices remplies de zéros.
Merci beaucoup, maintenant je n'ai plus qu'à faire un plot(x) et de y pour trouver mon graphe

Posté par
miiss-grincheuzz
re : modèle proies prédateurs 02-03-12 à 19:58

Ou plot(proie(t)), dans la fonction  

Posté par
Foreverson
re : modèle proies prédateurs 02-03-12 à 20:27

Citation :
je n'avais pas saisi ce que vous entendiez par "vecteur", pour moi la fonction zeros créee des matrices remplies de zéros.


Oui souvent pour parler de matrice (1, n) je parle de vecteur. ça dépend un peu des langages de programmation que j'ai sous la main

Pour le plot, tu peux le rajouter directement dans la fonction proie, à la fin de la boucle, comme ceci :

function [x,y]= proie(t)
x=zeros(1, t+1) #un vecteur de longueur t+1
y=zeros(1, t+1)
x(0)=1;
y(0)=1;
for n= 0:t-1
  x(n+1)= x(n)+ x(n)*(a-b*v(n))*dt ;
  y(n+1)= y(n)-y(n)*(d-g*u(n))*dt ;
end
plot(x,y) #désolé, je n'ai peut-être pas la syntaxe exacte
endfunction

J'ouvre une parenthèse, juste pour en finir avec ton programme de 19h08, ce qui fait ramer ton PC, c'est cette ligne :

f = u(n-1)+u(n-1)*(a-b*v(n-1))*dt ;
Tu calcules u(n-1) une première fois (en gras), ça prend déjà beaucoup de temps.
Ensuite, tu demandes à l'ordinateur de recalculer u(n-1) une seconde fois (en italique), et ça pour tous les ui et de même pour v, tu fais exploser les délais !

Une solution pour diviser le temps d'exécution par 2 réside dans le fait de factoriser :
f = u(n-1)*(1+(a-b*v(n-1)))*dt ;
Un seul calcul de u(n-1) est demandé, au lieu de 2.

Je ferme la parenthèse.

Je ne sais pas trop, j'imagine que tu es en Licence Maths (voire Maths-Info) ou quelque chose comme ça, en tout cas pas en Terminale (d'où l'intérêt de mettre le profil à jour ), il est important de comprendre pourquoi il faut calculer xn+1 et yn+1 simultanément, dans la même boucle.

Si tu devais calculer ça à la main, tu calculerais x1 et y1, puis x2 et y2 etc., et pas x1, x2, ..., x10000 car cela n'est pas possible, on a besoin des y !!

Je t'ai donné la grosse partie du programme, mais j'insiste sur le fait qu'il faut que tu assimiles bien pourquoi j'ai utilisé cette méthode. Un programme tout fait ne sert à rien

Pour s'améliorer en programmation, je te conseille avant de te lancer dans le script du programme, de te faire un brouillon avec l'algorithme à appliquer.

Quand tu cuisines, tu prends les ingrédients, mais tu lis la recette avant, tu ne les balance pas un peu au hasard. La prog, c'est pareil
Il faut savoir d'où l'on part, où l'on veut aller, et quelles étapes sont indispensables pour y arriver.

Posté par
miiss-grincheuzz
re : modèle proies prédateurs 02-03-12 à 20:36

Oui j'ai compris ce que vous avez fait !
Il est vrai que j'ai l'habitude d'utiliser la fonction zeros(), mais la je ne voyais vraiment pas comment m'en servir ! mais il est vrai que pour stocker les informations sur x et y c'est evident !

Oui désolée je n'ai pas pensé à mettre mon profil à jour !! je vais le faire dès à présent

C'est la deuxième année où je fais de la programmation, mais j'ai vraiment énormément de mal :s je n'ai pas acquis les bons réflexes, et maintenant je n'ai pas les bonnes bases ! En effet, je vois ce que je dois faire mais je n'arrive pas à mettre en pratique la programmation associée!
Donc je suis un peu dans le pétrin !

Posté par
Foreverson
re : modèle proies prédateurs 02-03-12 à 20:50

Pour la programmation, un conseil que je peux te donner, c'est d'essayer de prendre du recul sur le problème.
Surtout ne pas se précipiter sur l'ordinateur : prendre le temps d'écrire sur un brouillon les étapes, vraiment comme une recette de cuisine.
Coder n'est "que" la finalité de ce travail en amont.

Après, je ne sais pas trop ce que tu as vu/pas vu, fait/pas fait mais surtout n'hésite pas à poser des questions, à envoyer tes programmes sur ce forum ou un autre. Et comme pour les autres matières, pas de secret : pour progresser il faut s'entraîner mais t'as l'air motivée et tu n'es pas réfractaire à programmer, ce qui est une très bonne chose

Posté par
miiss-grincheuzz
re : modèle proies prédateurs 02-03-12 à 21:03

Oui je pense que c'est une question de "déclic", il faut juste que j'applique mon raisonnement à la programmation !

Eh bien j'ai commencé à programmer avec processing, puis un peu de java, et maintenant je ne fais plus que du scilab.

Oui je souhaite vraiment m'améliorer car mes lacunes commencent à constituer un vrai handicap! Cependant, il est vrai que je commence à perdre ma motivation car je trouve cela dur !

Mais c'est vrai que ce forum est vraiment très vivant, et je l'utilise depuis le lycée! Et puis les gens sont vraiment très impliqués et sympathiques

Posté par
Foreverson
re : modèle proies prédateurs 02-03-12 à 21:46

Tu serais pas à la fac de Nice par hasard ?

Processing, un peu de Java et du Scilab, j'ai fait exactement la même chose

Posté par
miiss-grincheuzz
re : modèle proies prédateurs 03-03-12 à 09:16

Oui j'y suis aussi

Posté par
Foreverson
re : modèle proies prédateurs 03-03-12 à 09:43

Ahaaa excellent

Moi je n'y suis plus mais si tu t'interroges sur certains profs ou matières ou autre, n'hésite pas à m'envoyer un mail (je le laisse visible ce week-end, il te suffit de cliquer sur le petit bonhomme à côté de mon pseudo et tu l'auras)

Bonne journée !



Vous devez être membre accéder à ce service...

Pas encore inscrit ?

1 compte par personne, multi-compte interdit !

Ou identifiez-vous :


Rester sur la page

Désolé, votre version d'Internet Explorer est plus que périmée ! Merci de le mettre à jour ou de télécharger Firefox ou Google Chrome pour utiliser le site. Votre ordinateur vous remerciera !