2014-03-27 2 views
4

Я использую следующий скрипт Gnuplot:Странное поведение при попытке построить отдельные значения

##### Definitions #### 
a=0.3 
s0=10. 
s1=-9.999 
r1u(x)=-exp(x)*(-1+a+a*exp(x))/((1+exp(x))**3) 
r2u(x)=exp(x)*(1-exp(x))*(-1+a+a*exp(x))/((1+exp(x))**4) 
f1(c,d)=s0*c*(1-2*a)/2. + s1*r1u(d) 
f2(c,d)=1./(3.*c) - s0*c/6. + s1*r2u(d) 
dummyx(z)=25. 
dummyy1(z)=.08 
dummyy2(z)=.06 

##### Prologue ##### 
clear 
reset 

###### Plot data ##### 
set zeroaxis 
set key title 'plot of dw/dt' 
plot '019999.rrp' using 1:(f2(($4),($5))) with linespoints linewidth 2 notitle 
pause -1 
stats '019999.rrp' using 5 nooutput 
do for [i=0:int(STATS_records-1)] { 
    reset 
    set term x11 1 
    set key title '-x0/w at t'.i.' and its position on the "source term" curve' 
    set xrange [STATS_min:STATS_max] 
    set label 1 sprintf("t = %3.0f",i) at 25,.04 
    set label 2 'w is' at 19,.08 
    set label 3 'dw/dt is' at 19,.06 
    plot '019999.rrp' every ::i::i:1 using 5:(r1u($5)) linewidth 5 notitle,\ 
     '019999.rrp' every ::i::i:1 using (dummyx($1)):(dummyy1($1)):4 with labels notitle,\ 
     '019999.rrp' every ::i::i:1 using (dummyx($1)):(dummyy2($1)):(f2(($4),($5))) with labels notitle,\ 
     r1u(x) with lines lw 2 notitle 
    pause -1 
} 

и последний f2(($4),($5)) не делать то, что он должен. Это просто участки ($5). Однако работает первый f2(($4),($5)).

Отложенный файл находится здесь: http://we.tl/SPX4ykaX4j. Я не знаю, является ли хорошей практикой предоставление ссылки, поэтому вот глава этого файла, которого достаточно, чтобы воспроизвести ошибку.

0.0000000E+00 -15.00000  -60.00000  0.4472136  33.54102  
0.2500000  -14.77640  0.8944144  0.4472048  33.04168  
0.5000000  -14.55279  0.8944079  0.4472023  32.54186  
0.7500000  -14.32919  0.8944058  0.4472016  32.04191  
1.000000  -14.10559  0.8944051  0.4472014  31.54192  
1.250000  -13.88199  0.8944049  0.4472013  31.04193 
1.500000  -13.65839  0.8944048  0.4472013  30.54193  
1.750000  -13.43479  0.8944047  0.4472013  30.04193  
2.000000  -13.21119  0.8944047  0.4472013  29.54193  
2.250000  -12.98759  0.8944047  0.4472013  29.04193  
2.500000  -12.76398  0.8944047  0.4472013  28.54192  
2.750000  -12.54038  0.8944046  0.4472012  28.04193  
3.000000  -12.31678  0.8944047  0.4472013  27.54192  
3.250000  -12.09318  0.8944047  0.4472013  27.04192  
3.500000  -11.86958  0.8944047  0.4472013  26.54192  
3.750000  -11.64598  0.8944047  0.4472013  26.04192  
4.000000  -11.42238  0.8944047  0.4472013  25.54192  
4.250000  -11.19878  0.8944047  0.4472013  25.04192  
4.500000  -10.97517  0.8944047  0.4472013  24.54191  
4.750000  -10.75157  0.8944047  0.4472013  24.04191  
5.000000  -10.52797  0.8944047  0.4472013  23.54191  
5.250000  -10.30437  0.8944046  0.4472012  23.04191  
5.500000  -10.08077  0.8944047  0.4472013  22.54191  
5.750000  -9.857169  0.8944047  0.4472013  22.04191  
6.000000  -9.633568  0.8944047  0.4472013  21.54191  
6.250000  -9.409966  0.8944047  0.4472013  21.04191  
6.500000  -9.186366  0.8944047  0.4472013  20.54190  
6.750000  -8.962765  0.8944047  0.4472013  20.04190  
7.000000  -8.739163  0.8944047  0.4472013  19.54190  
7.250000  -8.515562  0.8944047  0.4472013  19.04190  
7.500000  -8.291961  0.8944047  0.4472013  18.54190  
7.750000  -8.068360  0.8944046  0.4472012  18.04190  
8.000000  -7.844759  0.8944047  0.4472013  17.54190  
8.250000  -7.621158  0.8944047  0.4472013  17.04190  
8.500000  -7.397556  0.8944047  0.4472013  16.54189  
8.750000  -7.173955  0.8944047  0.4472013  16.04189  
9.000000  -6.950354  0.8944047  0.4472013  15.54189  
9.250000  -6.726753  0.8944047  0.4472013  15.04189  
9.500000  -6.503151  0.8944047  0.4472013  14.54189 
+0

Я использую версию 4.6 5. – bela83

+0

номера патчей Для людей, которые upvoted: Вы были в состоянии воспроизвести ошибку? – bela83

ответ

2

Проблема фиксируется, если использовать sprintf для форматирования значения функции:

... 
plot '019999.rrp' every ::i::i using (dummyx($1)):(dummyy2($1)):(sprintf("%g", f2(($4),($5)))) with labels notitle 
... 

Той же ошибка может быть воспроизведен с помощью следующего упрощенного примера (?):

set samples 11 
set xrange [0:10] 
f(x,y) = x+y 
unset key 

set multiplot layout 2,1 
plot '+' using 1:1:(f($1,$1)) with labels 
plot '+' using 1:1:(sprintf("%g", f($1,$1))) with labels 
unset multiplot 

Я не знаю, если это можно считать ошибкой. Я сообщил об этом как #1368 Conversion of numerical expressions in string columns.

enter image description here

+0

Уважаемый Кристоф, теперь он работает как шарм! Спасибо за отчет об ошибке (?). Я внимательно его прочитал и обнаружил, что это связано с нетривиальными вопросами (для меня) ... Но, может быть, я делаю слишком сложные вещи? Если вы читаете мой скрипт, вы видите, что я просто хочу напечатать на моем графике значение некоторых переменных (или их значений для данной функции). Есть ли другой способ сделать это? – bela83

+1

Основное сообщение обсуждения в отчете состоит в том, что третий столбец должен содержать строку, которую вы можете создать с помощью оператора 'sprintf', как показано в ответе. Остальное связано с тем, как можно добиться автоматического преобразования числовых выражений или значений в строку, если сообщение об ошибке должно быть сгенерировано, если преобразование невозможно, как в вашем случае. – Christoph

Смежные вопросы