作者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