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

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

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

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条回答 默认 最新

  • devmiao 2017-10-08 04:40
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 ensp的问题(需要各个路由器命令)
  • ¥15 Matlab怎么求解含参的二重积分?
  • ¥15 苹果手机突然连不上wifi了?
  • ¥15 cgictest.cgi文件无法访问
  • ¥20 删除和修改功能无法调用
  • ¥15 kafka topic 所有分副本数修改
  • ¥15 小程序中fit格式等运动数据文件怎样实现可视化?(包含心率信息))
  • ¥15 如何利用mmdetection3d中的get_flops.py文件计算fcos3d方法的flops?
  • ¥40 串口调试助手打开串口后,keil5的代码就停止了
  • ¥15 电脑最近经常蓝屏,求大家看看哪的问题