MATLAB中积分函数的优化

问题描述 投票:0回答:0

Objective function

我正在尝试优化定义为静态积分的目标函数。 目标函数的参数数量为七个,我想找出使目标函数最小化的最佳参数。 目标函数的被积函数还有其他函数。 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'.

可能函数的定义有误;但是我不知道出了什么问题。

matlab optimization integration objective-function
© www.soinside.com 2019 - 2024. All rights reserved.