2011-05-13 37 views
4

HI there 我正在使用Octave 2.3.4绘图命令。我是Octave的新手。由于某些原因,此图不会显示。这里是我的M文件示例:八度运行正常但不显示剧情?

 1; 

clear all; 

%%%%%%%%% parameters setting %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
r=0.01; %risk free rate 
S0=50; %underlying price 1 

%create an implied volatiltiy surface using below parameters: 
basevol=0.25; %implied volatility at time t=0 and in center of strike axis 
skewT=-0.001; %icrease in vol for one unit increase in maturity 
v1=0.1; %defines how much a smile is raised at left end from base vol 
v3=0.2; %defines how much a smile is raised at right end from base vol 

nK=100; %no. of strike steps 
nT=10; %no. of time steps 
Tmax=1; %maximum value in time axis 
Kmin=1; %minimum value in strike price axis 
Kmax=150; %maximum value of strike price axis 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 


dt=Tmax/(nT-1); 
Tvec=0:dt:1; 
dk=(Kmax-Kmin)/(nK-1); 
Kvec=Kmin:dk:Kmax; 
Tvec=Tvec'; 
Kvec=Kvec'; 
nK=size(Kvec,1); 
nT=size(Tvec,1); 
dvolT=ones(nK,nT)*(skewT*dt); 
dvolT=cumsum(dvolT,2); 

SmileVec=GetSmile(Kvec,v1,0,v3); 
dvolK=ones(nK,nT); 
dvolK=repmat(SmileVec,1,nT); 

ImpliedVolSurface=ones(nK,nT)*basevol+dvolT+dvolK; 

%use formula mentioned by John Elder in "Hedging for Financial Derivatives" 
%this formula gives local volatility using implied volatility 
function ret=GetLocalVolSurface(ImpliedVolSurface, S, r, Kvec, Tvec) 
    [m,n]=size(ImpliedVolSurface); 
    LocalVolSurface=zeros(m,n); 
    dk=Kvec(2)-Kvec(1); 
    dt=Tvec(2)-Tvec(1); 
    x=ImpliedVolSurface; 
    for i=3:m-2, %loop over strikes 
    for j=1:n-1, %loop over time steps 
     dv_dk=(x(i+1,j)-x(i-1,j))/(2*dk); 
     dv2_dk2=(x(i-1,j)-2*x(i,j)+x(i+1,j))/(dk*dk); 
     dv_dt=(x(i,j+1)-x(i,j))/dt; 
     K=Kvec(i); 
     T=Tvec(j+1); 
     rT=T^0.5; 
     sig=x(i,j); 
     h1=(log(S/K)+r*T+0.5*sig*sig*T)/(sig*rT); 
     numer=sig*sig + 2*T*sig*dv_dt + 2*r*K*T*sig*dv_dk; 
     denom=(1+K*h1*rT*dv_dk)^2 + K*K*T*sig*sig*(dv2_dk2-h1*dv_dk*dv_dk*rT); 
     LocalVolSurface(i,j)=(numer/denom)^0.5; 
    end 
    end 
    ret=LocalVolSurface; 
endfunction 


LocalVol_Surface=GetLocalVolSurface(ImpliedVolSurface,S0,r,Kvec,Tvec); 

AsyImplVols=zeros(nK,1); 
T=Tvec(nT-1); 
F=S0*exp(r*T); 

for i=3:nK-2, 
    % use formula sigBS(F,K)=sigLoc((F+K)/2) 
    K=Kvec(i); 
    lookupK=(F+K)/2; 
    kdiff=abs(Kvec-lookupK); %try to find nearest point in grid 
    kidx=min(find(kdiff==min(kdiff))); 
    if ((kidx > 3) && (kidx < nK-2)), 
     AsyImplVols(i)=LocalVol_Surface(kidx); 
    else 
     AsyImplVols(i) = NaN; 
    end 
end 
figure(1); 
plot(Kvec(3:nK-2),[ImpliedVolSurface(3:nK-2,nT-1) LocalVol_Surface(3:nK-2,nT-1) AsyImplVols(3:nK-2)]); 

当我在没有错误的情况下运行Octave时,图从不显示。它确实包括gnuplot 1.0.1,我知道这个图表是什么?有没有我不做或失踪的事情?我也在Windows 2003 Server上运行它。 谢谢

+0

什么是'GetSmile()'该做的? – chl

回答

0

我得到了同样的问题安装在Windows 7 64位笔记本电脑(HP 630)与英特尔图形。每当你阴谋,它都没有做任何事情,但如果你再次阴谋,它显示出来。这是某种刷新错误。这很烦人,但是如果你重复两次,第二次重复。

我想知道它是否是某种双缓冲的错误,因为它可以在我自己的笔记本电脑上运行带有专用图形卡的Windows 7正确运行。

在任何情况下,尝试连续绘制两次,我敢打赌它的工作原理,请让我知道机器和视频卡是什么,因为我已经报告这个八度的发展。

1

我知道这是一个老问题,但因为我昨天碰到了非常相同的错误,也许这可以帮助别人,太:

按照Octave wiki pages,似乎有一个问题,绘图和“oct2mat” -library。对我来说,这个问题在我在八度命令提示符下运行后得到解决:

pkg rebuild -noauto oct2mat 

并重新启动八度。当您需要使用“oct2mat”时,请输入:

pkg load oct2mat 

希望有所帮助!

2

我得到了答案here。默认情况下Octave使用fltk进行绘图等,这是失败的工作,使用gnuplot工作在这里。只需在您的主目录中添加以下行到.octaverc文件。

graphics_toolkit("gnuplot") 

这样每次启动八音会设置默认包密谋gnuplot

+1

在我的情况下,在使用Fedora时,我得到了一个黑屏而不是情节。我的.octaverc不存在。但是,这很有魅力。 –