error message using polynom

1 次查看(过去 30 天)
hi,
I have the following code:
data16=zeros(size(data12,1),16);
data16(:,1:12)=data12;
numberEl=length(data16(:,9));
numberID=[1:numberEl]';
data16(:,13)=numberID;
dates=730755;
for i= 1:length(dates)
date=dates(i);
%msgbox(num2str(date))
dataDate = data16(data16(:,6) == date,:);
Ts = 0.22192
for indexT = 1:length(Ts)
T = Ts(indexT);
%msgbox(num2str(T))
dataT = dataDate(dataDate(:,5) == T,:);
number=dataT(:,13);
if length(dataT(:,1))==1
SlopeSkew(number)=0;
elseif length(dataT(:,1))==2
SlopeSkew(number)=0;
elseif length(dataT(:,1))==3
SlopeSkew(number)=0;
elseif length(dataT(:,1))==4
SlopeSkew(number)=0;
%nur zum probieren
else
% x is the Strike
x= dataT(:,2);
%is the implied volatility
y=dataT(:,10);
p = polyfit(x,y,2);
f = polyval(p,x);
plot(x,y,'o',x,f,'-')
xlabel('Strike Price K');
ylabel('Implied volatility \sigma');
a=p(3);
b=p(2);
c=p(1);
SlopeSkew(number)=b+2*c.*x;
Slope=SlopeSkew';
end
end
end
for whatever reson the polynom function gives me the following error message:
Warning: Polynomial is badly conditioned. Add points with distinct X
values, reduce the degree of the polynomial, or try centering
and scaling as described in HELP POLYFIT
I thought that I have fixed the problem, but unfortunately I havent reallly,
the data on which the code is run is the following:
1444. 1500 1 27.3125 0.22192 730755 0.068116 0.963071 60 0.183247087 0.342050308 247.5717725 60
1444. 1500 2 81.875 0.22192 730755 0.068116 1.038345044 61 0.183247281 -0.642946883 247.5718217 61
1444. 1505 1 24.625 0.22192 730755 0.068116 0.959871429 62 0.178451585 0.323180754 242.1932319 62
1444. 1505 2 85.75 0.22192 730755 0.068116 1.041806194 63 0.185184067 -0.654919572 244.2372928 63
1444. 1515 1 21.5 0.22192 730755 0.068116 0.953535644 64 0.177080297 0.294048585 232.5459004 64
1444. 1520 1 19.875 0.22192 730755 0.068116 0.950399013 65 0.175645711 0.278919192 226.8732368 65
1444. 1525 1 18.5 0.22192 730755 0.068116 0.947282951 66 0.174985304 0.264986129 221.2360078 66
1444. 1530 1 17.125 0.22192 730755 0.068116 0.944187255 67 0.174006888 0.25092381 215.1342839 67
1444. 1550 1 12.125 0.22192 730755 0.068116 0.932004194 68 0.169039366 0.196212196 187.2126905 68
1444. 1575 1 7.625 0.22192 730755 0.068116 0.917210476 69 0.164247859 0.138365666 149.5401411 69
Obviously the original dataset was much larger but I have reduced it to the part which is not working. The dataset consists of more than 3 point and therefore I do not see why polyfit is not working

采纳的回答

Walter Roberson
Walter Roberson 2013-4-25
The 4th line, (1505, 0.185184067) is a big difference in trend compared to the other lines. combine with the fact that it is the same x (1505) as the previous value (1505, 0.178451585), and you get a poorly determined polynomial.

更多回答(2 个)

Ahmed A. Selman
Ahmed A. Selman 2013-4-25
A polynomial P(x) is said to be (badly conditioned) when a small variances of x leads to large errors of P, causing unstable error estimation, i.e., error doesn't converge between x and x+dx for even small dx. This is also called (ill-conditioned polynomial) in parallel to (ill-conditioned matrix).
So, as the warning message suggests, try including other (and outer) values of x to walk around the anomaly, or use polyfit(x,y,1).
Keep in mind this is a warning, so it might still work fine within your data set, but even if it does, however, do not fully trust it for other values of data.

Locks
Locks 2013-4-27
thanks a lot, it seems as I should exclude those values, they do not seem reasonable

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by