2011-05-13 69 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不存在。但是,這很有魅力。 –