2017-08-24 10 views
0

j'ai essayé de reproduire le script du lien suivant: Parameters estimation on Lotka Volterra model with ScilabScilab: Estimation des paramètres sur Lotka modèle Volterra Scilab

et je reçois des erreurs similaires dans les résultats à ceux décrits dans ce .. Vous pouvez me guider pour exécuter le script sans erreurs. Gracias Hermes

+0

Possible copie de [Estimation des paramètres sur le modèle Lotka Volterra avec Scilab] (https://stackoverflow.com/questions/22614164/parameters-estimation-on-lotka-volterra-model-with-scilab) – bummi

Répondre

0

Solution pour Scilab 5.5.1 ou moins

Le problème est que le solveur atteindre en quelque sorte un point où il ne peut pas résoudre l'ode sur chaque t et arrête à un certain point. Ainsi, votre y_calc est plus petite que y_exp.

Si ce n'est pas un problème pour vous, changer diffmat la ligne 6 de la fonction Differences à

diffmat = y_calc' - y_exp(1:size(y_calc',1),:) 

Solution pour Scilab 6.0.0 ou plus

La fonction ode maintenant augmenter une erreur lors de il ne parvient pas à calculer dans Scilab 6.XX En utilisant les instructions try ... catch ... end, nous pouvons laisser le programme s'occuper de cela.

donc une mauvaise (et je vais expliquer pourquoi après) la solution est en train de changer la ligne 5 de Differences fonction

try // test if ode works normally 
    [y_calc,odew,odeiw]=ode(y0',t0,t,list(LotkaVolterra,c,n,m,e)) 
catch // if an error is raised 
    y_calc = y_exp' // Put a value when the computations fails 
end 
diffmat = y_calc' - y_exp(1:size(y_calc',1),:) 

Vous obtenez toujours avertissement de ode.

Pourquoi est-il mauvais

Depuis que vous avez demandé un programme en cours d'exécution, je l'ai utilisé la déclaration try catch à jeter loin l'erreur et laisser le programme continuer. Tu ne devrais pas. Cela signifie que votre problème est mal défini: les paramètres sont mal choisis ou ne peuvent pas être résolus numériquement. Je recommande de travailler sur les mathématiques derrière le programme et de trouver pourquoi certains paramètres peuvent casser l'algorithme ode.

Et il y a une autre raison pour laquelle vous ne devriez pas suivre ma réponse. Comme vous le voyez, quand j'attrape une erreur, je donne à y_calc une certaine valeur. Mais c'est mathématiquement absurde car un problème d'optimisation repose sur le fait que la solution se rapproche au mieux du problème initial. Je suis sûr à 99% que la déclaration y_calc = y_exp' vous donnera des résultats inutilisables.