2012-07-19 2 views
3

저는 각 요소가 1x5 벡터 인 2x2 행렬을 가지고 있습니다. 이런 일이 :Matlab : 벡터 행렬의 결정자

x = 1:5; 
A = [ x x.^2; x.^2 x]; 

는 지금은 결정을 찾으려하지만,이

B = det(A); 
Error using det 
Matrix must be square. 

가 지금은 이런 일이 발생하는 이유, MATLAB는 복식의 2 × 매트릭스 같이 본다 볼 수 있습니다 발생합니다. x를 요소가 아닌 벡터로 취급하고 싶습니다. 내가 원하는 것은 det(A) = x^2 - x^4이고, B = det(A)을 1x5 벡터로 얻으십시오.

어떻게해야합니까?

+0

'det'의 벡터화 된 버전을 원하십니까? –

+0

맞아요, 그래 – Eddy

+0

왜 det (A) = x.^2 - x.^4'를 계산할 수 없습니까? – chaohuang

답변

3

Matlab에는 상징적 인 기능이 있지만 훌륭한 것은 아닙니다. 대신 실제로 작업을 벡터화하려고합니다. 루프를 사용하거나 작업에 ARRAYFUN을 사용할 수 있습니다. ARRAYFUN처럼 들리면 문제가 더 쉬워 질 것입니다.

ARRAYFUN 방법 :

x = 1:5; 
detFunc = @(x) det([ x x^2 ; x^2 x ]); 

xDet = arrayfun(detFunc, x) 

생산 :

>> xDet = arrayfun(detFunc, x) 
xDet = 
    0 -12 -72 -240 -600 

을 더 복잡한 결정를 들어, 4 × 4의 경우처럼, 내가 대신 (실제 기능에 대해 별도의 M-파일을 만들 것 익명 함수를 사용하여 함수 핸들을 사용하여 에 전달하십시오.

xDet = arrayfun(@mFileFunc, x); 
+0

감사합니다. 익명의 함수 접근법을 사용했기 때문에 다르게 작동하지 못했습니다. "충분하지 않은 입력"또는 뭔가에 대한 침착 오류를 유지합니다. – Eddy

1

수학적으로는 Determinant은 정사각 행렬에 대해서만 정의됩니다. 그래서 여러분이 정사각형 행렬을 제공 할 수 없다면 여러분은 행렬식을 사용할 수 없을 것입니다.

참고 나는 위키 백과가 모든 자원을 끝내지 않는다는 것을 알고 있습니다. 대학 준비 책에서 인쇄물을 쉽게 제공 할 수 없기 때문에 간단히 제공하고 있습니다.

업데이트 : 가능한 해결책?

x = zeros(2,2,5); 
x(1,1,:) = 1:5; 
x(1,2,:) = 5:-1:1; 
x(2,1,:) = 5:-1:1; 
x(2,2,:) = 1:5; 

for(n=1:5) 
    B(n) = det(x(:,:,n)); 
end 

그와 같은 것이거나 각 벡터를 동시에 고려하고 싶습니까? 이 방법은 각각의 '레이어'를 자신의 것으로 취급하지만, 결과적으로 단일 값을 얻고 싶다는 비열한 suspiscion이 있습니다.

+0

문제는, x를 상징적으로 다루는 경우 정사각형 행렬을 사용한다는 것입니다. 알아 내야 할 것은 상징적으로 행렬식을 계산 한 다음 x에 벡터를 대입하는 방법입니다. – Eddy

+0

여기 내 머리 꼭대기에서 가능한 한 넋을 잃어 버리는 것. 답변을 업데이트했습니다. –

+0

비록 내가이 솔루션을 사용하여 끝내지는 않았지만, 그것은 내가 행렬식으로하고있는 다른 것에 도움이되었으므로 나는 그것을 upvote 할 것입니다. – Eddy