2011-03-28 37 views
2

我有在基質中的晶格的值示於圖1:如何用下面的格子樹形式表示我的Matlab矩陣值?

enter image description here 圖1:作爲當前顯示在Matlab我的代碼值的格式

現在我想代表這些值的格子樹形式如圖2所示(注意圖2中的值與圖1中的值不同,圖2僅用於演示目的)。我怎麼能修改我在Matlab代碼纔能有結果,看起來像圖中所示的樹格式2 ?:

enter image description here 圖2:值的格式,因爲我想顯示在我的Matlab的結果

以下是我的代碼:

function [price,BLOV_lattice]=BLOV_general(S0,K,sigma,r,T,nColumn) 


%% Constant parameters 
del_T=T./nColumn; % where n is the number of columns 
u=exp(sigma.*sqrt(del_T)); 
d=1./u; 
p=(exp(r.*del_T)-d)./(u-d); 
a=exp(-r.*del_T); 

%% Initializing the lattice 
Stree=zeros(nColumn+1,nColumn+1); 
BLOV_lattice=zeros(nColumn+1,nColumn+1); 

%% Developing the lattice 

for i=0:nColumn 
    for j=0:i 
     Stree(j+1,i+1)=S0.*(u.^j)*(d.^(i-j)); 
    end 
end 
for i=0:nColumn 
    BLOV_lattice(i+1,nColumn+1)=max(Stree(i+1,nColumn+1)-K,0); 
end 
for i=nColumn:-1:1 
    for j=0:i-1 
     BLOV_lattice(j+1,i)=a.*(((1-p).*BLOV_lattice(j+1,i+1))+(p.*BLOV_lattice(j+2,i+1))); 
    end 
end 
price=BLOV_lattice(1,1); 

回答

1

如果您的目標是將上三角矩陣(如圖1所示)重新格式化爲一個非零值排列成樹狀結構的矩陣(如圖2所示),那麼您可以使用功能SPDIAGS。下面是一個使用5乘5矩陣的例子:

>> A = triu(reshape(1:25,5,5)) %# A sample upper-triangular matrix 

A = 

    1  6 11 16 21 
    0  7 12 17 22 
    0  0 13 18 23 
    0  0  0 19 24 
    0  0  0  0 25 

>> N = size(A,1); %# The size of the rows and columns in A 
>> B = full(spdiags(spdiags(A),(1-N):2:(N-1),zeros(2*N-1,N))) 

B = 

    0  0  0  0 21 
    0  0  0 16  0 
    0  0 11  0 22 
    0  6  0 17  0 
    1  0 12  0 23 
    0  7  0 18  0 
    0  0 13  0 24 
    0  0  0 19  0 
    0  0  0  0 25 
1

我只使用一個for循環看到的解決方案..

function B = newShape(A) 

n = size(A,1); 
B = zeros(2*n-1,n); 
idx0 = n:(2*n):(2*n^2 - n); 
B(idx0(1):(2*n-2):(2*n^2-n-1)) = A(1,:); 
for i=n:(2*n-2) 
    B(idx0(i - n + 2):(2*n-2):(2*n^2-n)) = A(i-(n-1)+1,i-(n-1)+1:end); 
end 


end 
+0

嗨MarkV:我猜這裏的'A'是'BLOV_lattice'?我試過你的代碼,但它給出了錯誤'? (idx0(i-n + 2):(2 * n-2):(2 * n^2-n))= A(i-(n-1)+ 1,i-(n-1)+1:end);' – Pupil 2011-03-28 02:42:46

+0

什麼是'A'?如果它的'BLOV_lattice',那麼它不一定是正方形我猜。 – Pupil 2011-03-28 03:00:11

+0

我寫了這個假設'A'是方形的。例如,我能做 '[P A] = BLOV_general(10,5,.3,.05,1,20);' 'BLOV = newShape(A);' – MarkV 2011-03-28 03:01:39