内点法matlab仿真doc资料

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

编程方式实现:

1.惩罚函数

function f=fun(x,r)

f=x(1,1)^2+x(2,1)^2-r*log(x(1,1)-1);

2.步长的函数

function f=fh(x0,h,s,r)

%h为步长

%s为方向

%r为惩罚因子

x1=x0+h*s;

f=fun(x1,r);

3. 步长寻优函数

function h=fsearchh(x0,r,s)

%利用进退法确定高低高区间,利用黄金分割法进行求解h1=0;%步长的初始点

st=0.001; %步长的步长

h2=h1+st;

f1=fh(x0,h1,s,r);

f2=fh(x0,h2,s,r);

if f1>f2

h3=h2+st;

f3=fh(x0,h3,s,r);

while f2>f3

h1=h2;

h2=h3;

h3=h3+st;

f2=f3;

f3=fh(x0,h3,s,r);

end

else

st=-st;

v=h1;

h1=h2;

h2=v;

v=f1;

f1=f2;

f2=v;

h3=h2+st;

f3=fh(x0,h3,s,r);

while f2>f3

h1=h2;

h2=h3;

h3=h3+st;

f2=f3;

f3=fh(x0,h3,s,r);

end

end

%得到高低高的区间

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);

while abs(a-b)>0.0001

if f1>f2

a=h1;

h1=h2;

f1=f2;

h2=a+0.618*(b-a);

f2=fh(x0,h2,s,r); else

b=h2;

h2=h1;

f2=f1;

h1=a+0.382*(b-a);

f1=fh(x0,h1,s,r);

end

end

h=0.5*(a+b);

4. 迭代点的寻优函数

function f=fsearchx(x0,r,epson)

x00=x0;

m=length(x0);

s=zeros(m,1);

for i=1:m

s(i)=1;

h=fsearchh(x0,r,s);

x1=x0+h*s;

s(i)=0;

x0=x1;

end

while norm(x1-x00)>epson

x00=x1;

for i=1:m

s(i)=1;

h=fsearchh(x0,r,s);

x1=x0+h*s;

s(i)=0;

x0=x1;

end

end

f=x1;

5. 主程序

clear

clc

x0=[2;2]; %给定初始点

r=1;

c=0.1;

epson=0.001;

x1=fsearchx(x0,0.1,epson);

while norm(x0-x1)>epson

x0=x1;

r=r*c;

x1=fsearchx(x0,r,epson) ;

end

disp '函数的最优解为'

x1

运行结果:

函数的最优解为

x1 =

1.0475

-0.0005

相关文档
最新文档