(wx)Maxima逐点绘制,编号为

时间:2015-09-07 16:45:22

标签: plot maxima

我有一个根列表,我想绘制实部/虚部。如果s=allroots()r=realpart()i=imagpart(),则全部为makelist()。由于length(s)可以得到...冗长,有没有办法逐点绘制并让它们编号?实际上,编号部分是我最关心的问题。我可以简单地使用points(r,i)来完成工作,但我想知道它们在一些排序算法之前和之后的出现。并不总是需要绘制所有点,我可以直到一些号码,但我必须能够看到它们的顺序整理出来。

我尝试过multiplot_mode,但它不起作用:

multiplot_mode(wxt)$
for i:1 thru length(s) do draw2d(points([r[i]],[i[i]]))$
multiplot_mode(none)$

我得到的只是一点。现在,如果这应该有效,那么使用draw2d' label(["label",posx,posy])非常方便,但是我可以以某种方式评估i循环中的for "" }}?

或者,还有其他办法吗?有了Octave?还是Scilab?我在Linux上,顺便说一句。

为了清楚起见,这就是我目前所做的事情:(我无法发布图片,这里是链接:i.stack.imgur.com/hNYZF.png)

...这里是wxMaxima代码:

ptest:sortd(pp2); length(ptest);
draw2d(proportional_axes=xy,xrange=[sort(realpart(s))[1]-0.1,sort(realpart(s))[length(s)]+0.1],
 yrange=[sort(imagpart(s))[1]-0.1,sort(imagpart(s))[length(s)]+0.1],point_type=0,
 label(["1",realpart(ptest[1]),imagpart(ptest[1])]),points([realpart(ptest[1])],[imagpart(ptest[1])]),
 label(["2",realpart(ptest[2]),imagpart(ptest[2])]),points([realpart(ptest[2])],[imagpart(ptest[2])]),
 label(["3",realpart(ptest[3]),imagpart(ptest[3])]),points([realpart(ptest[3])],[imagpart(ptest[3])]),
 label(["4",realpart(ptest[4]),imagpart(ptest[4])]),points([realpart(ptest[4])],[imagpart(ptest[4])]),
 label(["5",realpart(ptest[5]),imagpart(ptest[5])]),points([realpart(ptest[5])],[imagpart(ptest[5])]),
 label(["6",realpart(ptest[6]),imagpart(ptest[6])]),points([realpart(ptest[6])],[imagpart(ptest[6])]),
 label(["7",realpart(ptest[7]),imagpart(ptest[7])]),points([realpart(ptest[7])],[imagpart(ptest[7])]),
 label(["8",realpart(ptest[8]),imagpart(ptest[8])]),points([realpart(ptest[8])],[imagpart(ptest[8])]),
 label(["9",realpart(ptest[9]),imagpart(ptest[9])]),points([realpart(ptest[9])],[imagpart(ptest[9])]),
 label(["10",realpart(ptest[10]),imagpart(ptest[10])]),points([realpart(ptest[10])],[imagpart(ptest[10])]),
 label(["11",realpart(ptest[11]),imagpart(ptest[11])]),points([realpart(ptest[11])],[imagpart(ptest[11])]),
 label(["12",realpart(ptest[12]),imagpart(ptest[12])]),points([realpart(ptest[12])],[imagpart(ptest[12])]),/*
 label(["13",realpart(ptest[13]),imagpart(ptest[13])]),points([realpart(ptest[13])],[imagpart(ptest[13])]),
 label(["14",realpart(ptest[14]),imagpart(ptest[14])]),points([realpart(ptest[14])],[imagpart(ptest[14])]),*/
 color=red,point_type=circle,point_size=3,points_joined=false,points(realpart(pp2),imagpart(pp2)),points_joined=false,
 color=black,key="",line_type=dots,nticks=50,polar(1,t,0,2*%pi) )$

这仅适用于14个零。对于更高的订单,这将是非常痛苦的。

1 个答案:

答案 0 :(得分:1)

我认为问题在于您想要自动构建所有points([realpart(...), imagpart(...)])。我的建议是通过points构建makelist表达式列表,然后append列出任何其他绘图参数,然后apply绘图函数到附加列表。类似的东西:

my_labels_and_points :
    apply (append, 
           makelist ([label ([sconcat (i), realpart (ptest[i]), imagpart (ptest[i])]),
                      points ([realpart (ptest[i])], [imagpart (ptest[i])])],
                     i, 1, length (ptest)));
all_plot_args : append ([proptional_axes=..., ...], my_labels_and_points, [color=..., key=..., ...]);
apply (draw2d, all_plot_args);

一般的想法是建立绘图参数列表,然后将绘图函数应用于此。