共轭梯度法的MATLAB程序

作者&投稿:竺俊 (若有异议请与网页底部的电邮联系)
什么是共轭梯度法?求matlab程序~

共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一。 共轭梯度法最早是又Hestenes和Stiefle(1952)提出来的,用于解正定系数矩阵的线性方程组,在这个基础上,Fletcher和Reeves(1964)首先提出了解非线性最优化问题的共轭梯度法。由于共轭梯度法不需要矩阵存储,且有较快的收敛速度和二次终止性等优点,现在共轭梯度法已经广泛地应用与实际问题中。 共轭梯度法是一个典型的共轭方向法,它的每一个搜索方向是互相共轭的,而这些搜索方向d仅仅是负梯度方向与上一次迭代的搜索方向的组合,因此,存储量少,计算方便

尝试到数学中国论坛看看吧,百度数学中国第一就是了,里面的matlab的资料还是不错的!

共轭梯度法
function f=conjugate_grad_2d(x0,t)
%please input this:conjugate_grad_2d([2,2],0.05)
x=x0;
syms xi yi a
f=xi^2-xi*yi+3*yi^2;
fx=diff(f,xi);
fy=diff(f,yi);
fx=subs(fx,{xi,yi},x0);
fy=subs(fy,{xi,yi},x0);
fi=[fx,fy];
count=0;
while double(sqrt(fx^2+fy^2))>t
s=-fi;
if count<=0
s=-fi;
else
s=s1;
end
x=x+a*s;
f=subs(f,{xi,yi},x);
f1=diff(f);
f1=solve(f1);
if f1~=0
ai=double(f1);
else
break
x,f=subs(f,{xi,yi},x),count
end
x=subs(x,a,ai);
f=xi^2-xi*yi+3*yi^2;
fxi=diff(f,xi);
fyi=diff(f,yi);
fxi=subs(fxi,{xi,yi},x);
fyi=subs(fyi,{xi,yi},x);
fii=[fxi,fyi];
d=(fxi^2+fyi^2)/(fx^2+fy^2);
s1=-fii+d*s;
count=count+1;
fx=fxi;
fy=fyi;
end
x,f=subs(f,{xi,yi},x),count


新洲区19270498992: 共轭梯度法的MATLAB程序
守贝博可: 共轭梯度法 function f=conjugate_grad_2d(x0,t) %please input this:conjugate_grad_2d([2,2],0.05) x=x0; syms xi yi a f=xi^2-xi*yi+3*yi^2; fx=diff(f,xi); fy=diff(f,yi); fx=subs(fx,{xi,yi},x0); fy=subs(fy,{xi,yi},x0); fi=[fx,fy]; count=0; while double(sqrt(fx^2+fy^2))>t s...

新洲区19270498992: Matlab程序 -
守贝博可: 共轭梯度法莫外乎就是套公式,下面是我编写的程序,希望对你有帮助 %输入格式:optx=cg([0;0],10^(-2)) clc; A = [6 3;3 2];%系数矩阵 b = [0;-1];%右端项 p_{1} = [0;0]; % 向量的下标表示方法为p_{1} a(1) = 0; x_{2} = x0; r_{2} = b-A*x_{2}; k = ...

新洲区19270498992: 最优化二次函数的共轭梯度法的matlab程序 -
守贝博可: 通常最优化的教材后面都会附有程序吧 %Function of the CG method %What should be inputed are the start point 'xstart', % the matrix A,vector b and tol. % It would give the solution x ,iterations and the iterative time function [time,k,x]=normCG(xstart,...

新洲区19270498992: Matlab 共轭梯度法求解任意线性方程组!求详细解释如下程序
守贝博可: 你这样问不解决问题的,共轭梯度法虽然是最简单的Krylov子空间方法,但是对一般的本科生而言仍然比较困难,你得找本教材来慢慢看,把整个推导过程自己算一遍,这样才能搞明白程序的原理.

新洲区19270498992: 共轭梯度法的调用函数在Matlab里是什么? fminunc是不是共轭梯度法的调用格式 -
守贝博可: 共轭梯度法 function f=conjugate_grad_2d(x0,t)%please input this:conjugate_grad_2d([2,2],0.05) x=x0; syms xi yi a f=xi^2-xi*yi+3*yi^2; fx=diff(f,xi); fy=diff(f,yi); fx=subs(fx,{xi,yi},x0); fy=subs(fy,{xi,yi},x0); fi=[fx,fy]; count=0; while double(sqrt(fx^2+fy^2))>t s...

新洲区19270498992: 求高手帮忙用MATLAB编下共轭梯度法求解f(x)=100*(x2 - x1^2)^2+(1 - x1)^2 -
守贝博可:

新洲区19270498992: matlab 程序 -
守贝博可: 1、for i=1:6 den(i,:)= 这两行决定den有6行,,[1 2*zeta(i) 1];决定每行3个元素,所以是6*3的.2、y=zeros(length(t),4);和impulse这个函数有关.只是预定义而已3、 den(i,:) 和 y(:,i)分别表示den的第i行和y的第i列 , :表示整行整列 PS:den=zeros(6,3); y=zeros(length(t),4); 都是事先分配内存空间,以提高运算速度,小程序不定义也无妨.

新洲区19270498992: 如何用共轭梯度法求解约束最小二乘问题 -
守贝博可: t = [0.20711 0.99391 0.41643 -0.74095 -0.87009]';%% 方法1:直接使用MATLAB的伪逆(eye(5) + diag(-ones(4, 1), 1))\t%% 方法2:自己写最小二乘问题f = @(x)sum((x-circshift(x, -1) - t).^2);x = fsolve(f, zeros(5, 1))

新洲区19270498992: 求对称正定矩阵的共轭梯度法matlab代码 -
守贝博可: 共轭梯度法是介于最速下降法与牛顿法之间的一个方法,它仅需利用一阶导数信息,但克服了最速下降法收敛慢的缺点,又避免了牛顿法需要存储和计算Hesse矩阵并求逆的缺点,共轭梯度法不仅是解决大型线性方程组最有用的方法之一,也是解大型非线性最优化最有效的算法之一. 共轭梯度法最早是又Hestenes和Stiefle(1952)提出来的,用于解正定系数矩阵的线性方程组,在这个基础上,Fletcher和Reeves(1964)首先提出了解非线性最优化问题的共轭梯度法.由于共轭梯度法不需要矩阵存储,且有较快的收敛速度和二次终止性等优点,现在共轭梯度法已经广泛地应用与实际问题中.

新洲区19270498992: 最优化Goldstein算法确定步长的最速下降法,matlab怎么编 -
守贝博可: 1 无约束非线性最优化问题常用算法:梯度法(最速下降法)、共轭梯度法、变尺度法和步长加速法.其中,前三个要用到函数的一阶导数或二阶导数,适用于函数表达式导数存在且求导简单的情况,而步长加速法则相反,适用于函数表达示复杂,甚至无解析表达式,或导数不存在情况.2 约束非线性最优化问题常用算法:按照是否化成无约束问题可分为 可行方向法、制约函数法(外点法和内点法),其中内点法适用于目标函数在可行域外性质复杂情况,外点法则相反.后者根据罚函数或障碍函数的构造不同,又有不同的变形.

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网