我正在尝试用maxima编写一个循环,它将迭代i,通过从1到21的值,对于i的每个单独值,变量j都会迭代通过从1到21的值。在每个j值时,将这两个值相互比较,并且如果i
for i:1 while i<=21 do(for j:1 while j<=21 do
(if i<j then aa:realpart(c1[-j+i+21]))) and do aa1:makelist(aa,i,1,21,1);甚至在wxmaxima上什么都没有显示,它的行为就像看不到这部分代码一样。有什么想法吗?
发布于 2013-02-12 00:19:04
有人刚刚在Maxima邮件列表上询问了一个非常相似的question,跟进了两天前他们的previous one。
现在,非常好的家伙鲁伯特·斯沃布里克建设性地回答了这两个问题。他是如此的和善,以至于他会再回复一次。()看起来你想做的是做一个矩阵,aa,使得aa[i,j]在对角线上或对角线下为零,并且在对角线上等于c1[-j+i+21]。假设是这种情况,请尝试以下操作:
genmatrix (lambda ([i,j], if i<j then realpart(c1[-j+i+21]) else 0), 21);如果你想要别的东西,你必须问一个更具体的问题。
发布于 2013-02-12 10:26:06
让我们来看看你的代码:
for i:1 while i<=21 do(for j:1 while j<=21 do
(if i<j then aa:realpart(c1[-j+i+21]))) and do aa1:makelist(aa,i,1,21,1);更清晰地格式化一下,它是:
for i:1 while i<=21 do
(for j:1 while j<= 21 do
(if i<j then aa:realpart(c1[-j+i+21])
)
)
and
do aa1:makelist(aa,i,1,21,1);嗯," and“是一个布尔运算符,将它应用于两个循环意义不大(除非循环返回布尔值),尽管Maxima允许您编写它。而不是(a和b)或(a和do b),您可能希望编写(a,b),它先执行a,然后执行b。
嵌套可能也不是您想要的。
第二个循环是"do aa1:...“。在Maxima中,"do xxx“等同于"while true do xxx",即无限循环。这就解释了为什么这个代码永远不会返回。
顺便说一句,一种更简单的方式写"for i:1 while i<=21 do...“是"for I do 21 do...“
希望这能有所帮助。
-shttps://stackoverflow.com/questions/14779099
复制相似问题