by Persalteas » 24 Mar 2017, 13:44
Au final, j'ai décidé de tout intégrer au système à passer à solve, ça pose moins de soucis.
- Code: Select all
Define study_game(mat)=
Prgm
:DelVar x,y,z
:n:=colDim(mat)
:vars:=list▶mat(left(augment({x,y,z},when(n>3,seq(#("x"&string(i)),i,1,n-3),{})),n),1)
:dvars:=mat*vars
:
:Disp "Gains moyens:"
:For k,1,n
:Disp "∆"&string(vars[k,1]),"= ",dvars[k,1]
:EndFor
:d:=dotP(vars,dvars)
:Disp "∆ = ",d
:
:Disp "Equations du réplicateur:"
:sysm:=newMat(1,n+1)
:For k,1,n
:sysm[1,k]:=vars[k,1]*(dvars[k,1]-d)
:Disp vars[k,1],"' = ",vars[k,1],"(",expand(dvars[k,1]-d),")"
:EndFor
:sysm[1,n+1]:=sum(vars)[1,1]
:rhs:=newMat(1,n+1)
:rhs[1,n+1]:=1
:varlist:=mat▶list(vars)
:equs:=solve(augment(mat▶list(vars≥newMat(n,1)),mat▶list(sysm=rhs)),{x,y,z})
:equmatrix:=exp▶list(equs,{x,y,z})
:npts:=rowDim(equmatrix)
:
:Disp npts," points d'équilibre: ",equmatrix
:
:Disp "Réduction en "&string(n-1)&"D:"
:cond:=varlist[n]=1-sum(varlist)+varlist[n]
:For k,1,n-1
:Disp vars[k,1],"' = ",vars[k,1],"(",expand(dvars[k,1]-d)|cond,")"
:EndFor
:
:Disp "Matrice Jacobienne en "&string(n-1)&"D:"
:j:=seq(seq((vars[i,1]*(dvars[i,1]-d),vars[j,1])|cond,j,1,n-1),i,1,n-1)
:Disp j
:
...
:EndPrgm
Ce n'est toujours pas généralisé en dimension n puisque je dépends de solve et expr>list à qui je dois filer les variables en dur.
De toutes façons il faut aussi que je m'occupe de la fin.
Je vous donnerai des nouvelles quand ça aura avancé.
Merci déjà !