weixin_40467959
2017-10-07 15:51
采纳率: 0%
浏览 1.6k
已结题

惩罚函数内点法算法索引超出矩阵维度为什么呀 求求求急急急!!!

这个代码我运行后总显示索引超出矩阵维度是为什么呀 求求求急急急!!!

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

function f=fh(x0,h,s,r)%步长的函数 h为步长 s为方向 r为惩罚因子
x1=x0+h*s
f=fun(x1,r)

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=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,f2,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)

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;

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

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

2条回答 默认 最新

相关推荐 更多相似问题