2

我正在尝试编写一个最大值循环,该循环将 i 通过值 1 到 21 进行迭代,对于 i 的每个单独值,变量 j 将通过值 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 上什至什么都没有显示,它表现得好像没有看到这部分代码。有什么想法吗?

4

2 回答 2

3

有人刚刚在 Maxima 邮件列表上问了一个相当相似的问题,在两天前跟进了他们之前的一个问题。

现在,一位名叫 Rupert Swarbrick 的非常好的小伙子建设性地回答了这两个问题。他太好了,他会再次回复(还)。看起来你正在尝试做的是制作一个矩阵,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-11T16:19:03.720 回答
2

让我们看看你的代码:

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 and b) 或 (a and do b),它执行 a 然后 b。

嵌套可能也不是您想要的。

第二个循环是“做 aa1:...”。在 Maxima 中,“do xxx”相当于“while true do xxx”,即无限循环。这可以解释为什么此代码从未返回。

顺便说一句,写“for i:1 while i<=21 do...”的更简单的方法是“for i thru 21 do...”。

希望这可以帮助。

   -s
于 2013-02-12T02:26:06.283 回答