我正在尝试优化定义为静态积分的目标函数。 目标函数的参数数量为七个,我想找出使目标函数最小化的最佳参数。 目标函数的被积函数还有其他函数。 phi和q可以线性转换。 (phi_min,这些参数之一,用于此转换)
我尝试将目标函数定义为优化文件,如下所示。
function obj_func_ = obj_func(a, r, k, x_0, phi_min, L_1)
phi_min = phi_min * pi / 180; % deg to rad
q_min = 90 * pi / 180; q_max = 140 * pi / 180; tau_min = -55; tau_max = 110; % definition of integration interval
function integrand_ = integrand(q, tau)
integrand_ = (tau - tau_off(q))^2 * gmm_pdf(q, tau);
function x_ = x(q)
phi = q - (q_min - phi_min); % q to phi
x_ = d - (L_1 + r * cos(phi) + (l2 - (a - r * sin(phi))^2)^0.5);
end
function l_ = l()
l_ = ((a - r * sin(phi_min))^2 + (d - (x(q_min) + L_1))^2)^0.5;
end
function theta_ = theta(q)
phi = q - (q_min - phi_min); % q to phi
theta_ = acos((cos(phi) * (l()^2 - (a - r * sin(phi))^2)^0.5 + sin(phi) * (a - r * sin(phi))) / l());
end
function F_ = F(q)
F_ = 16 * k * (x_0 - x(q));
end
function tau_off_ = tau_off(q)
tau_off_ = r * F(q) * sin(theta(q));
end
function gmm_pdf_ = gmm_pdf(q, tau) % f_hat
mu_1 = [106.535931787733 1.96333076441078]; mu_2 = [121.773067488561 19.2965230960984]; mu_3 = [115.602219240159 66.2350816779692];
sigma_1 = [55.0268565769590 -24.3538354330364; -24.3538354330364 46.8321831800007]; sigma_2 = [10.3399787967042 47.7098053795118; 47.7098053795118 1135.51758936764]; sigma_3 = [6.81713296187806 -0.460045089304999; -0.460045089304999 291.183815500565];
weight_1 = 0.458239901253554; weight_2 = 0.178778927408346; weight_3 = 0.362981171338100;
gmm_pdf_ = arrayfun(@(q_, tau_) weight_1 * mvnpdf([q_, tau_], mu_1, sigma_1) + weight_2 * mvnpdf([q_, tau_], mu_2, sigma_2) + weight_3 * mvnpdf([q_, tau_], mu_3, sigma_3), q, tau);
end
end
obj_func_ = integral2(integrand, q_min, q_max, tau_min, tau_max);
end
当我尝试优化目标函数时,出现如下错误。
Not enough input arguments
Error in obj_func/integrand (line 7)
integrand_ = (tau - tau_off(q)) ^2 * gmm_pdf(q, tau):
Error in obj_func (line 40)
obj_func = integral2(integrand, q_min, q_max, tau_min, tau_max);
Error in optim. problemdef.fcn2optimexpr
Error in optim.prob]emdef. fcn2optime>pr
Error in fcn2optime>pr
Caused by:
Function evaluation failed while attempting to determine output size. The function might contain an error. or might not be well-defined at the automatically-chosen point. To specify output size without function evaluation, use 'OutputSize'.
可能函数的定义有误;但是我不知道出了什么问题。