2013-10-08 3 views
3

매개 변수로 전송되는 함수와 벡터를 평가하는 matlab 함수를 작성하려고합니다. 나는 힘든 시간을 MATLAB 함수에서 평가할 수 있도록 함수를 보내는 방법을 알아 내려고 애 쓰고있다. 나는 함수없이 그것을하는 방법을 알아 냈다. 그러나 나는 matlab 함수 내에서 그것을 평가하려고 애 쓰고있다. 다음은 내 코드 ... 함수를 matlab 함수로 보내기

내가 할 노력하고있어입니다 ...
x = [x1 x2]'; 
f = x(x1)^2 + 2 * (x2)^2 

x = [5 10]; 
f = (5)^2 + 2 * (10)^2 % which I would like to return 225, not a column vector 

내가 시도 내가 가진 것을하고는 ...입니다

x = [5 10]'; 

% without using a matlab function 
% k = 1 
% f = x(k)^2 + 2 * x(k + 1)^2; % returns the correct answer of 225 

f = x^2 + 2 * x^2  % complains about the scalar 2 
f = x.^2 + 2 * x.^2  % returns a column vector [75; 300] 
function [value] = evalFunction(f,x) 
value = f(x); 

나는 ...

f = @(x) x.^2 + 2 * (x+1).^2; 
value = evalFunction(@f,x)  %Error: "f" was previously used as a variable 

그래서 나는 시도 ... 시도했습니다

f = @(x) x.^2 + 2 * (x+1).^2; 
value = evalFunction(f,x)  %value = [97;342] 

나는 모든 도움을 주시면 matlab에 익숙합니다. 나는 약간의 연구를 해왔고 stackoverflow에 몇 가지 물건을 발견했지만 작동시키지 못했다. 나는이 일을하는 다른 방법이 있다는 것을 알았지 만, 결국에는 matlab evalFunction 함수에 더 많은 코드를 추가 할 것이므로이 방법을 사용하고 싶습니다. 감사!

+0

주 '의 차이 [1 2]^2' (행 벡터에 행렬 승산을 수행하기 위해 시도하고, 오류가 발생되는)와'[1 2].^2'는'요소 별 곱셈 '을 수행합니다 - 결과는'[1 * 1 2 * 2]'또는'[1 4]'입니다. 그 외에도 "함수 핸들"은 실제로 당신이 알아야 할 것입니다. @ chappj의 답변에는 도움이되는 링크가 포함되어 있습니다. – Floris

+0

내 업데이트 된 질문을 참조하십시오.도와 주셔서 감사합니다. – user2743

+0

더 정확한 내용을 말하고 끝에 적절한 질문을하지 않기 위해 질문을 업데이트했습니다.> – user2743

답변

3

Anonymous functionsfunction handles 더하기 배열 색인화. 2 요소 벡터로 x 촬영, 정의와 같은 함수를 사용 evalFunctionx에서 f을 평가 이외의 아무것도하지 않는 경우, 그러나

f = @(x) x(1).^2 + 2 * x(2).^2; 
value = evalFunction(f,x) % but you can just do f(x) if that is all you need 

, 당신은 전혀 필요하지 않습니다. 그냥 f(x)하십시오.

다른 방법으로는,

f = @(x1,x2) x1.^2 + 2*x2.^2; 
value = evalFunction(f,x1,x2); % here your function will call it by f(x1,x2) 
+0

업데이트 된 질문을 참조하십시오. 도와 주셔서 감사합니다! – user2743

+0

그래, 여분의'@'는 오타였습니다. 다행이 당신을 위해 일 했어. – chappjc

+0

미안 나는 내가되고 싶었던만큼 명확하지 않다고 생각하지 않는다. 업데이트 된 질문을보고 도움을 청합니다. – user2743

3

당신은 아마 C의 배경에서이오고있다 - 없다 1.

기능에 의해 상쇄 요소 - 매트랩, x+11x 추가 한 전체 벡터이다 당신은 필요

f = @(x)x(1).^2 + 2 * (x(2)).^2; 

또는, 될 조금 더 "MATLAB과 같은"입니다 :

다음 열 벡터로서 x의 처음 두 요소의 요소 와이즈 제곱을 수행하고 는
f = @(x) [1 2] * x(1:2)'.^2; 

가 무엇인지 보인다

1 * x(1) .^2 + 2 * x(2) .^2; 

결과 [1 2]와 행렬 곱셈을 수행 묻고.

주의이 테스트 기회가 없었다 ...

+1

예, 우리는 마침내 대답에 모두 도착했습니다. 질문에서 "나는 시도 했어."이후의 모든 것은 내 대답과 앞뒤로 나왔다. 질문은 변태가 심했다. :) – chappjc

+0

@chappjc - 참으로. 따라서 귀하의 대답에 대한 내 투표 (비록 내 매트릭스 곱셈 방법을 선호하는 개별 사각형과 계수의 내적을 얻는 제품). – Floris

+0

사실 - "MATLAB 사고 방식"에서 좋은 교훈입니다. 쪽으로. – chappjc

관련 문제