24小时热门版块排行榜    

查看: 701  |  回复: 0

ian200221

新虫 (小有名气)

[求助] fminsearch 分段隐函数参数拟合的问题

1. 需要估计参数的函数为分段函数,且为隐函数。
2. 已知实验数据v=[0 0.3 0.4 0.5 0.6 0.7 1],s=s=[0 0.01238 0.0385 0.0366 0.0188 0.009 0.0012], 拟合函数里面的四个参量p(1),p(2),p(3),p(4).
3.我自己写的程序
m文件为:function E=myfun(p,Z)
v=[0.3 0.4 0.5 0.6 0.7 1];
s=[0.01238 0.0385 0.0366 0.0188 0.009 0.0012];
if (v(:,1)<1-1/(1+p(2))^3)
Z=2*(p(1)./0.0012).*v(:,1).*(1+(s./(1-(1/(1+p(2))^3))).^p(3)-(v./(1-(1/(1+p(2))^3))).^p(4))./(3-v)-s./0.0012;
else if (v(:,1)>=1-1/(1+p(2))^3)
Z=(1-(1+p(2))^3.*(1-s)).*(1-v./0.0012)./(v./0.0012+0.0865.*(1-v./0.0012))+(1+p(2))^3.*(1-s).*(1-(2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012))./((2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012)+0.0865*(1-(2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012)))+(1-(1+p(2))^3.*(1-s)).*(1-(v./0.0012))./((v./0.0012)+0.0865.*(1-v./0.0012))+(1+p(2))^3.*(1-s).*(1-(2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012))./((2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012)+0.0865*(1-(2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012)))+(1-(1+p(2))^3.*(1-s)).*(1-(v./0.0012))./((v./0.0012)+0.827.*(1-v./0.0012))+(1+p(2))^3.*(1-s).*(1-(2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012))./((2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012)+0.827*(1-(2+(1/(1+p(2)))^3)./(2-2*(1/(1+p(2)))^3)*(0.0012./p(1)).*(v./0.0012)));
    end
end
E=sum((Z).^2);
运行程序:
p0=[0.14 0.31 2.1 0.0002];
opt=optimset('TolFun',1e-10,'TolX',1e-10);
[p,fval,exitflag,output]=fminsearch(@myfun,p0,opt)
4.存在的问题:
(1)隐函数的目标函数我直接设定为此隐函数可以吗?
(2)计算结果一直不对,我分析是m文件调用数据时只调用了x,v的第一组数据,m文件哪里有问题?
回复此楼

» 猜你喜欢

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 ian200221 的主题更新
信息提示
请填处理意见