0

我有一个名为 m1 的 6*6 矩阵,我想在 SAS 中使用 Do Loop 创建矩阵,使得 m2=m1*m1; m3=m2*m1;m4=m3*m1 ... mi=m(i-1)*m1。

这是我写的:

proc iml;
use a;
read all into cat(m,1);
do i=2 to 10;
j=i-1;
cat(m,i)=cat(m,j)*cat(m,1);
print cat(m,i);
end;
quit;

而且它不起作用,因为 cat(m,1) 可能不正确。我该如何使用 Do Loop 呢?非常感谢您的时间和帮助!

4

2 回答 2

1

cat()不会工作。它是一个字符函数。它不会创建由字符串输出命名的矩阵。

为什么不只使用矩阵幂运算符?

m2 = m1**2;
m3 = m1**3;

除非你有大矩阵,否则迭代计算而不是仅仅使用幂节省的时间接近 0。

于 2015-04-16T21:50:32.503 回答
0

对于许多迭代算法,您希望对每个矩阵执行一些计算,但您不需要同时处理所有矩阵。例如,如果你想知道 m、m##2、m##2 等的行列式,你可以写

result = j(10,1);  /* store the 10 results */
m = I(nrow(a));    /* identity matrix */
do i = 1 to 10;
   m = m*a;        /* m is a##i during i_th iteration */
   result[i] = det(m);
end;
print result;

如果您实际上在不同的矩阵中同时需要所有 10 个矩阵(这种情况很少见),您可以使用 VALSET 和 VALUE 函数,如本文所述:间接赋值:如何创建和使用名为 x1、x2、..的矩阵., xn

顺便说一句,您可能还对通过展平矩阵将矩阵打包成数组的技巧感兴趣。当您需要从函数模块返回 k 个矩阵并且 k 是模块的参数时,它有时是一种有用的技术。

于 2015-04-17T09:33:34.383 回答