1

関数を解くために fsolve を使用しましたが、結果は次のように表示されます

最適化が終了しました: X の相対変化のノルムが max(options.TolX^2,eps) 未満であり、関数値の平方和が sqrt(options.TolFun) 未満です。

A = 0.3490

誰でもこれを解決する方法を知っていますか? ありがとう!

私のコードは以下の通りです

clear

M=10000;
x0=0.35;
Z=randn(M,1);
A=fsolve(@(x)function_1_5_3(x,Z),x0)


function f=function_1_5_3(x,Z)

r0=.02;%interest rate
sigma=.15;%vatality rate of risky asset
mu0=.06;%drift rate of risky asset
gamma=5;%risk aversion rate
M=10000;%number of trajectories
N=55;%time period
T=55;%total time period
R=40;%time of retirement
dt=T/N;%each time period
t=1:dt:T;
omega=x;
Rf=exp(r0);%riskless reture
mat=rand(M,N);

Rs=exp(mu0+sigma*Z);%risky market return
a=20*mat(:,N-2);
a_1=20*mat(:,N-1);

W=((a.*(Rf+omega*(Rs-Rf))-a_1).^(-gamma)).*(Rs-Rf);%regard as function 4

f=mean(W);
4

1 に答える 1

1

まったく問題はありますか?

最適化を実行するとき (つまり、function_1_5_3 が非常に小さくなるように値 A を見つける)、適切なソリューションと見なすものを定義する必要があります。epsパラメータが変更されてソリューションが少し改善されるまで、何日も待っても意味がありません。

たとえば、x 値があまり変化しない場合や、関数値があまり変化しない場合など、"十分な" ソリューションを特定するための一般的なヒューリスティックがいくつかあります。を使用して値を設定できるへのoptions引数を使用すると、未知数の許容範囲 ( ) と関数値の許容範囲( )を選択できます。関数が収束しました。fsolveoptimsetoptions.TolXoptions.TolFun

あなたの場合、関数値の許容誤差とx値の許容誤差の両方が最適化のために満たされています。両方が同時に起こるのは少し驚くべきことです。結果が最適でない場合は、公差を変更する必要があるかどうか、式を間違えていないかどうか、またはたとえば、fminsearch作成時に意図したものであるかどうかを確認する必要がありますfsolve

于 2012-06-23T02:20:41.767 に答える