【问题标题】:For loop in Maxima for matrix makingMaxima中的for循环用于矩阵制作
【发布时间】:2018-08-03 18:51:36
【问题描述】:

我想使用 for 循环制作 3x3 M 矩阵。 eq[] 和 Acc[] 是数组。我没有得到 3x3 矩阵,而是得到了 1x9 数组,我不想得到。

for f:1 thru 3 step 1 do(
    for r:1 thru 3 step 1 do(
    M[[r],[f]]:ratcoef(eq[r],Acc[f]))
);
listarray(M);
(%o22)  [3*l[1]^2*m[3],3*l[1]*l[2]*m[3]*cos(r[2](t)-r[1](t)),(3*l[1]*l[3]*m[3]*cos(r[3](t)-r[1](t)))/2,3*l[1]*l[2]*m[3]*cos(r[2](t)-r[1](t)),3*l[2]^2*m[3],(3*l[2]*l[3]*m[3]*cos(r[3](t)-r[2](t)))/2,(3*l[1]*l[3]*m[3]*cos(r[3](t)-r[1](t)))/2,(3*l[2]*l[3]*m[3]*cos(r[3](t)-r[2](t)))/2,(3*l[3]^2*m[3]+12*Theta[3])/4]

不知何故,我不得不提到一个符号来表示新行正在开始,我试着把 ;但它会立即结束 for 循环并导致问题。 有什么建议吗?

【问题讨论】:

    标签: loops for-loop matrix maxima


    【解决方案1】:

    当您在之前未声明 M 的情况下将某些内容分配给 M[i, j] 时,Maxima 会创建一个数组(在 Maxima 术语中称为“未声明的数组”)附加到符号 M 作为属性,而不是值。因此,当您在交互式提示中输入M 时,您只会看到M,因为它没有值。 (属性是与符号相关联的项,与符号的值不同。)

    有了前言,我建议您将矩阵值分配给M,然后分配给矩阵的元素。我没有eqAcc 的定义,所以ratcoef 在这里没有任何用处。

    (%i4) M : zeromatrix (3, 3);
                               [ 0  0  0 ]
                               [         ]
    (%o4)                      [ 0  0  0 ]
                               [         ]
                               [ 0  0  0 ]
    
    (%i6) for f:1 thru 3
            do for r:1 thru 3
              do M[r, f] : ratcoef(eq[r],Acc[f]);
    (%o6)                         done
    

    请注意,下标只是rf,而不是[r][f]。一般[x]是1个元素的列表,即x

    还有其他方法可以做到这一点,如果事实证明这对您来说效果不佳。

    【讨论】:

    • 实际上,这看起来是解决问题的好方法,我们非常感谢您的努力。我现在就试试,有问题反馈一下
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 2015-10-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-21
    • 2016-06-04
    相关资源
    最近更新 更多