2016-10-03 2 views
0

나는 다음과 같은 두 개의 파일이 개 간단한 기능을 가지고 :MATLAB : "충분하지 않은 입력 인수"오류

function [thetavals postvals] = opt_compute_posterior(joint, theta_min, theta_max, num_steps) 
    thetavals = linspace(theta_min, theta_max, num_steps); 
    postvals = joint(thetavals); 
    postvals = postvals/(sum(postvals) .* ((theta_max - theta_min)/num_steps)); 
end 

function joint = plJoint(tobs) 
    gamma = 2.43; 
    joint = @(theta)((1 ./ (theta.^(gamma + 1))) .* (tobs < theta)); 

end 

내가 opt_compute_posterior(plJoint, 0, 300, 1000)이 코드를 테스트 할 때, 나는 "충분하지 않은 입력 인수의 오류가 있습니다. "나는 코드가 어디에 잘못되었는지 찾을 수 없다. 빛을 내게 비추어주십시오.

+0

'하는 무엇을 반환 opt_compute_posterior' 않습니다, 당신이 그것을 호출 할 때 tobs을 위해 그것을 값을 전달해야합니까? – hbaderts

+0

@hbaderts 그것은 몇 가지 간격과 관절 기능의 Riemann 근사치 인 thetavals와 postvals를 반환합니다. – noclew

+0

오류 메시지에 따르면 충분한 입력 인수가 없습니다. 'opt_compute_posterior (plJoint (you_need_an_input_here), 0, 300, 1000)'이 필요합니다. –

답변

1

plJointopt_compute_posterior의 함수 핸들로 전달하려는 것 같습니다. 그러나 plJoint이라고 쓰면 MATLAB은이를 함수 호출로 해석하고 plJoint()을 작성한 것처럼 처리합니다. 당신이 함수 핸들을 원하는 나타 내기 위해, 당신은 @ 기호가 필요합니다

opt_compute_posterior(@plJoint, 0, 300, 1000) 

편집 : 내가 원래 코드의 의도를 착각 한 것 같다

. plJoint은 이미 함수 핸들을 반환하고 명령 창에서 호출하려고했습니다. 이 경우, 즉

opt_compute_posterior(plJoint(0.1), 0, 300, 1000) 
+0

입력 해 주셔서 감사합니다. 확실히 plJoint를 함수 핸들로 전달하려고합니다. 그러나 opt_compute_posterior (@plJoint, 0, 300, 1000)를 입력하면 "postvals"가 함수 핸들에 할당되고 plJoint 내부의 익명 함수의 계산 결과가 아니라 "Undefined function 'sum'에 대한 오류가 발생합니다. 'function_handle'유형의 인수를 입력하십시오. 이 문제를 어떻게 해결할 수 있습니까? – noclew

+0

Ahhh ...'plJoint' 함수에서 함수 핸들을 반환하고 있습니다. 그때 나의 처음 대답을 신경 쓰지 마라. 호출 할 때'tobs'에 대한 값을'plJoint'로 전달해야합니다. – KQS

관련 문제