你好 我使用Octave 2.3.4和plot命令。我是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 :(得分:3)
我得到了答案here。默认情况下,Octave使用fltk
进行绘图等,但使用gnuplot
无法正常工作。只需将以下行添加到主目录中的.octaverc
文件即可。
graphics_toolkit("gnuplot")
因此,每次开始八度音程时,都会将绘图的默认包设置为gnuplot
答案 1 :(得分:1)
我知道这是一个老问题,但是因为我昨天遇到了相同的错误,也许这也可以帮助其他人:
根据Octave wiki pages,绘图和“oct2mat” - 图书馆似乎存在问题。对我来说,问题在我在octave命令提示符下运行后解决了:
pkg rebuild -noauto oct2mat
并重新启动八度音阶。当您需要使用“oct2mat”时,请输入:
pkg load oct2mat
希望有所帮助!
答案 2 :(得分:0)
我在使用intel图形的Windows 7 64位笔记本电脑(HP 630)上安装时出现同样的问题。每次你绘图时,它都没有做任何事情,但是如果你再次绘图,它会显示出来。这是一种刷新bug。这很烦人,但是如果你画两次,第二次就可以了。
我想知道它是否是某种双缓冲错误,因为它可以在我自己的笔记本电脑上正常运行,运行带有专用显卡的Windows 7。
在任何情况下,尝试连续两次绘图,我敢打赌它有效,请让我知道机器和视频卡是什么,因为我已将此报告为八度开发。