|
看完有点儿感想。
本来不想管这个帖子,参数传递的问题在几个论坛,单单是不成器的我就总共说过不下十次,实在没兴趣重复,但是既然有引用我的帖子的人,我想我就有责任应该说多两句:
首先半开玩笑说一句,关于参数传递的问题是论坛里好几个顶尖高手呕心沥血总结出来的,都在我给的链接里(当然我自己做的不算),MATLAB中参数传递的方法应该一网打尽。其中内容自我拜读至今接近一年,里面很多方法我还没能完全理解吃透和一一尝试,只能一知半解套用解些问题,我看楼主从别人给出链接到回帖断定我给的参数传递的方法和你的问题“不一样”的时间一共两分钟!我只能说,你实在太强了!可是后面看你甚至连fsolve的正确写法都不会,不客气地说,我看你离解决参数传递的问题还差着老远距离,现在解决类似问题已经属于不会走就要飞的情况了。
下面是认真说的话:
用这样草草下结论就断定什么是“行”什么是“不行”的方式去学习,个人感觉非常不合适,建议供你参考,下面是你这个问题的解决办法,两个函数存成两个M文件,运行fangchengqiugen.m
但是提醒一下:你的数学模型应该有点儿问题,求解出现迭代超限的警告信息,换句话说,由于exitflag=0,所以有可能没有搜索到可行解。
- function F=c_w(x,t1)
- % x=[p2,t3,h1,h2,t,m,v,V,p1,t2]
- F=[2010*((x(1)/x(9))^0.07-1)-(x(4)-x(3));...
- x(9)-exp(16.1-2740/(t1+273.15));...
- x(1)-exp(16.1-2740/(x(10)+273.15));...
- x(3)-(1461.5+1.125*t1-0.0103*t1*t1);...
- x(4)-(1461.5+1.125*x(10)-0.0103*x(10)*x(10));...
- x(8)-(0.018-0.003*((x(1)/x(9))^1.2-1));...
- x(7)-(0.2854-0.00826*t1+0.0000776*x(10)*x(10));...
- x(6)-x(8)/x(7);...
- (x(10)-30)*12*5.6-(x(4)-(200+4.599*x(2)+0.004177*x(2)*x(2)))*x(6);...
- (200+4.599*x(2)+0.004177*x(2)*x(2))*x(6)+(15250-x(6))*(200+4.599*t1+0.004177*t1*t1)-((200+4.599*x(5)+0.004177*x(5)*x(5)))*15250];
- =======================================================
- function fangchengqiugen
- clc
- x0=[35,1001,1488,1488,35,0.197,0.0914,0.018,1350,1350];
- t1=x0(5);
- xx=fsolve('c_w',x0,[],t1);
- t1=xx(5);
- count=0;
- x=[];
- while xx(5)>8|count==200
- [xx,fval,exitflag,output]=fsolve('c_w',xx,[],t1)
- if exitflag>=0
- t1=xx(5);
- x=[x;t1];
- else
- disp('未搜索到可行解,程序跳出!')
- return
- end
- end
- plot(1:length(x),x)
- hold on
- plot(1:length(x),x,'b*')
复制代码 ==============================================
MATLAB首轮计算结果:
xx =
Columns 1 through 2
39.382493295041 18592.7261877628
Columns 3 through 4
1488.00039845052 1500.37608066494
Columns 5 through 6
33.9836283943674 -0.0508299898796435
Columns 7 through 8
0.00282348863506527 0.017996577805948
Columns 9 through 10
1350.00076083419 1328.99038366648
=================================================
1stopt所得首轮计算结果:
"Type your title here"
====== 结果 ======
迭代数: 3134
计算用时(时:分:秒:毫秒): 00:00:25:437
计算中止原因: 达到收敛判定标准
优化算法: 最大继承法
函数表达式 1: 2010*((x1/x9)^0.07-1)-(x4-x3)-(0)
2: x9-exp(16.1-2740/(35+273.15))-(0)
3: x1-exp(16.1-2740/(x10+273.15))-(0)
4: x3-(1461.5+1.125*35-0.0103*35*35)-(0)
5: x4-(1461.5+1.125*x10-0.0103*x10*x10)-(0)
6: x8-(0.018-0.003*((x1/x9)^1.2-1))-(0)
7: x7-(0.2854-0.00826*35+0.0000776*x10*x10)-(0)
8: x6-x8/x7-(0)
9: (x10-30)*12*5.6-(x4-(200+4.599*x2+0.004177*x2*x2))*x6-(0)
10: (200+4.599*x2+0.004177*x2*x2)*x6+(15250-x6)*(200+4.599*35+0.004177*35*35)-((200+4.599*x5+0.004177*x5
*x5))*15250-(0)
目标函数值:
273.711507463666
x1: 0.00010611700664357
x2: 31.208759752968
x3: 1488.25749995189
x4: 117.795709620093
x5: 34.9780323671581
x6: 88.6486187515555
x7: 0.000236889728871927
x8: 0.0209999472611623
x9: 1350.49505693766
x10: -273.148883399559
====== 计算结束 ======
==========================================
可以看出计算结果是有差别的,原因不祥,不过已经超出了本帖的讨论范围。
=================================================
下面是MATLAB 最终的计算结果:
xx =
Columns 1 through 2
39.445843073854 19333.655928724
Columns 3 through 4
1488.00041505455 1500.37581220236
Columns 5 through 6
9.04605541377359 -0.0546256611394763
Columns 7 through 8
0.0032631083705612 0.0179224976025569
Columns 9 through 10
1350.00072217057 1208.06501658615
==============================================
其实即使把迭代终止计算条件设为t=8照样可以,因为t值几乎线性下降。剩下就是你的工作了。言止于此,good luck! |
-
评分
-
1
查看全部评分
-
|