?? fr.m
字號(hào):
function [fm xm k]=fr(y,x,x0)
%FR共軛梯度算法求極小值。y為給定函數(shù),x為函數(shù)變量,x0為搜索起始點(diǎn)
%返回值fm為極小值,xm為極小值點(diǎn)
syms t a b c d n k aa
y=a^2+4*b^2+c^2
x0=[1 0 1]'
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
n=length(x0);
y0=subs(y,findsym(y),x0); %計(jì)算g0,y0
g=jacobian(y)';
g0=subs(g,findsym(g),x0)
p0=-g0;
k=0;
x1=x0+t*p0
y1=subs(y,findsym(y),x1)
[mi ma]=regdef(y1,t,0,1)
[fm tm]=golddiv(y1,t,mi,ma); %求x1點(diǎn),,
x1=subs(x1,findsym(x1),tm)
y1=subs(y1,findsym(y1),tm) %y1
g1=subs(g,findsym(g),x1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
k1=norm(g0); %梯度的模
k2=norm(x1-x0)/(norm(x0)+1); %自變量x的變化度
k3=abs(y1-y0)/(abs(y0)+1); %函數(shù)值y變化度
while((k1>=1)||(k2>=1e-5)||(k3>=1e-5))
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5
if(k>n)
k
bresk;
end
aa=((g1')*g1)/((g0')*g0)
p=-g1-aa*p0
if (abs(p'*g1)<1e-3)
p0=-g;
else
if(p'*g1>0)
p0=-p
k=k+1
else
p0=p
k=k+1
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
x0=x1
y0=y1
g0=g1
x1=x0+t*p0
y1=subs(y,findsym(y),x1)
[mi ma]=regdef(y1,t,0,1)
[fm tm]=golddiv(y1,t,mi,ma) %求x1點(diǎn),,
x1=subs(x1,findsym(x1),tm)
y1=subs(y1,findsym(y1),tm) %y1
g1=subs(g,findsym(g),x1)
k1=norm(g0); %梯度的模
k2=norm(x1-x0)/(norm(x0)+1); %自變量x的變化度
k3=abs(y1-y0)/(abs(y0)+1);
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fm=y1
xm=x1
end
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -