我试图在maxima中编写一个循环,它将迭代i到1到21的值,对于i的每个单独的值,变量j is通过值1到21迭代。在j的每个值,两个是相互比较,如果我
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上,它看起来就像它没有看到代码的这一部分。 有什么想法吗?
答案 0 :(得分:2)
有人刚刚在Maxima邮件列表上询问了一个非常相似的question,并在两天之前跟进了他们的previous邮件。
现在,非常好的小伙子鲁珀特斯瓦布里克对这两个问题进行了建设性的回答。他那么很好,他会再次回复。你想要做的是创建一个矩阵aa
,使得aa[i,j]
在对角线上或下方为零,并且等于对角线上方的c1[-j+i+21]
。假设是这种情况,请尝试以下方法:
genmatrix (lambda ([i,j], if i<j then realpart(c1[-j+i+21]) else 0), 21);
如果你想要别的东西,你将不得不提出一个更具体的问题。
答案 1 :(得分:0)
让我们来看看你的代码:
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);
好吧,“和”是一个布尔运算符,将它应用于两个循环并不是非常有意义(除非循环返回布尔值),尽管Maxima允许你编写它。而不是(a和b)或(a和b),你可能想写(a,b),执行a b。
嵌套可能不是你想要的。
第二个循环是“do aa1:...”。在Maxima中,“do xxx”等同于“while true do xxx”,即无限循环。这可以解释为什么这段代码永远不会返回。
顺便说一句,一个更简单的方法是“为i:1而我&lt; = 21做......”是“为了我直到21做......”。
希望这有帮助。
-s