如何在元素方面对两个Maxima / LISP列表求和,以便在嵌入Moodle STACK考试的JSXgraph中使用它们?

时间:2018-06-12 09:25:25

标签: list common-lisp moodle maxima jsxgraph

标题是什么。我试图为学生构建一个图形化的双变量优化问题,使用STACK-type Moodle-question来解决,它使用Maxima作为后端来处理数学。我尝试过以下方法:

/*Constants*/
c1 : rand_with_step(0,15,0.1);
c2 : c1 + 2;
c3 : c1 + 1;
c4 : c1;

/*Solutions*/
OptimiPa : [c3,c1];
za : -1 * OptimiPa[1] + 2 * OptimiPa[2];

OptimiPb : [c3 + 1/2,c3 - 1/2];
zb : 2 * OptimiPb[1] + OptimiPb[2];

OptimiPc : [c1,c1];
zc : OptimiPc[1]  + 3 * OptimiPc[2] 

OptimiPd : [];
zd : inf;

/*Variables for drawing*/
a : 1000000;
b : a - 1;

/*Variables for drawing lines*/
OptimiPa2 : OptimiPa + [1,0.5];

但是当插入JSXgraph时,这不会产生预期的结果:

<jsxgraph style="width=500em;height=500em"; box="uniqueName">(function() {

var board = JXG.JSXGraph.initBoard('uniqueName', {boundingbox:['{#c3-5#}','{#c2+2#}','{#c3+3#}', '{#c1-2#}'], keepaspectratio: true,zoom:false});

/*Axes*/
var axis1 = board.create('axis', [['{#c3-5#}','{#c1#}'], ['{#c3+3#}', '{#c1#}']]);
var axis2 = board.create('axis', [['{#c1#}','{#c1-5#}'], ['{#c1#}', '{#c2+3#}']]);

/*Polygon angles*/
var k1 = board.create('point', ['{#c3#}','{#c1#}'],{visible:false});
var k2 = board.create('point', ['{#c1#}','{#c1#}'],{visible:false});
var k3 = board.create('point', ['{#c1-a#}','{#-(-c1-a)#}'],{visible:false});
var k4 = board.create('point', ['{#c1-b#}','{#2 - (-c1 - b)#}'],{visible:false});
var k5 = board.create('point', ['{#c1+3/2#}','{#(c1 + 3/2) - 1#}'],{visible:false});

/*Optimization area as a polygon*/
var optAl = board.create('polygon',[k1,k2,k3,k4,k5],{borders: {visible: true},vertices: {visible: false}});


/*Points for drawing lines*/
var pa1 = board.create('point', '{#OptimiPa#}',{visible:false});
var pa2 = board.create('point', '{#OptPa2#}',{visible:false});

/*Lines*/
var suoraA = board.create('line',[pa1,pa2]);

})();
</jsxgraph>

我在这里做错了什么?图像的其余部分看起来很好,但线suoraA并没有出现在图中。

编辑:按照@ jkiiski的要点修正了代码,但问题仍然存在。请看下面的部分答案。

1 个答案:

答案 0 :(得分:2)

好吧,所以@jkiiski提出的观点是问题的一部分,但我现在已经发现问题可能是什么了。变量OptimiPa2是一个列表,显然由于某种原因STACK不喜欢直接使用list语法访问'{#variable_name#}' - 类型变量,即使这应该有效。解决这个问题的方法是手动访问并将列表元素输入到新列表中,然后我将其作为参数提供给point“构造函数”:

/*Pisteitä suoria varten*/
var pa1 = board.create('point', ['{#OptimiPa[1]#}','{#OptimiPa[2]#}'],{visible:true});
var pa2 = board.create('point', ['{#OptmiPa2[1]#}','{#OptmiPa2[2]#}'],{visible:true});

/*Suoria*/
var suoraA = board.create('line',[pa1,pa2]);

这给了我以下图片:

Optimization area with the desired line.

这就是我想要实现的目标,尽管我希望将列表作为JSXGraph的参数输入更容易。然后,我可能只是做错了。

编辑:引用列出了@jkiiski在评论中建议的方式,虽然我发誓我之前尝试过但它没有用。