【问题标题】:(wx)Maxima plot point by point, numbered(wx)Maxima 逐点绘图,编号
【发布时间】:2015-09-09 01:55:50
【问题描述】:

我有一个根列表,我想绘制实部/虚部。如果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)$

我得到的只是一个点。现在,如果这应该工作,使用draw2dlabel(["label",posx,posy]) 非常方便,但我可以在for 循环内以某种方式评估i "" 吗?

或者,还有其他方法吗?用八度?还是 Scilab?顺便说一句,我在 Linux 上。


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

...这里是 wxMaxima 代码:

ptest:sortd(pp2);长度(pte​​st);
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,
 标签(["1",realpart(ptest[1]),imagpart(ptest[1])]),点([realpart(ptest[1])],[imagpart(ptest[1])]),
 标签(["2",realpart(ptest[2]),imagpart(ptest[2])]),点([realpart(ptest[2])],[imagpart(ptest[2])]),
 标签(["3",realpart(ptest[3]),imagpart(ptest[3])]),点([realpart(ptest[3])],[imagpart(ptest[3])]),
 标签(["4",realpart(ptest[4]),imagpart(ptest[4])]),点([realpart(ptest[4])],[imagpart(ptest[4])]),
 标签(["5",realpart(ptest[5]),imagpart(ptest[5])]),点([realpart(ptest[5])],[imagpart(ptest[5])]),
 标签(["6",realpart(ptest[6]),imagpart(ptest[6])]),点([realpart(ptest[6])],[imagpart(ptest[6])]),
 标签(["7",realpart(ptest[7]),imagpart(ptest[7])]),点([realpart(ptest[7])],[imagpart(ptest[7])]),
 标签(["8",realpart(ptest[8]),imagpart(ptest[8])]),点([realpart(ptest[8])],[imagpart(ptest[8])]),
 标签(["9",realpart(ptest[9]),imagpart(ptest[9])]),点([realpart(ptest[9])],[imagpart(ptest[9])]),
 标签(["10",realpart(ptest[10]),imagpart(ptest[10])]),points([realpart(ptest[10])],[imagpart(ptest[10])]),
 标签(["11",realpart(ptest[11]),imagpart(ptest[11])]),points([realpart(ptest[11])],[imagpart(ptest[11])]),
 标签(["12",realpart(ptest[12]),imagpart(ptest[12])]),points([realpart(ptest[12])],[imagpart(ptest[12])]),/*
 标签(["13",realpart(ptest[13]),imagpart(ptest[13])]),points([realpart(ptest[13])],[imagpart(ptest[13])]),
 标签(["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 个零。对于更高的订单,这将是非常痛苦的。

【问题讨论】:

    标签: plot maxima


    【解决方案1】:

    我认为问题在于您想自动构造所有points([realpart(...), imagpart(...)])。我的建议是通过makelist 构造points 表达式列表,然后将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);
    

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

    【讨论】:

    • 这看起来很有希望。我会试一试,但只有明天,我会回来更新。
    • 这行得通!我把它做成了一个函数,下面是代码(可能是幼稚的):
      func(u,n):=block(, pnts:apply(append, makelist([ label([sconcat(i),realpart(u[ i]),imagpart(u[i])]), points([realpart(u[i])],[imagpart(u[i])]) ],i,1,n)), args:append( [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],pnts), return(apply(draw2d,args)))$
      这是图片:@ 987654321@谢谢,我不能投票,但我会把它标记为选中的。 :-)
    • 'pre' 似乎不起作用。无论如何,这是对图片的测试: func(makelist(rhs(allroots(float(sum(x^k,k,0,100)))[k]),k,1,100),40) 。它确实需要几秒钟的思考,但它确实有效!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 2021-04-17
    • 2021-05-24
    • 1970-01-01
    • 2021-05-24
    • 1970-01-01
    相关资源
    最近更新 更多