MATLAB:“没有足够的输入参数”错误

时间:2016-10-03 03:42:36

标签: 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),我有错误的“没有足够的输入参数。”,我无法找到代码到底出错的地方。请点亮我的灯。

1 个答案:

答案 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)