障碍函数 matlab,求助,Matlab单个自定义函数运行无错,但被调用时会出错

我在做毕业论文时,调试程序时,也遇到了与楼主相类似的问题,我把代码贴出来:各位高手大侠看看点评一下:

function [xmin,funval]=TR(fun,x0,delta0,x)

delta=delta0;

eps=1.0e-4;

n=length(x0);

H=eye(n);

mu=0.25;

yita=0.75;

normg=1;

while normg>eps

fx=subs(fun,x,x0);

gradfun=jacobian(fun,x);

g=subs(gradfun,x,x0);%g为行向量

normg=norm(g);

[s,fs]=trustP(fun,g,H,delta,x,s0);%s应该为行向量

x1=x0+s;%x1为列向量

fx1=subs(fun,x,x1);

rho=(fx-fx1)/(-fs);

if rho>yita

x0=x0+s;%x0为列向量

else

x0=x0;

end

if rho<=mu

delta=0.5*delta;

else

if rho>=yita

delta=2*delta;

else

delta=delta;

end

end

g1=subs(gradfun,x,x1);%g为行向量1

y=g1-g;%y为行向量

y=y'; %ye为列向量

dyT=y';%dyT为行向量

dsT=s';%dsT为行向量

A=s*dsT;

B=H*y*dyT*H;

a=dsT*y;

b=dyT*H*y;

H=H+A/a+B/b;

end

xmin=x0;

funval=subs(fun,x,xmin)

end

function [s,fs]=trustP(fun,g,H,delta,x,s0)

epsi=1.0e-4;

r0=8;

beta=0.5;

dxT=x';

B1=x*H*dxT;

c=g*dxT;

x0=s0;

fx=subs(fun,x,x0);

sfun=fx+c+B1;%信赖域子问题函数

N=length(x);

qfun=0;

for k=1:N

qfun=qfun+x(k)^2;

end

sqfun=sqrt(qfun);

cfun=delta-sqfun;%罚函数

tol=1;

while tol>epsi

pfun=r0*cfun;

gfun=sfun+pfun;%障碍函数

[s1,sf]=NT(gfun,x,s0)

cf=subs(cfun,x,s1);

tol=r0*cf;

r0=r0*beta;

end

s=s1;

fs=subs(fun,x,s);

end

unction [s1,sf]=NT(gfun,x,s0)

eps=1.0e-4;

tol=1;

s0=s0';%s0为列向量

while tol>eps

gradf=jacobian(gfun,x)

jacf=jacobian(gradf,x)

v=subs(gradf,x)

tol=norm(v);

pv=subs(jacf,x,s0);%运行到此处时程序就报错了

p=-inv(pv)*v';

ss1=s0+p;

s0=ss1;

end

s1=ss1;

sf=subs(fun,x,s1);

end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值