2012-08-14 143 views
0

我有這個循環生成一個向量「差異」。如何將Diff的值放入記錄所有Diff生成的數組中?問題是Diff的長度應該是固定長度(36),這是表格「CleanPrice」的寬度。但是由於col_set的長度不同(根據它正在讀取的數據中的NaN數量),那麼差異的長度也會有所不同。我需要做的是根據其適當的列號分配生成的答案。即差異行(i)應包含col(i),其中Diff中的所有其他行應被分配「0」或「NaN」。基本上我需要DiffArray是一個(nTrials x 36)陣列,其中每行是生成的(36 x 1)DiffArray。目前,雖然,每一次的山坳長度的變化,我收到以下錯誤:Matlab將元素分配給循環中的數組

??? Subscripted assignment dimension mismatch. Error in ==> NSSmodel at 41 DiffMatrix(end+1,:)=Diff

這是我的代碼:

DiffArray=[]; 
    StartRow=2935; 
    EndRow=2940; 
nTrials=EndRow-StartRow; 
    for row=StartRow:EndRow; 
     col_set=find(~isnan(gcm3.data.CleanPrice(row,1:end))); 
     col=col_set(:,2:end); 
     CleanPrices=transpose(gcm3.data.CleanPrice(row,col)); 
     Maturity=gcm3.data.CouponandMaturity(col-1,2); 

SettleDate=gcm3.data.CouponandMaturity(row,3); 
Settle = repmat(SettleDate,[length(Maturity) 1]); 

CleanPrices =transpose(gcm3.data.CleanPrice(row,col)); 
CouponRate = gcm3.data.CouponandMaturity(col-1,1); 
Instruments = [Settle Maturity CleanPrices CouponRate]; 
PlottingPoints = gcm3.data.CouponandMaturity(1,2):gcm3.data.CouponandMaturity(36,2); 
Yield = bndyield(CleanPrices,CouponRate,Settle,Maturity); 

SvenssonModel = IRFunctionCurve.fitSvensson('Zero',SettleDate,Instruments) 
ParYield=SvenssonModel.getParYields(Maturity); 

[PriceActual, AccruedIntActual] = bndprice(Yield, CouponRate, Settle, Maturity); 
[PriceNSS, AccruedIntNSS] = bndprice(ParYield, CouponRate, Settle, Maturity); 

Diff=PriceActual-PriceNSS 
DiffArray(end+1,:)=Diff 
end 

我看着num2cellthis後,但WASN」確定如何正確應用它,並開始獲取與此相關的錯誤。

回答

1

說你想向DiffArray添加一個'不完整'的行是否正確?如果你確切地知道其中的每個元素應該去,你也許可以做這樣的事情:

indices = [1:7; 2:8; 3:9; [1 2 3 6 7 8 10]]; 
Diff = rand(4, 7); 
DiffArray = zeros(4, 10) * NaN; 

for row = 1:4 
    DiffArray(row, indices(row, :)) = Diff(row,:); 
end 
當然

你的情況,你會在循環內使用預先指定的陣列來計算DIFF和索引(行向量),而不是。以上只是爲了說明如何使用索引向量來定位矩陣中的短行。

+0

太棒了!再次感謝)!但是我確實遇到了一個問題。在DiffArray中,我得到的數字是我想要的地方他們應該是但附加到他們的結尾所有始終是+ 0.0000i或+/-「一些數字」我。例如NaN + 0.000i或者-0.1423-0.0602i。有什麼建議麼?或它的含義(虛數? - 差值中的值是真實的)。或者我做錯了什麼?我使用的代碼是:DiffArray =零(EndRow-StartRow + 1,36)* NaN; cols =(col-1); rowindex = row-StartRow + 1; Diff =轉置(PriceActual-PriceNSS); DiffArray(rowindex,cols(1,:))= Diff(1,:); – Mary 2012-08-14 10:41:45

+0

剛分配之前,DiffArray和Diff中的值是什麼?轉置是否可以添加一個虛構的組件?通過調試器來查看異常開始的位置。 – Dan 2012-08-14 11:05:24

+0

看來,我得到的某些行*警告:複雜的X和/或Y參數的虛構部分忽略*從模型。對於這些行,我得到一個帶有假想數字的Diff,我認爲這是由ParYield生成的。雖然在DiffArray * all中,條目會收到一個虛數,即使對於那些運行良好的Diff也是如此。我檢查了數據和它沒有任何內容來表明它以這種方式反應。將模型替換爲NSModel *似乎*可以治癒它。奇怪。 – Mary 2012-08-14 11:43:56

相關問題