查找效用函数U(h1,h2)的最大值 [英] Find maximum of a utility function U(h1, h2)

查看:106
本文介绍了查找效用函数U(h1,h2)的最大值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个matlab函数,该函数返回效用值U(h1, h2),该值取决于两个人h1h2的工作时间.每个人最多可以工作3500小时.

I have a matlab function that returns the utility value U(h1, h2) that depends on the number of work hours for two persons h1 and h2. Each person can work at maximum 3500 hours.

如何以最佳方式编写此代码?对于只有一个人,我只将函数从输入值0到3500循环到一个矩阵中,然后在矩阵中找到最大值.但是现在我有两个值,可以取0到3500之间的值,并希望根据这些值找到函数的最大输出.

How do I write this code in the best way? For only one person I only loop the function from input value 0 to 3500 into a matrix and find the max value in the matrix. But now I have two values that can take the value 0 to 3500 and want to find the max output from the function based on these values.

我将非常感谢您的帮助!

I would be very grateful for any help!

对不起,迟到了!到目前为止,我还没有时间对此进行研究.无论如何,这是代码:

edit: Sorry for late return! I haven't had time to look in to this until now. Anyway, here is the code:

function Test

global LocalTaxRate
global StateTax1Rate
global StateTax2Rate

LocalTaxRate = 0.3212; %Average 2017
StateTax1Rate = 0.25;
StateTax2Rate = 0.05;

h = [0 0]; % start value
lb = [0 0]; % lower bound of h
ub = [3500 3500]; % upper bound of h
myFun = @(h) -CalcUFamily(h(1), h(2)); % function to minimize with one input
Uoptimal = fmincon(myFun, [1000 1000], [], [], [], [], lb, ub)

end

function UFamily = CalcUFamily(hh,hw) %h = male, w = wife

(bunch of code until this step, which is the relevant one)

 YearlyWorkIncomeHusband = WageHH * hh;
    C = YearlyWorkIncomeHusband + MonthlyTaxableTransfers * 12 - CalcTaxSwe(YearlyWorkIncomeHusband + MonthlyTaxableTransfers * 12, YearlyWorkIncomeHusband, Age) + MonthlyNonTaxableTransfers * 12; %Netincome husband
    YearlyWorkIncomeWife = WageHW * hw;
    C = C + YearlyWorkIncomeWife + MonthlyTaxableTransfers * 12 - CalcTaxSwe(YearlyWorkIncomeWife + MonthlyTaxableTransfers * 12, YearlyWorkIncomeWife, Age) + MonthlyNonTaxableTransfers * 12; %Netincome husband + wife

    UFamily = alpha1 * log10(C/100000) + alpha11 * (log10(C/100000)^2) ...
        + alpha2 * (log10(T/1000-hh/1000)) + alpha22 * (log10(T/1000-hh/1000))^2 + alpha12 * log10(C/100000) * (log10(T/1000-hh/1000)) * 2 ... %husband
        + alpha3 * (log10(T/1000-hw/1000)) + alpha33 * (log10(T/1000-hw/1000))^2 + alpha13 * log10(C/100000) * (log10(T/1000-hw/1000)) * 2 ... %wife
        + alpha23 * (log10(T/1000-hh/1000)) * (log10(T/1000-hw/1000)) ... %common leisure parameter
        - alpha4 * Psa - bfc * Dw; %Dummies
end

推荐答案

您可以使用两种方法来解决您的问题:

You can use two approaches two solve your problem:

  1. 生成2D网格并找到全局最大值

  1. Generate a 2D mesh and find the global maximum

[h1, h2] = meshgrid(0:100:3500);
Uoptimal = max(max(U(h1, h2))

  • 使用多元最小化求解器,例如 fmincon

  • Use a multivariate minimisation solver, such as fmincon

    h = [1000 1000]; % start value
    lb = [0 0]; % lower bound of h
    ub = [3500 3500]; % upper bound of h
    Uoptimal = fmincon(@(h1, h2) -U(h1, h2), h, [], [], [], [], lb, ub);
    

    请注意,我最小化了-U,这与最大化U相同.

    Note that I minimise -U, which is the same as maximising U.

    方法1将为您提供全局最大值,但获得准确结果的速度相当慢.方法2非常准确,但可能会停留在局部最大值上,具体取决于起始值和效用函数U的凸度.

    Approach 1 will give you the global maxima, but is rather slow for obtaining an accurate result. Approach 2 is very accurate, but may get stuck at a local maxima, depending on the start value and the convexity of your utility function U.

    这篇关于查找效用函数U(h1,h2)的最大值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆