Discover MakerZone

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

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

error message using polynom

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

0 Comments

Locks

Products

No products are associated with this question.

3 Answers

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.

0 Comments

Walter Roberson
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

Ahmed A. Selman
Answer by Locks on 27 Apr 2013

thanks a lot, it seems as I should exclude those values, they do not seem reasonable

0 Comments

Locks

Contact us