我使用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);发布于 2012-06-23 10:20:42
有什么问题吗?
在执行优化时(例如,找到值A以便function_1_5_3变得非常小),您需要定义您认为好的解决方案。等待几天是没有意义的,因为eps会修改参数,以勉强维持解决方案中的一小部分改进。
有几种常见的启发式方法可以识别“足够好”的解决方案,例如,如果x值不再有很大变化,或者如果函数值不再有很大变化。使用fsolve的options参数可以使用optimset设置值,您可以选择未知数中的公差(options.TolX)以及函数值中的公差(options.TolFun),即“足够小”以认为函数已收敛的变化量。
在您的情况下,函数值的公差和x值的公差都满足优化。令人有点惊讶的是,这两种情况会同时发生。如果结果不是最优的,您应该检查是否应该修改公差,您是否在公式中犯了错误,或者您在编写fsolve时是否意味着fminsearch。
https://stackoverflow.com/questions/11165655
复制相似问题