SAS:使用IML处理矩阵

时间:2017-07-12 08:53:54

标签: sas sas-iml

所以我试图计算这个公式,但结果很奇怪。元素非常大,所以我不确定我哪里出错了。我附上了一张公式照片:enter image description here

这是我的代码:

*calculating mu_sum and sigma_sum;
T_hat=180;
mu_sum_first_part={0,0,0,0};
mu_sum_second_part={0,0,0,0};
mu_sum={0,0,0,0};

*calculating mu_sum;
do i = 0 to T_hat;
    term=(T_hat - i)*(B0**i)*a;
    mu_sum_first_part = mu_sum_first_part + term;
end;
do i=1 to T_hat; 
    term =B0**i;
    mu_sum_second_part = mu_sum_second_part + term;
end;
mu_sum = mu_sum_first_part + mu_sum_second_part*zt;
print mu_sum;

*calculating sigma_sum;
term=I(4);
sigma_sum=sigma;
do j=1 to T_hat;
    term = term + B0**j;
    sigma_sum = sigma_sum + (term*sigma*(term`));
end;
print sigma_sum;

我知道这很长但是请帮助!!

2 个答案:

答案 0 :(得分:0)

第一件事就是跳出来的是你mu中的第一个句子有1个太多:

do i = 0 to T_hat;
    term=(T_hat - i)*(B0**i)*a;
    mu_sum_first_part = mu_sum_first_part + term;
end;

应该是:

do i = 0 to T_hat-1;
    term=(T_hat - i)*(B0**i)*a;
    mu_sum_first_part = mu_sum_first_part + term;
end;

答案 1 :(得分:0)

您的计划在数学上没有任何错误。当你将矩阵提升到180度时,看到非常大或非常小的值,你不应该感到惊讶。例如,如果你让 B0 = { 0 1 0 0, 0 0 1 0, 0 0 0 1, 0 1 1 1 }; 那么B0 ** T的元素是O(1E47)。如果将B0除以2并将结果提高到180次幂,则元素为O(1E-8)。

据推测,这些公式适用于具有特殊结构的矩阵B0,例如|| B0 ** n || - > 0为n - >无穷。否则,电源系列将不会收敛。我建议你仔细检查你使用的B0是否满足参考的假设。

你没有问过效率,但你最好使用Horner's method in SAS/IML来计算截断的幂级数,而不是明确地形成B0的幂。