私はとh2
の2人の勤務時間数に依存するユーティリティ値U(h1, h2)
を返すmatlab関数を持っています。各人は最大3500時間で作業できます。ユーティリティ関数の最大値を見つける
このコードをどのようにして最良の方法で書くことができますか?私は1人の人のために、入力値0から3500までの関数を行列にループし、行列の最大値を求めます。しかし、今私は0から3500の値を取ることができ、これらの値に基づいて関数から最大出力を探したいと思う2つの値があります。
私はどんな助けでも非常に感謝しています!
編集: ごめんなさい!私は今までこれを見る時間がなかった。
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
あなたが何を求めているのか分かりません。 – excaza
私は以下のような関数を持っています:max U(h1、h2) ここで、h1は勤務時間person 1とh2勤務時間person 2. h1とh2の限界に基づいてU(h1、h2) h> _ 0、h <_3500 – KGB91