在SAS中进行矩阵乘法的循环

时间:2015-04-16 21:01:37

标签: sas sas-iml

我有一个名为m1的6 * 6矩阵,我想在SAS中使用Do Loop来创建矩阵,使得m2 = m1 * m1;立方米=平方米* 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?非常感谢您的时间和帮助!

2 个答案:

答案 0 :(得分:1)

cat()无效。这是一个角色功能。它不会创建由字符串输出命名的矩阵。

为什么不使用矩阵功率运算符?

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

除非你有大的矩阵,否则迭代计算而不是仅使用功率的时间是0。

答案 1 :(得分:0)

对于许多迭代算法,您希望在EACH矩阵上执行一些计算,但不需要同时使用所有矩阵。例如,如果你想知道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函数,如本文所述:Indirect assignment: How to create and use matrices named x1, x2,..., xn < / p>

顺便说一句,你可能也会对packing matries into an array的伎俩感兴趣。当你需要从函数模块返回k矩阵并且k是模块的参数时,它有时是一种有用的技术。