2012-02-22 3 views
0

M- 파일 M (t, Z, X, Y, p1, p2, p3, k, l)과 같은 함수를 정의했습니다. 여기에서 p1, p2, p3는 매개 변수, X와 Y는 그리드 입력이고 Z = Z (X, Y, K, L)입니다. Matlab에게 t = 3, k = 4, l = 5, M (3, Z, X, Y, p1, p2, p3, 4,5)의 출력을 예로 들자면, 중요한 출력을 얻습니다. 나는 그런 데이터 매트릭스에 대해 같은 일을 할 수 없다 :데이터 행렬 함수

t=[2 3 4]'; 
k=[3 4 5]'; 
l=[2 3 4]'; 
M(t,Z,X,Y,p1,p2,p3,k,l) 

그것은 for 루프에서 그것을 가능하지만, 내가 다른 함수에서 사용하는 함수로 떠날 필요가있다. 저 좀 도와 주 시겠어요?

+0

구현을 표시하지 않고 함수 (여러분이 M이라고 부르는 함수)를 어떻게 디버그 할 것으로 기대합니까? 그리고 여기에 'kk'와 'll'이 무엇인지, 그들은 무의미합니다. –

+0

@High Performance Mark 당신은 맞습니다 :)하지만 나는 내 모든 문제를 가진 사람을 귀찮게하고 싶지 않습니다. 나는이 곤경의 이유를 볼 수 있는지 묻고 싶다. 답변 해 주셔서 감사합니다. – user1018331

답변

2

Matlab 함수를 행렬에 공급할 때 점을 통과하지 않고 점으로 평가하지 않습니다. 전체 행렬을 입력으로 사용합니다. 일부 기능의 경우,이 결과는, 예를 들면, 동일 할 수있다 : 단일 값 입력

function f = y2(x) 
f = y.^2; 
end 

윌 상품 Y^2 또는 입력 벡터하면 경우, Y = 말 [1, 2, 3]를 함수가 그런 방식으로 작성 되었기 때문에 단일 값 함수 출력 [1, 4, 9]을 얻을 수 있습니다. 또한, 함수가 기록 된 경우 : 당신이 입력 벡터, 그것은 오류 경우가 발생합니다 따라서 행렬 곱셈을 수행하려고 할 것이다 경우

function f = y2(x) 
f = y^2; 
end 

당신은, 그러나, 단일 값 입력에 대한 동일한 출력을 얻을 것이다 y는 정사각형이 아닙니다.

원하는 요소 별 평가를 생성 할 수 있도록 함수를 다시 작성해야합니다. 그것을 할 순진 방법은 다른 함수를 정의하는 것입니다 :

function fvec = Mvec(...) 
[n k] = size(t) 
fvec = zeros(n,k) 
for i=1:n 
    for j = 1:k 
     fvec(i,j) = M(t(i,j),...) 
    end 
end 
end 

가 작동하지만 일반적으로 제대로 작성하는 경우, 당신은 루프 중첩 된 사람들을 대체 할 수 있어야하기 때문에, 나쁜 MATLAB 코드로 간주됩니다 매트릭스 연산.

+0

명확하고 자세한 답변을 해주셔서 감사합니다. 나는 이것을 정확히 묻고 싶다. – user1018331