Я работаю над проблемой оптимизации, где я хочу максимизировать полезность при поиске по переменным lx_init и kx_init. Каждый раз, когда я решаю проблему с помощью fmincon, появляется другая. Ошибка сейчас ..
"Недостаточно входных аргументов."
«Ошибка в начальной оценке целевой функции. FMINCON не может продолжаться».
Я пытался отследить ошибку в режиме отладки, но отследить мою ошибку оказалось сложно. Функция может быть оценена сама по себе и вывести значение, поэтому я знаю, что ошибка в функции fmincon. Мой опыт работы с Matlab очень минимален. Я уверен, что есть другие синтаксические ошибки, в которых я виновен и слишком наивен, чтобы видеть. Я предоставлю все переменные, чтобы код мог быть воспроизведен.
Второй вопрос: я хочу максимизировать значение моей полезности здесь, но также найти значения 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, [],[])