Как использовать математические функции, не встроенные в gnuplot

806
Tom-Tom

Я всегда считал gnuplotочень полезным, и даже больше, так как я использую tikzв документах L A T E X. К сожалению, число реализованных в ядре функций gnuplotдовольно мало, мне часто нужны специальные функции, такие как модифицированные функции Бесселя K ν и I ν . Эти функции не могут быть написаны с использованием существующих функций, доступных в gnuplot. Есть ли способ связать gnuplot и gslбиблиотеки? Я просматривал gnuplotting.org и другие веб-сайты, посвященные тем, gnuplotно не нашел ни слова по этому вопросу. Если у кого-то есть подсказка, я был бы признателен.

3

1 ответ на вопрос

2
Joce

If you can write a command that can calculate the function you need, then you're done:

gnuplot> f(x) = real(system(sprintf("echo %f", x))) gnuplot> plot f(x) 

(see help system)

So you can use e.g. octave to calculate your value. E.g., if your system is linux, you can have directly:

gnuplot> bJ(a,x) = real(system(sprintf("echo 'besselj(%f,%f)' | octave | grep ^ans | cut -f 2 -d =", a,x))) gnuplot> plot [0:20] bJ(1,x) 

It will take some time to run, though! Set the sample value to something low until you've set every detail of your plot. If you need to replot many times, you can also tabulate your function first using set term table and then plot the tabulated values.

Большое спасибо. Я не думал о «системе». Для функций, которые я использовал довольно часто, стоило бы скомпилировать небольшой двоичный файл, взаимодействующий с математической библиотекой, такой как GSL, чтобы избежать множественных преобразований в предложенной вами цепочке каналов. Tom-Tom 9 лет назад 0
Конечно, но в этом случае, возможно, стоит иметь двоичный файл, который может табулировать функцию, а не возвращать одно значение. В этом случае вы в конечном итоге построите файл данных с модификаторами, а не с аналитической функцией с точечными системными запросами. Joce 9 лет назад 0