作者ilovecurl (ilovecurl)
看板MATLAB
标题[问题] 关於lsqnonlin
时间Tue Jun 19 21:41:03 2012
我现在想要利用lsqnonlin函数,跑出一个向量X,使估计的相关系数矩阵Rho1(X)
和相关系数矩阵Rho差距最小,但是程式run下去,到跑出结果要超过一小时
且会出现如下之讯息: 我想知道到底发生了什麽问题,或是我哪里写错了?
请各位高手指点一下,感激不尽!!!
Local minimum possible.
lsqnonlin stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.
<stopping criteria details>
或是这个讯息
Solver stopped prematurely.
lsqnonlin stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 4200 (the default value).
我的程式码如下:
X0是执行lsqnonlin所要代入之初始值,最後希望求出使估计之相关系数矩阵最接近
实际相关系数矩阵的X
X0 = normrnd(0,1,1,42);
[X, resnorm] = lsqnonlin('fact',X0);
fact是我要呼叫的函数名称,内容如下:
function reb = fact(X)
Rho = xlsread('correlation'); %读入真正的相关系数矩阵
B = [cos(X(1)), cos(X(2))*sin(X(1)), sin(X(1))*sin(X(2));
cos(X(3)), cos(X(4))*sin(X(3)), sin(X(3))*sin(X(4));
cos(X(5)), cos(X(6))*sin(X(5)), sin(X(5))*sin(X(6));
cos(X(7)), cos(X(8))*sin(X(7)), sin(X(7))*sin(X(8));
cos(X(9)), cos(X(10))*sin(X(9)), sin(X(9))*sin(X(10));
cos(X(11)), cos(X(12))*sin(X(11)), sin(X(11))*sin(X(12));
cos(X(13)), cos(X(14))*sin(X(13)), sin(X(13))*sin(X(14));
cos(X(15)), cos(X(16))*sin(X(15)), sin(X(15))*sin(X(16));
cos(X(17)), cos(X(18))*sin(X(17)), sin(X(17))*sin(X(18));
cos(X(19)), cos(X(20))*sin(X(19)), sin(X(19))*sin(X(20));
cos(X(21)), cos(X(22))*sin(X(21)), sin(X(21))*sin(X(22));
cos(X(23)), cos(X(24))*sin(X(23)), sin(X(23))*sin(X(24));
cos(X(25)), cos(X(26))*sin(X(25)), sin(X(25))*sin(X(26));
cos(X(27)), cos(X(28))*sin(X(27)), sin(X(27))*sin(X(28));
cos(X(29)), cos(X(30))*sin(X(29)), sin(X(29))*sin(X(30));
cos(X(31)), cos(X(32))*sin(X(31)), sin(X(31))*sin(X(32));
cos(X(33)), cos(X(34))*sin(X(33)), sin(X(33))*sin(X(34));
cos(X(35)), cos(X(36))*sin(X(35)), sin(X(35))*sin(X(36));
cos(X(37)), cos(X(38))*sin(X(37)), sin(X(37))*sin(X(38));
cos(X(39)), cos(X(40))*sin(X(39)), sin(X(39))*sin(X(40));
cos(X(41)), cos(X(42))*sin(X(41)), sin(X(41))*sin(X(42))];
Rho1 = B*B'; %用来近似真正的相关系数的相关系数估计矩阵
for i=1:1:21
for j=1:1:21
reb(21*(i-1)+j) = Rho1(i,j) - Rho(i,j);
end
end
end
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 114.34.30.120
1F:推 TOTOROBOY:每次读档太花时间 06/20 07:25
2F:→ TOTOROBOY:先在主程式读进记忆体,然後丢入fact 06/20 07:25
3F:→ ilovecurl:那有关於那个讯息是怎麽回事,有头绪吗? 06/20 09:46
4F:推 TOTOROBOY:有两个讯息,上面那个意思就是ok了,正常收敛 06/20 09:55
5F:→ TOTOROBOY:下面是指说经过4200次叠代,还是没找出一个满意的结果 06/20 09:55
6F:→ TOTOROBOY:我建议依你的判断猜一下初始值,不要用乱数 06/20 09:56
7F:推 TOTOROBOY:然後最後两个for 回圈改用向量运算,不要用回圈 06/20 09:59
8F:→ ilovecurl:ok,thanks!!!! 06/20 12:28