我正在研究一个优化问题,我想在搜索变量lx_init和kx_init时最大化效用。每次我用fmincon解决问题时,都会弹出另一个提示。现在的错误是..
“输入参数不足。” “初始目标函数评估失败。FMINCON无法继续。”
我试图在调试模式下追溯错误,但是要追溯我的错误证明很困难。该函数可以自己求值并吐出一个值,因此我知道错误出在fmincon函数中。我的Matlab经验很少。我确信还有其他语法错误,我很内na,看不到。我将提供所有变量,以便可以复制代码。
第二个问题:我想在这里最大化我的效用值,但是也要找到最大化效用后给出的x和y值。但是,我们也在最大化lx_init和kx_init。如何获得返回x和y的函数?现在,它只是返回实用程序值。
这是我正在优化的功能
function [utility, x, y] = utility_with_prod(gamma_X, gamma_Y, alpha_LX, alpha_KX, alpha_LY, alpha_KY, alpha_uX, sigma_U, sigma_X, sigma_Y, L_bar, K_bar, lx_init, kx_init)
% X's production function
x = gamma_X*((alpha_LX*lx_init^((sigma_X-1)/sigma_X)) + ((alpha_KX)*kx_init^((sigma_X-1)/sigma_X)))^(sigma_X/(sigma_X-1));
% Y's production function
y = gamma_Y*((alpha_LY*(L_bar-lx_init)^((sigma_Y-1)/sigma_Y)) + ((alpha_KY)*(K_bar-kx_init)^((sigma_Y-1)/sigma_Y)))^(sigma_Y/(sigma_Y-1));
% utility function with nested production function
utility = -(((alpha_uX*x^((sigma_U-1)/sigma_U)) + ((1-alpha_uX)*y^((sigma_U-1)/sigma_U)))^(sigma_U/(sigma_U-1)));
end
这是我的初始值
sigma_U= 0.5038;
sigma_X= 0.5029;
sigma_Y= 0.5029;
alpha_uX= 0.000236017865342454;
alpha_LX= 0.180813595922536;
alpha_KX= 0.819186404077464;
gamma_X= 1.768587207836113;
alpha_LY= 0.505368332690592;
alpha_KY= 0.494631667309408;
gamma_Y= 1.999942066647923;
lx_init = 1;
kx_init = 2;
L_bar = 3;
K_bar = 3;
x0 = [lx_init, kx_init];
和优化
utility = @(lx_init, kx_init)utility_with_prod(gamma_X, gamma_Y, alpha_LX, alpha_KX, alpha_LY, alpha_KY, alpha_uX, sigma_U, sigma_X, sigma_Y, L_bar, K_bar, lx_init, kx_init)
[optimal_lx_kx, utility_max, exitflag] = fmincon(utility, x0, [],[])
答案 0 :(得分:1)
x0
中的 fmincon
是一个向量,是n×1矩阵或1×n,
此处1乘2 ---> x0 = [lx_init, kx_init];
功能句柄@(lx_init, kx_init)
与@([lx_init, kx_init])
不同。
@([lx_init, kx_init])
仅接受一个输入。
@(lx_init, kx_init)
仅接受两个输入,不多也不少。
输入变量也不应该是预定义值
将@(lx_init, kx_init)
更改为@(x)
,其中x(1) = lx_init
和x(2) = kx_init
总结
utility = @(lx_init, kx_init)utility_with_prod(gamma_X, gamma_Y, alpha_LX,alpha_KX, alpha_LY, alpha_KY, alpha_uX, sigma_U, sigma_X, sigma_Y, L_bar, K_bar, lx_init, kx_init)
替换为
utility = @(x)utility_with_prod(gamma_X, gamma_Y, alpha_LX, alpha_KX, alpha_LY, alpha_KY, alpha_uX, sigma_U, sigma_X, sigma_Y, L_bar, K_bar, x(1), x(2))