您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 内点法matlab仿真
编程方式实现:1.惩罚函数functionf=fun(x,r)f=x(1,1)^2+x(2,1)^2-r*log(x(1,1)-1);2.步长的函数functionf=fh(x0,h,s,r)%h为步长%s为方向%r为惩罚因子x1=x0+h*s;f=fun(x1,r);3.步长寻优函数functionh=fsearchh(x0,r,s)%利用进退法确定高低高区间,利用黄金分割法进行求解h1=0;%步长的初始点st=0.001;%步长的步长h2=h1+st;f1=fh(x0,h1,s,r);f2=fh(x0,h2,s,r);iff1f2h3=h2+st;f3=fh(x0,h3,s,r);whilef2f3h1=h2;h2=h3;h3=h3+st;f2=f3;f3=fh(x0,h3,s,r);endelsest=-st;v=h1;h1=h2;h2=v;v=f1;f1=f2;f2=v;h3=h2+st;f3=fh(x0,h3,s,r);whilef2f3h1=h2;h2=h3;h3=h3+st;f2=f3;f3=fh(x0,h3,s,r);endend%得到高低高的区间a=min(h1,h3);b=max(h1,h3);%利用黄金分割点法进行求解h1=1+0.382*(b-a);h2=1+0.618*(b-a);f1=fh(x0,h1,s,r);f2=fh(x0,h2,s,r);whileabs(a-b)0.0001iff1f2a=h1;h1=h2;f1=f2;h2=a+0.618*(b-a);f2=fh(x0,h2,s,r);elseb=h2;h2=h1;f2=f1;h1=a+0.382*(b-a);f1=fh(x0,h1,s,r);endendh=0.5*(a+b);4.迭代点的寻优函数functionf=fsearchx(x0,r,epson)x00=x0;m=length(x0);s=zeros(m,1);fori=1:ms(i)=1;h=fsearchh(x0,r,s);x1=x0+h*s;s(i)=0;x0=x1;endwhilenorm(x1-x00)epsonx00=x1;fori=1:ms(i)=1;h=fsearchh(x0,r,s);x1=x0+h*s;s(i)=0;x0=x1;endendf=x1;5.主程序clearclcx0=[2;2];%给定初始点r=1;c=0.1;epson=0.001;x1=fsearchx(x0,0.1,epson);whilenorm(x0-x1)epsonx0=x1;r=r*c;x1=fsearchx(x0,r,epson);enddisp'函数的最优解为'x1运行结果:函数的最优解为x1=1.0475-0.0005
本文标题:内点法matlab仿真
链接地址:https://www.777doc.com/doc-1856275 .html