Как представить мои значения матрицы Matlab в следующей форме дерева решетки? - PullRequest
2 голосов
/ 28 марта 2011

У меня есть значения решетки в матрице, как показано на рис. 1:

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);

Ответы [ 2 ]

1 голос
/ 29 марта 2011

Если ваша цель состоит в том, чтобы переформатировать верхнетреугольную матрицу (как показано на рисунке 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 голос
/ 28 марта 2011

Я вижу решение, использующее только один для цикла ..

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...