| 查看: 1539 | 回复: 1 | |||
| 本帖产生 1 个 程序强帖 ,点击这里进行查看 | |||
li343至尊木虫 (职业作家)
|
[求助]
MATLAB fmincon函数求助已有1人参与
|
||
|
第一次用MATLAB做优化,请教个关于fmincon函数问题 clc;clear xo=[30/1000 30/1000 3/1000 3/1000 2]; lower_bound=[20/1000 20/1000 2/1000 2/1000 1]; upper_bound=[40/1000 40/1000 4/1000 4/1000 3]; yy= fmincon(@mainprogram,xo,[],[],[],[],lower_bound,upper_bound) 上述程序段在计算收敛后停不下来,又再次进入迭代循环,最长试运行了24小时,尤其是当xo、lower_bound和upper_bound取为同一数组时,程序也同样停不下来。但如果直接对mainprogram进行赋值计算时,即mainprogram(xo),程序执行完毕则会自动停止。 mainprogram如下: function optimiziation=mainprogram(x) global media L_evap D_coil_cond=x(1); D_coil_evap=x(2); di_cond=x(3); di_evap=x(4); Area_ratio=x(5); design=[L_evap,D_coil_cond,D_coil_evap,di_cond,di_evap,Area_ratio] Vs=2/1000/1000; RPM=2000; superheat=10; subcool=4; mw_gc=5/1000; mw_evap=3/1000; tw_cond_in=15+273.15; tw_evap_in=15+273.15; di_annulus_cond=50/1000; %D_coil_cond=20/1000 pitch_cond=7/1000; %di_cond=3/1000 do_cond=di_cond+2/1000; k_wall_cond=340; di_annulus_evap=50/1000; %D_coil_evap=20/1000 pitch_evap=7/1000; %di_evap=3/1000 do_evap=di_evap+2/1000; k_wall_evap=340; A_evap=3.14*L_evap*di_evap; A_cond=A_evap*Area_ratio; L_cond=A_cond/(3.14*di_cond); %xxo=[P_disP P_ref_evap_sup P_suc l_cond_sub l_cond_sup l_evap_sup quality_evap_in] xxo= [5.95*100 2*100 1.78*100 0.1 0.1 0.1 0.3];%initial guess of refrigeration cycle variables sol_vector=fsolve(@solver,xxo,[],media,Vs,RPM,superheat,subcool,mw_gc,mw_evap,tw_cond_in,tw_evap_in,di_annulus_cond,D_coil_cond,pitch_cond,do_cond,k_wall_cond,di_cond,L_cond,di_annulus_evap,D_coil_evap,pitch_evap,do_evap,k_wall_evap,di_evap,L_evap) load Q_evap; load Cop_c; optimiziation=-1*Cop_c return |
» 猜你喜欢
孩子确诊有中度注意力缺陷
已经有14人回复
三甲基碘化亚砜的氧化反应
已经有4人回复
请问下大家为什么这个铃木偶联几乎不反应呢
已经有5人回复
请问有评职称,把科研教学业绩算分排序的高校吗
已经有5人回复
2025冷门绝学什么时候出结果
已经有3人回复
天津工业大学郑柳春团队欢迎化学化工、高分子化学或有机合成方向的博士生和硕士生加入
已经有4人回复
康复大学泰山学者周祺惠团队招收博士研究生
已经有6人回复
AI论文写作工具:是科研加速器还是学术作弊器?
已经有3人回复
论文投稿,期刊推荐
已经有4人回复
请问2026国家基金面上项目会启动申2停1吗
已经有5人回复
杜子腾001
金虫 (初入文坛)
知识搬运工工长
- 程序强帖: 1
- 应助: 3 (幼儿园)
- 金币: 1395.3
- 帖子: 28
- 在线: 77.6小时
- 虫号: 2695759
- 注册: 2013-10-02
- 性别: GG
- 专业: 工程热物理与能源利用
【答案】应助回帖
★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
li343: 金币+100, ★★★很有帮助, 写了这么多,难为你了!呵呵,欢迎交流。 2016-01-01 10:25:11
nono2009: 金币+5, 程序强帖+1, 鼓励应助 2016-01-02 08:24:39
li343: 金币+100, ★★★很有帮助, 写了这么多,难为你了!呵呵,欢迎交流。 2016-01-01 10:25:11
nono2009: 金币+5, 程序强帖+1, 鼓励应助 2016-01-02 08:24:39
|
fmincon 函数适用于求解非线性优化问题,根据matlab中的文档提示,其用法如下: X = fmincon(FUN,X0,A,B,Aeq,Beq,LB,UB) 其中的FUN是一个函数的句柄。 但在你调用的函数fmincon中,FUN应该为mainprogram 但是从mainprogram的内容来看,你中间又调用了一个用于求解非线性方程的fsolve函数,求解的方程的函数名为slover,从你给的程序上看,并没有这个函数,所以我没法复现你说的现象。 接下来说一下问题。 你到底想要求解哪些变量?这个东西其实单纯读程序,会比较耗时间,何况你的程序并不完整。 我根据自己理解,大概说一下你想要用这个程序干什么,然后回答你上面提到的问题,最后说一下我的建议。 如果没猜错的话,你的问题属于一个制冷循环问题。 明面上(或者从函数使用的功能上看),你想优化这些参数:D_coil_cond,D_coil_evap,di_cond,di_evap,Area_ratio 根据制冷循环原理啥的,你把包含这些参数的方程组写在了一个名叫solver的函数里面。 但是solve里面还有一些参数,它们是常量或者其它变量或者初始条件,你希望能够随时改变它,所以你把这些参数赋值并保存在一个名叫mainprogram函数里面,并希望通过使用fsolve函数来求解slover中的方程组。 这里面有一些很矛盾的地方。 fmincon 是一个求解优化问题的函数。正常使用的话,FUN应该是一个含参数的函数。 但显然mainprogram函数做不到,至于原因,简单除暴地讲,fsolve是用来求数值解的,不能得到符号解,因此mainprogram不可能成为一个含参数的函数传递给fmincon;另外,求符号解是另一个函数solve. 但即使你用了符号求解函数,也没必要,并且大错特错。 mainprogram最后给optimization赋值我也是没看懂啥意思。 我不太清楚你的想法,感觉其中有很多矛盾的地方,如果你能清楚地说一下你的求解意图应该会很好。 然后分析一下为什么你直接代入x0到mainprogram能得到解。 当你把具体的x0值代入mainprogram后,你所要求解的是一个包含了其它参数的方程solver,这个时候fsolve是能够求解的,但fsolve求解的是数值解,不能求出符号解。 至于为啥你的程序会死循环,抱歉,真不知道,我没有完整的程序,没法复现相关过程。 最后,我说一下求解建议。 a)如果你想求解优化问题,优化这些参数:D_coil_cond,D_coil_evap,di_cond,di_evap,Area_ratio,你可尝试着把fsolve去掉,使mainprogram成为一个含上面五个参数的函数。当然后面一些赋值什么的我没看懂,应该可以去掉。 b)如果你想求解方程组,直接使用fsolve就行,别用啥fmincon。 c)若果你想求解优化问题,优化这些参数:D_coil_cond,D_coil_evap,di_cond,di_evap,Area_ratio,在使mainprogram成为一个含上面五个参数的函数之后,你发现还有一些参数也是变量,但是你可以赋予这些参数给定值,那么建议你使用外部循环、内部使用a的优化编程过程。 差不多就这么些了。希望能帮到你。 对了,如果有用,别忘了把金币给我 ![]() 还有,我也是学的东西和制冷循环有关系,本科学的就是空调、供暖专业,想要交流也可以。 |

2楼2015-12-22 20:51:41













回复此楼