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

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

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.

## 0 Comments