2012-08-14 6 views
0

이 루프는 벡터 "Diff"를 생성합니다. 생성 된 모든 Diff를 기록하는 배열에 Diff 값을 어떻게 배치합니까? 문제는 Diff의 길이가 "CleanPrice"테이블의 너비 인 고정 길이 (36) 여야한다는 것입니다. 그러나 col_set은 길이가 다르므로 (읽는 데이터의 NaN 수에 따라) Diff도 길이가 다릅니다. 필요한 행 번호에 따라 생성 된 응답을 할당하면됩니다. 즉 diff의 row (i)는 col (i)를 포함해야하는데, 여기서 Diff의 다른 모든 행에는 "0"또는 "NaN"이 지정되어야합니다. 기본적으로 DiffArray은 각 행이 (36 x 1) DiffArray 인 (nTrials x 36) 배열이어야합니다.Matlab 루프에서 배열에 요소 할당

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 

내가 this 게시물에 num2cell 보았지만 '년후 : 이것은 내 코드입니다

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

:하지만 그 순간, COL 변경의 길이, 나는 다음과 같은 오류가 각시 정확하게 적용하는 법을 배우고 그것에 관련된 오류가 발생하기 시작했습니다.

답변

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 또는 +/- "some number"입니다. 예 : NaN + 0.000i 또는 -0.1423-0.0602i. 어떤 제안? 또는 그것이 무엇을 의미하는지 (허수? - Diff의 값은 실수 임). 아니면 내가 잘못 했어? 내가 사용한 코드는 다음과 같습니다. DiffArray = 0 (EndRow-StartRow + 1, 36) * NaN; cols = (col-1); rowindex = row-StartRow + 1; Diff = transpose (PriceActual-PriceNSS); DiffArray (rowindex, cols (1, :)) = Diff (1, :); – Mary

+0

할당하기 직전에 DiffArray와 Diff의 값은 무엇입니까? 전치사가 허수 성분을 추가 할 수 있습니까? 이 예외가 시작되는 곳을 확인하려면 디버거를 단계별로 실행하십시오. – Dan

+0

일부 행에 대해서는 다음과 같이 나타납니다. 경고 : 복잡한 X 및/또는 Y 인수의 가상 부분은 모델에서 무시됩니다. 이 행에 대해서는 ParYield에 의해 생성 된 것으로 생각되는 허수로 Diff를 얻습니다. DiffArray * all *에서 엔트리는 허위 숫자를받습니다. 나는이 방법으로 반응하는 것을 제안하기 위해 데이터를 검사하지 않았다. 모델을 NSModel *으로 바꾸면 치료할 수있는 것 같다. 이상한. – Mary