1

Matlabを使用して、確率過程からの確率分布を状態空間にプロットするつもりです。状態空間は、150x150 行列の下三角で表すことができます。ある時点での確率分布については、図 (メッシュなしのサーフ プロット) を参照してください。

ここに画像の説明を入力

ご覧のとおり、グラフには高度な対称性がありますが、正方行列としてプロットされているため、少し奇妙に見えます。四角形を変換できれば、プロットは完璧に見えます。私の質問は、Matlabを使用して下三角形の部分を等辺三角形としてプロット/変換するにはどうすればよいですか?

4

1 に答える 1

1

この関数はあなたのために仕事をするはずです。そうでない場合は、お知らせください。

function matrix_lower_tri_to_surf(A)
%Displays lower triangle portion of matrix as an equilateral triangle
%Martin Stålberg, Uppsala University, 2013-07-12
%mast4461 at gmail

siz = size(A);
N = siz(1);
if ~(ndims(A)==2) || ~(N == siz(2))
    error('Matrix must be square');
end

zeds = @(N) zeros(N*(N+1)/2,1); %for initializing coordinate vectors
x = zeds(N); %x coordinates
y = zeds(N); %y coordinates
z = zeds(N); %z coordinates, will remain zero
r = zeds(N); %row indices
c = zeds(N); %column indices

l = 0; %base index
xt = 1:N; %temporary x coordinates
yt = 1; %temporary y coordinates

for k = N:-1:1
    ind = (1:k)+l; %coordinate indices
    l = l+k; %update base index

    x(ind) = xt; %save temporary x coordinates

    %next temporary x coordinates are the k-1 middle pairwise averages
    %calculated by linear interpolation through convolution
    xt = conv(xt,[.5,.5]);
    xt = xt(2:end-1);

    y(ind) = yt; %save temporary y coordinates
    yt = yt+1; %update temporary y coordinates

    r(ind) = N-k+1; %save row indices
    c(ind) = 1:k; % save column indices
end

v = A(sub2ind(size(A),r,c)); %extract values from matrix A
tri = delaunay(x,y); %create triangular mesh

h = trisurf(tri,x,y,z,v,'edgecolor','none','facecolor','interp'); %plot surface
axis vis3d; view(2); %adjust axes projection and proportions
daspect([sqrt(3)*.5,1,1]); %adjust aspect ratio to display equilateral triangle

end %end of function
于 2013-07-11T23:16:36.827 に答える