Je rencontre un comportement erratique sur un script gnuplot ligné lourd.Pour les plantages en boucle dans gnuplot
Le script a l'intention de tracer des limites. Les styles courbe et ligne sont utilisés. Aussi une famille mono-paramétrique de courbes sont affichées via
plot for [i=1:4] f(x,i) title sprintf("f(x,i) i=%d",i) w l dt 2
Je tweeté un exemple ici https://pbs.twimg.com/media/DHbeEgXXkAAV6aS.jpg:large
Après ce complot, je continuais l'introduction de l'Argentine. Après de nouvelles lignes de codes, les lignes pointillées en bleu ont commencé à se comporter de manière erratique. Deux d'entre eux ont simplement disparu.
J'ai commencé à déboguer le code et finalement utiliser l'utilitaire set table produisant la totalité de l'intrigue dans un seul fichier. J'ai trouvé que la boucle for se comportait de manière erratique. La ligne de titre montre que la variable de boucle i s'exécute correctement du début à la fin. Cependant, la fonction f (x, i) n'a pas été correctement alimentée avec la valeur correcte de i.
Lors de la première itération, la valeur de la boucle a bien fonctionné et le script a tracé f (x, 1). Lors de la deuxième itération, la fonction a été correctement alimentée et affichée f (x, 2). Mais au-delà de la fonction a toujours été alimentée par i = 2 malgré chaîne de titre correctement a montré le changement de i
L'intrigue résultant a été
J'apprécierais vraiment un soupçon me aider à trouver le bug.
Je vais maintenant ajouter quelques lignes de code. La parcelle commande
plot for [i=1:words(europa_cet)] countries u ($1+($2<36?1:0)*15):(mercator($2)) index (word(europa_cet,i)+0) w filledcurve lc rgb colorFondoCET,\
for [i=1:words(paises_wet)] countries u ($1+15+dst*word(dst_wet,i)*15):(mercator($2)) index (word(paises_wet,i)+0) w filledcurve lc rgb colorFondoWET,\
for [i=1:words(southAm)] countries u ($1+(4+dst*word(dstSouthAm,i))*15):(mercator(abs($2))) index int(word(southAm,i)) w filledcurve lc rgb colorFondoGET,\
"magallanes.dat" u (new!=2?$1+dst*15:1/0):(mercator($2)) w filledcurve lc rgb colorFondoEET,\
"no_magallanes.dat" u (new!=2?$1:1/0):(mercator($2)) w filledcurve lc rgb colorFondoEET,\
for [k=1:5:1] mercator(orto(x,real(b1)+real(k)*real(15.0))) tit sprintf("orto a %02d signo %d",k,Signo) w l lc rgb 'blue' dt 2 lw 3,\
mercator(orto(x,b1+1*15)) tit sprintf("no loop orto a %02d signo %d",1,Signo) w l lc rgb 'blue' dt 2 lw 3,\
mercator(orto(x,b1+2*15)) tit sprintf("no loop orto a %02d signo %d",2,Signo) w l lc rgb 'blue' dt 2 lw 3,\
mercator(orto(x,b1+3*15)) tit sprintf("no loop orto a %02d signo %d",3,Signo) w l lc rgb 'blue' dt 2 lw 3,\
mercator(orto(x,b1+4*15)) tit sprintf("no loop orto a %02d signo %d",4,Signo) w l lc rgb 'blue' dt 2 lw 3,\
mercator(orto(x,b1+5*15)) tit sprintf("no loop orto a %02d signo %d",5,Signo) w l lc rgb 'blue' dt 2 lw 3,\
mercator(orto(x,b1+0*15)) tit sprintf("no loop orto a %02d signo %d",0,Signo) w l lc rgb 'blue' dt 2 lw 3,\
La for-loop
(ligne 6) ne fonctionnent pas. Les appels ligne par ligne (lignes 7-12) fonctionnent.
et la sortie obtenue à partir set table
, premières lignes de chaque itération
# Curve 43 of 104, 100 points FIRST iteration
# Curve title: "orto a 01 signo 1"
# x y type
-22.5 0.874361° i
-21.9697 0.887919° i
-21.4394 0.901287° i
-20.9091 0.914467° i
# Curve 44 of 104, 100 points SECOND iter
# Curve title: "orto a 02 signo 1"
# x y type
-22.5 0.407722° i
-21.9697 0.426936° i
-21.4394 0.445968° i
-20.9091 0.464814° i
# Curve 45 of 104, 100 points THIRD iter (REPEATS 2nd)
# Curve title: "orto a 03 signo 1"
# x y type
-22.5 0.407722° i
-21.9697 0.426936° i
-21.4394 0.445968° i
-20.9091 0.464814° i
# Curve 46 of 104, 100 points FOURTH iter (repeats 2nd)
# Curve title: "orto a 04 signo 1"
# x y type
-22.5 0.407722° i
-21.9697 0.426936° i
-21.4394 0.445968° i
-20.9091 0.464814° i
# Curve 47 of 104, 100 points FIFTH iter (repeats 2nd)
# Curve title: "orto a 05 signo 1"
# x y type
-22.5 0.407722° i
-21.9697 0.426936° i
-21.4394 0.445968° i
-20.9091 0.464814° i
peut être lié au fait que 'i' est un nombre entier, donc si la fonction' f' effectue des opérations arithmétiques telles que la division, etc., le résultat pourrait ne pas être ce qui est prévu - pourriez-vous essayer 'f (x, real (i)) 'à la place afin de lancer' i' explicitement pour flotter? – ewcz
Nice. J'aurais aimé que ça marche. Mais ça a échoué. J'ai même transformé en réels tous les entiers à l'intérieur de f. Cela n'a pas fonctionné non plus. – jmmo
pourriez-vous poster la fonction en question et/ou un exemple plus complet? sinon, il est difficile de dire ce qui pourrait être faux ... – ewcz