2012-08-14 146 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

相关问题