2017-05-27 95 views
0

我已經構建了這個腳本,但是我找不到Matrix中的問題。 這是我的答覆腳本調用標準選項:matlab下標分配維度不匹配。

N=50; 
T=90/252; 
dt=T/N; 
K=102; 
S0=100; 
B0=1; 
r=0.02; 

sigma=0.25; 



for i=1:N 
    ttomat(i)=(N-i+1)*dt; %+1 serve per aggiustare il tempo 
    d1(i)=(log(S(i,:)./K)+(r+0.5*sigma^2)*ttomat(i))./(sigma*sqrt(ttomat(i))); 
    d2(i)=d1(i)-sigma*sqrt(ttomat(i)); 
    Call(i,:)=S(i,:).*normcdf(d1(i))-K*exp(-r*ttomat(i)*normcdf(d2(i))); 
    alpha(i,:)=normcdf(d1(i)); %delta della Call 
    beta(i,:)=(Call(i,:)-alpha(i,:).*S(i,:))./(B0*exp(r*(i-1)*dt)); 

end 
+0

S沒有定義....至少指定它的尺寸... –

+0

請仔細閱讀本[如何對提問](http://stackoverflow.com/help/how-to-ask)並遵循其中的指導方針,通過附加信息來優化您的問題,例如代碼和錯誤消息來描述您的編程問題。 – thewaywewere

回答

0

你必須初始化/預分配的結果,得到的循環計算。在你的代碼中,你沒有預先分配結果。預先分配可幫助您快速實現結果。預先分配所需的變量始終是最佳做法。檢查下面的代碼,它是否適合你?

N=50; 
T=90/252; 
dt=T/N; 
K=102; 
S0=100; 
B0=1; 
r=0.02; 

sigma=0.25; 

S = rand(N,1) ; 

ttomat = zeros(1,N) ; 
d1 = zeros(1,N) ; 
d2 = zeros(1,N) ; 
Call = zeros(1,N) ; 
alpha = zeros(1,N) ; 
beta = zeros(1,N) ; 
for i=1:N 
    ttomat(i)=(N-i+1)*dt; %+1 serve per aggiustare il tempo 
    d1(i)=(log(S(i,:)./K)+(r+0.5*sigma^2)*ttomat(i))./(sigma*sqrt(ttomat(i))); 
    d2(i)=d1(i)-sigma*sqrt(ttomat(i)); 
    Call(i,:)=S(i,:).*normcdf(d1(i))-K*exp(-r*ttomat(i)*normcdf(d2(i))); 
    alpha(i,:)=normcdf(d1(i)); %delta della Call 
    beta(i,:)=(Call(i,:)-alpha(i,:).*S(i,:))./(B0*exp(r*(i-1)*dt)); 

end 
+0

謝謝,現在腳本正常工作! –

+0

請注意,我已經取S一個大小爲N * 1的隨機矩陣。將其更改爲您的案例數據。 –