2013-02-05 40 views
0

考慮下面的代碼:Matlab的:收集/保存數據和收縮代碼

clc 
clear all 
P = 45; 

Mat =[ 
    64.7331 62.4019 60.2700 58.7798 58.4334 62.6596 59.4961 56.2320 53.6037 52.9330 60.9245 56.7753 51.7143 46.3398 44.5793 59.9245 55.0268 48.0563 36.3834 27.3842 59.9858 55.1389 48.3194 37.4449 30.2616 
    57.9874 54.0479 50.6911 50.0354 52.6935 55.4367 49.3499 41.7788 39.6147 46.7394 54.3272 46.7781 32.1549 20.1516 42.9207 55.3253 49.1113 41.1552 38.7894 46.4079 57.8245 53.7807 50.2828 49.5916 52.3766 
    63.0248 62.0303 61.8372 62.5024 63.8418 59.4631 57.8597 57.5336 58.6360 60.6997 55.2480 52.3275 51.6672 53.8008 57.2342 50.6163 44.3727 42.4670 47.8379 53.8624 47.3455 34.0518 22.7165 42.7145 51.8266 
    60.1421 55.2778 48.3022 35.9256 16.6506 60.8750 56.5697 51.0854 44.5373 41.5090 62.4192 59.0475 55.4089 52.2317 51.1936 64.3903 61.8774 59.4945 57.7313 57.2225 66.4892 64.6241 63.0031 61.9060 61.6064 
    55.8668 54.2772 54.7708 7.0326 59.9984 50.3209 46.7794 47.9743 52.4927 57.1425 44.2363 32.9105 38.0425 48.3069 55.0584 42.9081 25.1741 34.8503 47.5309 54.7311 48.3741 43.5202 45.2490 51.0490 56.3626 
    62.8081 62.7123 63.3845 64.6575 66.2861 58.8319 4.6746 59.7547 61.6696 63.9329 53.6053 53.3021 55.2850 58.3709 61.5730 46.1003 45.3092 49.8225 55.0705 59.5074 34.5594 30.5746 44.5462 52.7418 58.2459 
    59.7305 56.9737 55.1115 55.0603 56.8513 56.5791 52.0789 48.2510 48.1309 51.8531 54.0783 47.0293 37.1612 36.6764 46.6022 53.4451 45.4219 29.5077 28.1924 44.8975 55.1133 49.3157 43.1930 42.9668 48.9959 
    44.4319 46.3901 51.8259 56.8807 61.0151 26.7070 36.7384 48.2747 55.1761 60.0372 30.2115 37.9156 48.5729 55.3044 60.1077 45.7796 47.4661 52.3927 57.1888 61.2012 53.6748 54.3513 56.8248 59.9279 62.9754]; 


for j = 1:1:size(Mat,2) 

     if isnan(Mat) 
     break; 
     end 

     for matrows=1:1:size(Mat,1) 
     [ski1,snow1]=min(Mat(:,j)); 

     if ski1 <=P 
      M_B = snow1; 
      Mat(snow1,:) = NaN;    
%    Mat 
      [ski2,snow2]=min(Mat(:,j)); 
     else 
      break 
     end 
       if ski2 + ski1 <=P 
        M_B = horzcat(snow1,snow2); 
        Mat(snow2,:) = NaN; 
     %   Mat 
        [ski3,snow3]=min(Mat(:,j)); 
       else 
        break 
       end 

        if ski3 + ski2 + ski1 <=P 
         M_B = horzcat(snow1,snow2,snow3); 
         Mat(snow3,:) = NaN; 
      %   Mat 
         [ski4,snow4]=min(Mat(:,j)); 
        else 
         break 
        end 


         if ski4 + ski3 + ski2 + ski1 <=P 
          M_B = horzcat(snow1,snow2,snow3,snow4); 
          Mat(snow4,:) = NaN; 
       %   Mat 
          [ski5,snow5]=min(Mat(:,j)); 
         else 
          break 
         end 
     M_B(j,matrows)=[M_B] 
     end 
     Mat 
end 
    Mat 
    M_B 

試圖從每一次迭代保存M_B一個矩陣,但我總是得到的結果M_B的最後一個值。目標是根據列(j)和行(matrows)p.e有一個M_B矩陣或單元格(試過也沒有成功)。如果使用墊的前4列:

1 2 3 4 %j column 
8 0 0 [5,4] %number of M_B row 

等等。
我做錯了什麼?

此後,如果可能的話,請幫我縮小/壓縮代碼。

預先感謝您。

+0

首先,嘗試從某些外部文件讀取數據。 – user1929959

+0

數據是隨機創建的,這個矩陣是其數據的快照。刪除最後21列並運行它的前4個將與尋找答案的問題相同。 – professor

+0

所以,這個想法是將一個程序拆分成一個收集數據的程序,然後放入文件中,第二部分處理這個日期。 – user1929959

回答

0

我不明白你的代碼,但我看到你使用相同的變量在每一個循環,我覺得像這樣可以防止您覆蓋它:

totalM_B(j,matrows)=[M_B] 

你可能需要調整它有點讓它工作,但我希望你看到你的當前代碼的問題。

+0

我已經嘗試過,如果你看到我的代碼從底部6行,但它不返回矩陣,我只查找M_B的最後一個值。也許我的破發點正在造成傷害。 – professor

+0

@professor如果您不知道您的休息是否造成麻煩,我建議您逐行逐行瀏覽代碼。只需在頂部放置一個斷點,然後按f10直到看到奇怪的東西。 –

+0

最終通過結構數組找到它。現在必須縮小它。 – professor