⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fr.m

📁 FR共轭梯度算法求极小值。y为给定函数
💻 M
字号:
function [fm xm k]=fr(y,x,x0)
%FR共轭梯度算法求极小值。y为给定函数,x为函数变量,x0为搜索起始点
%返回值fm为极小值,xm为极小值点
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);    %计算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点,,
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);   %函数值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点,,
      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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -