0

배경 : 저는 Matlab에서 유한 차이 스키마를 실행하고 있습니다. 두 변수의 함수를 구별하고 싶습니다 f(x,y). 대신 격자 점 F(:,:)에 매트릭스 표현이 있습니다. F이 1 차원 배열이면 차별화 연산자는 행렬 Delta(:,:)이고 차별화는 F_tag = Delta*F입니다.Matlab의 상자 행렬 연산자

그러나 F이 매트릭스이므로 더 복잡해집니다. 기본 접근법은 n^2 1 차원 벡터로 F을 표현한 다음 n^2 행렬에 n^2로 2d_Delta을 표시하는 것입니다. 그러나 이것은 많은 비효율 성과 버그의 원천이 될 수 있습니다.

내 질문 :,는 n^2 행렬 - 벡터 multipication로 Delta*F을 실행 상자 구현의 출력은 n 개의 * n을 매트릭스 F(:,:)와 호환 매트릭스 운영자 Delta(:,:,:,:)이 감안할? 유한 차분 분화 방식의 경우, 2 행렬 R에 의해 작성 될 수있는 임의의 매트릭스 운영자 A의 구체적

+0

정확히 어떤 작업을하고 있는지 확실하지 않지만 'bsxfun'이 도움이 될 수 있습니다. 'bsxfun (@times, F, Delta)'또는'bsxfun (@times, Delta, F)'를 사용한다. –

+1

기본 제공 기능 D = gradient (F); 다차원 입력에서 작동합니다. 사용자 정의 연산자의 경우 사용자 고유의 벡터화 표현식을 작성해야하며 bsxfun()이 도움이 될 것입니다. –

+0

@AiridasKorolkovas 'gradient'와 'del2'를 살펴 봤습니다. 반복적으로 적용하면 새로운 구분을 할당합니다. 각 반복마다 행렬을 만들거나보다 효율적으로 처리 할 수 ​​있습니까? –

답변

0

, T마다 행렬 X

A(X) = RX + XT 

그 다음 kron 기능이 우수한 등이라고 방법으로 n^2 xn^2 행렬을 만듭니다. 한 차원 두번째 파생 매트릭스 D을 감안할 때, 다음 두 가지 차원 자세한 내용

Laplacian2D = kron(speye(n),D) + kron(D, speye(n)); 

될 것입니다, 나는 긴 첸에 의해 this great tutorial를 참조하십시오.