2

i の個々の値ごとに、変数 j は 1 から 21 の値で反復されます。j のすべての値で、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);

wxmaxima には何も表示されません。コードのこの部分が表示されないように動作します。何かご意見は?

4

2 に答える 2

3

Maxima メーリング リストで、2 日前の質問に続いて、似たような質問をした人がいます。

さて、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」はブール演算子であり、それを 2 つのループに適用することは (ループがブール値を返さない限り) あまり意味がありませんが、Maxima ではそれを書くことができます。(a and b) または (a and do b) の代わりに、a の次に b を実行する (a,b) を書きたいと思うでしょう。

ネスティングもおそらくあなたが意図したものではありません。

2 番目のループは「do aa1:...」です。Maxima では、"do xxx" は "while true do xxx"、つまり無限ループと同等です。これにより、このコードが返されなかった理由が説明されます。

ちなみに、「for i:1 while i<=21 do...」のより簡単な書き方は「for i through 21 do...」です。

お役に立てれば。

   -s
于 2013-02-12T02:26:06.283 に答える