我有一个名为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?非常感谢您的时间和帮助!
答案 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是模块的参数时,它有时是一种有用的技术。