




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、蒙特卡罗方法求解有约束的非线性规划问题的matlab程序首先我们说明一下:观察函数f(x,它恰好可以应用雅克比矩阵来计算得到:clear;syms x1 x2 x3 x4 x5;y=(1+(x1*x2+x3+x42(1/2/(x5+x32(1/2;f=simple(jacobian(y*x1;x2;x3;x4;x5;然后将得到的f表达式前面加上(x1,x2,x3,x4,x5:f=(x1,x2,x3,x4,x5-1/4*x3*(2*x1*x2*x3+x5+3*x32+2*x42*x3/(x5+x32/(x5+x32+(x1*x2+x3+x42(1/2*(x5+x32(1/2/(x1*x2+x3+
2、x42(1/2;作为下面程序中的f即可,已经验证过结果仍然差不多。下面程序中的f仍为原程序所给的f。matlab蒙特卡罗方法程序(相关原理参见附件文献):clear;f=(x1,x2,x3,x4,x5-(x3*(3*x32 + 2*x3*x42 + 2*x1*x2*x3 + x5./(4*(x5 + (x42 + x3 + x1*x2(1/2 + x32/(x32 + x5(1/2*(x32 + x52*(x42 + x3 + x1*x2(1/2;MIN=inf;LIMIT=10000;while LIMIT>0 x(3=4.5*rand+0.5;%将【0,1】
3、区间上的随机数转化到【0.5,5】上的随机数,下面其余数类同 x(4=2*rand+1; x(5=3*rand+1; x(1=4.5*rand+0.5; x(2=4.5*rand+0.5; while x(1+x(22>=1&x(1+x(22<=10 x1=x(1;x2=x(2;x3=x(3;x4=x(4;x5=x(5; temp=f(x1
4、,x2,x3,x4,x5; if temp MIN=temp; x0=x; end; break; end; LIMIT=LIMIT-1; end; MIN,x0 或者clear;f=(x1,x2,x3,x4,
5、x5-(x3*(3*x32 + 2*x3*x42 + 2*x1*x2*x3 + x5./(4*(x5 + (x42 + x3 + x1*x2(1/2 + x32/(x32 + x5(1/2*(x32 + x52*(x42 + x3 + x1*x2(1/2;MIN=inf;LIMIT=10000;while LIMIT>0 x(3=4.5*rand+0.5; x(4=2*rand+1; x(5=3*rand+1; x(1=4.5*rand+0.5; x(2=4.
6、5*rand+0.5; if x(1+x(22>=1&x(1+x(22<=10 x1=x(1;x2=x(2;x3=x(3;x4=x(4;x5=x(5; temp=f(x1,x2,x3,x4,x5; if temp MIN=temp;
7、160; x0=x; end; end LIMIT=LIMIT-1; end; MIN,x0 前者几次模拟计算结果如下:MIN = -0.3003x0 = 4.6885 2.2581 1.4226 2.4956 1.1308MIN = -0.3135x0 = 2.9750
8、 2.2140 1.3397 2.8936 1.0118MIN = -0.3173x0 = 4.9725 2.2098 1.5285 2.7026 1.0338注:源程序如下clear;f=(x1,x2,x3,x4,x5-(x3*(3*x32 + 2*x3*x42 + 2*x1*x2*x3 + x5./(4*(x5 + (x42 + x3 + x1*x
9、2(1/2 + x32/(x32 + x5(1/2*(x32 + x52*(x42 + x3 + x1*x2(1/2;MIN=inf;LIMIT=10000;while LIMIT>0 x(3=4.5*rand+0.5; x(4=2*rand+1; x(5=3*rand+1; x(1=4.5*rand+0.5; x(2=4.5*rand+0.5; while x(1+x(22<1 | x(1+x(22>10 &
10、#160; x(1=4.5*rand+0.5; x(2=4.5*rand+0.5; end; x1=x(1;x2=x(2;x3=x(3;x4=x(4;x5=x(5; temp=f(x1,x2,x3,x4,x5; if temp MIN=temp; x0=x; end;
11、160; LIMIT=LIMIT-1; end; MIN,x0 其中内层while循环表示当x(1+x(22<1 | x(1+x(22>10时,再次令设: x(1=4.5*rand+0.5; x(2=4.5*rand+0.5;重新进行while循环,只有当条件上面条件不满足才完成内层的while循环,接着执行后面的语句。所以内层while循环完全等效于如下if判断:clear;f=(x1,x2,x3,x4,x5-(x3*(3*x32 + 2*x3*x42 + 2
12、*x1*x2*x3 + x5. /(4*(x5 + (x42 + x3 + x1*x2(1/2 + x32/(x32 + x5(1/2*(x32 + x52*(x42 + x3 + x1*x2(1/2;MIN=inf;LIMIT=10000;k=0;while LIMIT>0 x(3=4.5*rand+0.5; x(4=2*rand+1; x(5=3*rand+1; x(1=4.5*rand+0.5; x(2=4.5*rand+0.5; if x(1+x(22<1 | x(1+x(22>10 continue; end; x1=x(1;x2=x(2;x3=x(3;x4=x(4;x5=x(5
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论