Отображение и сохранение графика одновременно в максимумах

В настоящее время я могу отображать график в максимумах следующим образом:

f(x) := sin(x)$
g(x) := cos(x)$

plot2d([f(x), g(x)], [x,-5,5],[legend,"sin(x)","cos(x)"],
[xlabel,"x"],[ylabel,"y"],
[gnuplot_preamble,"set key box spacing 1.3 top right"])$

И сохраните графики командой:

plot2d([f(x), g(x)], [x,-5,5],[legend,"sin(x)","cos(x)"],
[xlabel,"x"],[ylabel,"y"],
[pdf_file,"./trigplot.pdf"],
[gnuplot_preamble,"set key box spacing 1.3 top right"]
)$

Как одновременно отображать и сохранять график в максимумах?


person ASarkar    schedule 01.12.2018    source источник


Ответы (1)


p2 принимает имя файла и те же аргументы, что и plot2d.

p2(file, [L])::=buildq([file, L],
  (plot2d(splice(L)),
   plot2d(splice(L), ['pdf_file, file])))$

f(x) := sin(x)$
g(x) := cos(x)$
p2("trigplot.pdf",
  [f(x), g(x)], [x,-5,5],
  [legend,"sin(x)","cos(x)"], 
  [xlabel,"x"],[ylabel,"y"],
  [gnuplot_preamble,"set key box spacing 1.3 top right"]);

Это макрос. Сначала он заменяет file и L. splice(L)` преобразуется в список аргументов. После подстановки результирующее выражение оценивается в контексте вызывающего объекта.

Вы можете использовать macroexpand, чтобы увидеть выражение после подстановки.

(%i1) a: 42 $
(%i2) macroexpand(p2(file, a, b));
(%o2)           (plot2d(a, b), plot2d(a, b, ['pdf_file, file]))
person slitvinov    schedule 05.12.2018
comment
Только изменил имя файла на "./trigplot.pdf", чтобы сохранить график в текущем каталоге. - person ASarkar; 07.12.2018