2014-12-05 5 views
0

나는 그것을 다루는 방법을 모르지만 그것은 매우 간단한 문제입니다.행렬 함수에서 새 함수를 정의하는 방법은 무엇입니까?

예를 들어 2 * 2 매트릭스를 반환하는 함수 f(x,y)을 정의했습니다. 나는 그 값이 f(x,y)의 (1,1) 요소 인 새로운 함수 g을 정의하려고한다. 순진하게 [email protected](x,y)(f(x,y))(1,1)을 시도했지만 실패했습니다. 제발 도와주세요!

+0

매트릭스의 (1,1) 요소를 얻는 가장 쉬운 방법은'f (1,1)'을 호출하는 것입니다. 함수가 실제로 필요하지 않습니다. – eigenchris

+0

그러나'f (1,1)'은 2 * 2 행렬을 반환합니다. – Andy

+0

죄송합니다. 저는 여러분이 함수'f'를 호출 한 것을 알고 있습니다. 행렬'M'을 가지고 있다면'M (1,1)'을 사용하여'(1,1)'원소를 얻을 수 있습니다. – eigenchris

답변

1

당신은 사용할 수 있습니다 :

g = @(x,y)([1 0] * f(x,y) * [1 0]') 
+0

도움이됩니다. 고마워요! – Andy

+0

아름다운 해결책, 나는 명심한다. 불행히도 큰 행렬에는 실용적이지 않습니다. – hbaderts

+0

물론 getfield는 적절한 것입니다. – Kostya

1

을 당신은 기능을 사용할 수 있습니다 getfield

이의는 2 × 2 행렬을 반환 f(x,y)을 정의 할 수

f = @(x,y) [1*x 2*y;3*x 4*y].^2 ; 

다음에하자가를 반환하는 함수 g11(x,y)를 정의 요소 {1,1}이 f(x,y)입니다. (그리고 {2,1} 요소를 반환 추가 기능 g21는)

g11 = @(x,y) getfield(f(x,y) , {1,1}) ; 
g21 = @(x,y) getfield(f(x,y) , {2,1}) ; 

그리고 지금 : 임시 변수없이 전도 여행의 더 화려한 사용을위한

>> f(3,4) 
ans = 
    9 64 
    81 256 

>> g11(3,4) 
ans = 
    9 

>> g21(3,4) 
ans = 
    81 

, 모든 읽기 this question

+0

또한 도움이됩니다! 고마워! – Andy

관련 문제