Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Matlab计算中忽略包含NaN项的向量_Matlab_Dynamic Data_Finance_Nan_Quantitative Finance - Fatal编程技术网

在Matlab计算中忽略包含NaN项的向量

在Matlab计算中忽略包含NaN项的向量,matlab,dynamic-data,finance,nan,quantitative-finance,Matlab,Dynamic Data,Finance,Nan,Quantitative Finance,此代码根据函数为债券定价。我如何让Matlab在选择某个日期时忽略CleanPrice向量中的NaN值,因为某些债券的缺失价格有一个NaN条目。在推导零曲线时,我怎么能完全忽略键呢?似乎许多NAN解决方案都采用插值或设置为零,但这将导致错误的曲线 Maturity=gcm3.data.CouponandMaturity(1:36,2); [r,c]=find(gcm3.data.CleanPrice==datenum('11-May-2012')); row=r SettleDate=gcm

此代码根据函数为债券定价。我如何让Matlab在选择某个日期时忽略CleanPrice向量中的NaN值,因为某些债券的缺失价格有一个NaN条目。在推导零曲线时,我怎么能完全忽略键呢?似乎许多NAN解决方案都采用插值或设置为零,但这将导致错误的曲线

Maturity=gcm3.data.CouponandMaturity(1:36,2);

[r,c]=find(gcm3.data.CleanPrice==datenum('11-May-2012'));
row=r

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

CleanPrices =transpose(gcm3.data.CleanPrice(row,2:end));
CouponRate = gcm3.data.CouponandMaturity(1:36,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);
数据看起来是这样的,其中每列都是债券,第1列是日期,元素是净价。正如你所看到的,数据的第一部分包含了大量尚未定价的债券的NAN。一个时点之后,所有债券都有价格,但不幸的是,有些情况下,一到两天的价格都不见了。 理想情况下,如果存在NaN,我希望它在该日期忽略该债券,如果可能的话,因为生成的曲线越多(无论使用了多少债券),效果越好。如果不可能,则可以忽略该日期,但会导致许多曲线无法生成。

这是您问题的一般解决方案。我的工作计算机上没有工具箱,因此无法测试它是否与IRFunctionCurve.fitSvensson命令一起工作

[row,~]=find(gcm3.data.CleanPrice(:,1)==datenum('11-May-2012'));
col_set=find(~isnan(gcm3.data.CleanPrice(row,2:end)));
CleanPrices=transpose(gcm3.data.CleanPrice(row,col));

您能提供示例输入数据吗?你想让它忽略整个债券,还是那个日期,或者只是那个日期的债券?我想这必须是前两个选项之一。请查看
isnan
以编写您自己的处理程序,以及先前存在的NaN处理函数,如
nanmean
@Dan。谢谢-我已经编辑了这个问题以包含更多信息。如果有可能取消“该日期的债券”,这将是我所需要的最佳选择。谢谢!我将参考更新为col和row,效果很好。谢谢!虽然如果您能在这方面提供帮助,我将不胜感激:我现在有一个连续结算的NTRIAL的for循环,但我在计算价格数组时遇到了一个问题:Diff=价格实际价格,其中[PriceActual,AccountedContactual]=bndprice(收益率,耦合率,结算,到期日);[价格,应计金额]=BND价格(平均收益率、耦合率、结算、到期日);当Diff以(nTrials x col)数组形式出现时,其中(col=我想我理解这个问题,但让我重申一下:因为你没有在每个日期都包括每一张债券,所以你返回价格的债券数量会因日期而异。要解决这个问题,你必须保存或重新创建你喜欢的债券(不是NaN)最简单的方法是:
col_-good=setdiff(2:26,col);PriceActual=zero(1,25);AccountedActual=zero(1,25);[PriceActual(1,col_-good),AccountedActual(1,col_-good)]=bndPrice(ParYield,CouponRate,Settle,duration);
最初的setdiff基本上是说“给我好的列的索引。”