Asked by Locks
on 25 Apr 2013

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

*No products are associated with this question.*

Answer by Walter Roberson
on 25 Apr 2013

Accepted answer

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.

Answer by Ahmed A. Selman
on 25 Apr 2013

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.

Related Content

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 0 Comments