24小时热门版块排行榜    

CyRhmU.jpeg
查看: 1538  |  回复: 1
本帖产生 1 个 程序强帖 ,点击这里进行查看
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

杜子腾001

金虫 (初入文坛)

知识搬运工工长

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ...
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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 li343 的主题更新
信息提示
请填处理意见