我在两个单独的文件中有两个简单的函数,如下所示:
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 :(得分:1)
您似乎试图将plJoint
作为函数句柄传递给opt_compute_posterior
。但是,如果您只是编写plJoint
,MATLAB会将其解释为函数调用,并将其视为您编写plJoint()
。要指示您需要函数句柄,需要@
符号:
opt_compute_posterior(@plJoint, 0, 300, 1000)
编辑:
似乎我误认为原始代码的意图。 plJoint
已经返回一个函数句柄,你确实打算从命令窗口调用它。在这种情况下,当你调用它时,你需要传递tobs
的值,即
opt_compute_posterior(plJoint(0.1), 0, 300, 1000)