24小时热门版块排行榜    

查看: 2323  |  回复: 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的回帖

我无耻又无赖

木虫 (著名写手)

送红花一朵
引用回帖:
7楼: Originally posted by dingd at 2021-09-16 22:13:07
如果目标函数是:f=100*sum(abs((yexp-ycal)./(yexp)))./n
Objective Function (Min.): 1.69202022605523
k1: -3939.42871188215
k2: 10917.2246492583
k3: 25148.0927593124
k4: 70773.8809002039
k5: 12844 ...

老师好,您的结果也是通过设置全局变量得到的吗,我刚才又试了下,第一个目标函数的值到5点多就降不下来了
9楼2021-09-17 13:11:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 13 个回答

曾经落伍了

铁杆木虫 (职业作家)

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

发自小木虫Android客户端
2楼2021-09-15 00:45:41
已阅   回复此楼   关注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的回帖

我无耻又无赖

木虫 (著名写手)

送红花一朵
引用回帖:
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的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[基金申请] 我的国基提前知道中了,可是同事的操作让我实在接受不了,怎么会有这样的人 +11 家与远方 2026-08-10 16/800 2026-08-16 10:28 by ray43
[精细化工] 招聘 金属平磨液,抛光液研发工程师 +3 小天0311 2026-08-14 3/150 2026-08-16 07:31 by H9PLUS
[基金申请] 时间戳又变了8-15 +12 archvillain 2026-08-15 23/1150 2026-08-15 20:47 by foyo404
[基金申请] filecode=后面第一个是大写字母 +6 wangze12014 2026-08-14 7/350 2026-08-15 20:12 by gltch
[基金申请] filecode +8 cratir 2026-08-14 12/600 2026-08-15 18:08 by zyfgau
[基金申请] 哪位老哥知道今年的国自然具体哪一天放榜? +7 Ldrop2023 2026-08-13 7/350 2026-08-15 15:57 by mzhh2000
[基金申请] 各位道友,我要去昆明玩几天,回来见。 +7 Tide man 2026-08-14 8/400 2026-08-15 01:11 by arzu_hma
[硕博家园] 读博的好处 +4 lnee 2026-08-11 4/200 2026-08-14 10:20 by ahsoarli
[基金申请] filecode +15 documentary 2026-08-10 17/850 2026-08-14 10:08 by kissu88
[文学芳草园] 阿姨 +4 汪汪锅 2026-08-09 4/200 2026-08-13 19:43 by arzu_hma
[基金申请] 静等基金结果 +8 gjjjzhong 2026-08-10 21/1050 2026-08-13 17:56 by 且听虎啸
[基金申请] 重要来源:本周末出结果 +10 瞬息宇宙 2026-08-12 10/500 2026-08-13 15:46 by likettle
[基金申请] 分享一下我之前已中青C的计划书的filecode +4 布布和一二 2026-08-11 5/250 2026-08-13 12:56 by cratir
[基金申请] 结合人工智能,周易传统文化,filecode打分制来了,3分以上希望很大。 +3 Tide man 2026-08-12 4/200 2026-08-13 08:35 by ZJTJZ
[基金申请] 2019年青年基金涵评意见,大家看看几个A,几个B? +11 Tide man 2026-08-11 11/550 2026-08-13 07:35 by 撸猫猫
[基金申请] 帮忙看看fileCode +7 wwncly 2026-08-10 13/650 2026-08-11 19:36 by 冰心玉壶晴
[基金申请] 为什么网上很多人说本周 12号出结果 +6 瞬息宇宙 2026-08-10 7/350 2026-08-11 19:25 by Tide man
[基金申请] 确定了,国自然21号放榜 +6 布布和一二 2026-08-10 7/350 2026-08-10 19:15 by 2000zf36392
[基金申请] 国自然结果 +4 Vierhys 2026-08-10 8/400 2026-08-10 15:06 by Vierhys
[基金申请] 据悉今年马上要出结果了 +7 瞬息宇宙 2026-08-10 8/400 2026-08-10 12:42 by Vivilian
信息提示
请填处理意见