Расчет Gnuplot неверен

Я пытаюсь изобразить орбитальную скорость с помощью gnuplot, но каким-то образом gnuplot дает совершенно другие результаты, чем я. По опыту я считаю, что мои значения верны, но я проверил их с помощью калькулятора Google и получил свои результаты.

Я использую формулу из Википедии и Google получает скорость при апоапсисе около 2,2 км / с. Теперь сам gnuplot развивает скорость около 3,2 км / с.

set xlabel "Altitude above sea level (meters)"
set ylabel "Orbital velocity (meters per second)"
set title "Velocity of an 80×100 km orbit around Kebrin"
set terminal png size 800,640
set output "orbitv.png"
set xrange [80000:100000]
G=6.674*10**-11
M=5.2915793*10**22
R=600000
plot sqrt(G*M*(2/(x+R)-1/(90000+R))) title 'Orbital velocity' with lines

Это итоговый график

Мне интересно, где я сделал ошибку? Я скопировал формулу непосредственно в Google и заменил G, M и R постоянными значениями, а x на 100000 и получил результат, указанный выше.


person xZise    schedule 11.11.2013    source источник


Ответы (1)


Эта проблема связана с тем, как gnuplot обрабатывает целые числа при выполнении арифметических операций. Когда у вас есть такое выражение, как 1/(90000 + R), если R является целым числом, gnuplot вычисляет 1/(690000) = 0, что является совершенно правильной целочисленной арифметикой. Решение состоит в том, чтобы добавить точку к числу, чтобы gnuplot знал, как преобразовать его как число с плавающей запятой:

R = 600000.     # short option
R = 600000.0    # clearer option

Другое решение - использовать электронную запись для больших чисел:

R = 6e5

Gnuplot рассматривает это как поплавок. Это также помогает предотвратить ошибки порядка величины / количества нулей.

Между прочим, у Python и других языков такая же проблема с целочисленной арифметикой - будьте осторожны!

person andyras    schedule 11.11.2013