24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1708  |  回复: 12
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

我无耻又无赖

木虫 (著名写手)

[求助] matlab全局优化参数已有2人参与

小弟在用matlab优化参数的时候遇到了一个问题,我用的是fmincon函数,但是因为选不到合适的初值所以得到的结果不是很满意,所以想着用全局优化的算法来试一下,奈何不太会,希望论坛里的大佬们看一下能不能解决这个问题。我直接把程序复制到下面了
clear all
clc
data=[288.05 0.000257 0.3003
293.05 0.000274 0.3003
298.2 0.000281 0.3003
303.25 0.000294 0.3003
308.15 0.000305 0.3003
313.25 0.000326 0.3003
318.2 0.000345 0.3003
323.15 0.00039 0.3003
288.05 0.000493 0.3995
293.05 0.00051 0.3995
298.2 0.000532 0.3995
303.25 0.000562 0.3995
308.15 0.00061 0.3995
313.25 0.000641 0.3995
318.2 0.000698 0.3995
323.15 0.000845 0.3995
288.05 0.000877 0.501
293.05 0.00092 0.501
298.2 0.00099 0.501
303.25 0.00115 0.501
308.15 0.00127 0.501
313.25 0.00139 0.501
318.2 0.00157 0.501
323.15 0.00189 0.501
288.05 0.0016 0.5998
293.05 0.00172 0.5998
298.2 0.00196 0.5998
303.25 0.00232 0.5998
308.15 0.00252 0.5998
313.25 0.00281 0.5998
318.2 0.0032 0.5998
323.15 0.00358 0.5998
288.05 0.00293 0.7009
293.05 0.00309 0.7009
298.2 0.00357 0.7009
303.25 0.00424 0.7009
308.15 0.00474 0.7009
313.25 0.00535 0.7009
318.2 0.00611 0.7009
323.15 0.00711 0.7009
288.05 0.0048 0.8003
293.05 0.00548 0.8003
298.2 0.00638 0.8003
303.25 0.0078 0.8003
308.15 0.00863 0.8003
313.25 0.00988 0.8003
318.2 0.0112 0.8003
323.15 0.0128 0.8003
288.05 0.0103 0.8999
293.05 0.0112 0.8999
298.2 0.0121 0.8999
303.25 0.014 0.8999
308.15 0.0152 0.8999
313.25 0.0173 0.8999
318.2 0.0193 0.8999
323.15 0.022 0.8999];

T=data(:,1);        
xexp=data(:,2);
w=data(:,3);

deltaH=46266;%熔融焓
R=8.314;
Tm=532.34;%熔点
yexp=exp((deltaH./(R.*T)).*(T./Tm-1)-log(xexp));

n=size(T,1);
k0=[-3125.70317518255,-2378.98766584565,5092.47952427953,-718.563001024490,-1495.43799248924,-1965.61341412590,0.899991420305235,0.100010845691102,0.219058309329965];
lb=[-inf -inf -inf -inf -inf -inf 0.1 0.1 0.1];
ub=[inf inf inf inf inf inf 0.9 0.9 0.9];
[k,fval,flag] = fmincon(@myfun,k0,[],[],[],[],lb,ub,[],[],xexp,yexp,T,w,n,R);
display(fval);
display(k);

function f = myfun(k,xexp,yexp,T,w,n,R)
%a12=k(1)
%a21=k(2)
%b12=k(3)
%b21=k(4)
%c12=k(5)
%c21=k(6)
%o=k(7)
%p=k(8)
%q=k(9)
tao12=k(1)./(R*T);
tao21=k(2)./(R*T);
tao13=k(3)./(R*T);
tao31=k(4)./(R*T);
tao23=k(5)./(R*T);
tao32=k(6)./(R*T);
G12=exp(-k(7).*tao12);
G21=exp(-k(7).*tao21);
G23=exp(-k(8).*tao23);
G32=exp(-k(8).*tao32);
G13=exp(-k(9).*tao13);
G31=exp(-k(9).*tao31);
x2=(1-xexp).*w;
x3=(1-xexp).*(1-w);
temp1=x2.*G21+x3.*G32;
temp2=tao21.*G21.*x2+tao31.*G31.*x3;
temp3=(xexp+x2.*G21+x3.*G31).^2;
temp4=tao12.*G12.*(x2.^2);
temp5=G12.*G32.*x2.*x3.*(tao12-tao32);
temp6=(x2+xexp.*G12+x3.*G32).^2;
temp7=tao13.*G13.*(x3.^2);
temp8=G13.*G23.*x2.*x3.*(tao13-tao23);
temp9=(x3+x2.*G23+xexp.*G13).^2;
lngamma1=((temp1.*temp2)./temp3)+((temp4+temp5)./temp6)+((temp7+temp8)./temp9);
ycal=exp(lngamma1);
f=100*sum(abs((yexp-ycal)./(yexp)))./n;
end
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hzlhm

至尊木虫 (著名写手)

【答案】应助回帖

★ ★
感谢参与,应助指数 +1
独孤神宇: 金币+2, 鼓励交流 2021-09-16 20:51:23
控制误差的表达式,
f=100*sum(abs((yexp-ycal)./(yexp)))./n;
可能有问题
因为控制误差的表达式不同,得到的结果也不同。

» 本帖已获得的红花(最新10朵)

QQ:2120156492
3楼2021-09-15 22:37:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 13 个回答

曾经落伍了

铁杆木虫 (职业作家)

★ ★
独孤神宇: 金币+2, 鼓励交流 2021-09-15 08:37:52
用遗传算法试试

发自小木虫Android客户端
2楼2021-09-15 00:45:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

我无耻又无赖

木虫 (著名写手)

送红花一朵
引用回帖:
3楼: Originally posted by hzlhm at 2021-09-15 22:37:40
控制误差的表达式,
f=100*sum(abs((yexp-ycal)./(yexp)))./n;
可能有问题
因为控制误差的表达式不同,得到的结果也不同。

主要的目的是让yexp和ycal更接近,所以用了个相对误差的衡量方法,之前拟合过挺多数据,总的相对误差达到5以下差不多就能用了,现在的主要问题就是用fmincon函数,初值选取的不合适的话,相对误差10以下都很难达到。
4楼2021-09-15 23:19:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

我无耻又无赖

木虫 (著名写手)

引用回帖:
2楼: Originally posted by 曾经落伍了 at 2021-09-15 00:45:41
用遗传算法试试

谢谢,我试一试
5楼2021-09-15 23:26:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
信息提示
请填处理意见