MATLAB から Python で結果を再現しようとしていました。しかし、私はそれを正しく理解できないようです。これは正しい MATLAB コードです。
nx = 5;
ny = 7;
x = linspace(0, 1, nx); dx = x(2) - x(1);
y = linspace(0, 1, ny); dy = y(2) - y(1);
onex = ones(nx, 1);
oney = ones(ny, 1);
Dx = spdiags([onex -2*onex onex], [-1 0 1], nx, nx);
Dy = spdiags([oney -2*oney oney], [-1 0 1], ny, ny);
Ix = eye(nx); Iy = eye(ny);
L = kron(Iy, Dx);
size(L) % 35 35
さて、これは Python コードです:
nx = 5
ny = 7
x = linspace(0, 1, nx); dx = x[1] - x[0]
y = linspace(0, 1, ny); dy = y[1] - y[0]
onex = ones(nx)
oney = ones(ny)
Dx = sparse.dia_matrix( ([onex, -2*onex, onex], [-1,0,1] ), shape=(nx,nx))
Dy = sparse.dia_matrix( ([oney, -2*oney, oney], [-1,0,1] ), shape=(ny,ny))
Ix = eye(nx)
Iy = eye(ny)
L = kron(Iy, Dx)
L.shape # (7, 7)
私が確認した限りでは、L の定義まではすべて正しいです。MATLAB kron(Iy, Dx)
(クロネッカー積であるはず) によると、35X35 行列を生成する必要がありますが、Python は 7X7 行列であると考えています。簡単な計算では、どちらも正しい答えを示します。
パイソン:
kron(array(([1,2],[2,3])), [1,2])
array([[1, 2, 2, 4],
[2, 4, 3, 6]])
MATLAB
kron([1 2; 2 3], [1 2])
ans = 1 2 2 4
2 4 3 6
異なる結果が得られるのはなぜですか?
ありがとう!