请问有人知道共轭梯度法的FR,PRP,HS三个算法的Matlab程序吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请问有人知道共轭梯度法的FR,PRP,HS三个算法的Matlab程序吗?相关的知识,希望对你有一定的参考价值。
如题...感激不尽!
%共轭梯度法 FR% G为对称正定矩阵,X是初始点,e为精度
%a是精确线搜索步长
function [m2,a,d,X,g1,f1] = conjgrad(G,b,c,X,e)
n=length(G);
if n==2
format long e %rat
syms x1 x2
f=1/2*[x1,x2]*G*[x1;x2]+b'*[x1;x2]+c;
g=[diff(f,x1);diff(f,x2)];
g1=subs(subs(g,x1,X(1,1)),x2,X(2,1));
d=-g1;
a=-(d'*g1)/(d'*G*d);% a=-((X(:,1)'*G*d+b'*d)/(d'*G*d)); a=g1(:,1)'*g1(:,1)/(d(:,1)'*G*d(:,1));
X(:,2)=X(:,1)+a*d;
g1=[g1 subs(subs(g,x1,X(1,2)),x2,X(2,2))];
m1=norm(g1(:,1));m2=norm(g1(:,2));
k=(m2/m1)^2;
i=2;
while m2>=e
d(:,i)=-g1(:,i)+k(i-1)*d(:,i-1);
a(i)=-(d(:,i)'*g1(:,i))/(d(:,i)'*G*d(:,i));
%a1(i)=-((X(:,i)'*G*d(:,i)+b'*d(:,i))/(d(:,i)'*G*d(:,i)));a(i)=g1(:,i)'*g1(:,i)/(d(:,i)'*G*d(:,i));
X(:,i+1)=X(:,i)+a(i)*d(:,i);
g1=[g1 subs(subs(g,x1,X(1,i+1)),x2,X(2,i+1))];
m1=m2;m2=norm(g1(:,i+1));
k(i)=(m2/m1)^2;
i=i+1;
end
f1=subs(subs(f,x1,X(1,i)),x2,X(2,i));
elseif n==3
format long
syms x1 x2 x3
f=1/2*[x1,x2,x3]*G*[x1;x2;x3]+b'*[x1;x2;x3]+c;
g=[diff(f,x1);diff(f,x2);diff(f,x3)];
g1=subs(subs(subs(g,x1,X(1,1)),x2,X(2,1)),x3,X(3,1));
d=-g1;
a=-((X(:,1)'*G*d+b'*d)/(d'*G*d));
X(:,2)=X(:,1)+a*d;
g1=[g1 subs(subs(subs(g,x1,X(1,2)),x2,X(2,2)),x3,X(3,2))];
k=(norm(g1(:,2))/norm(g1(:,1)))^2;
m=norm(g1(:,2));
i=2;
while m>=e
d(:,i)=-g1(:,i)+k*d(:,i-1);
a(i)=-((X(:,i)'*G*d(:,i)+b'*d(:,i))/(d(:,i)'*G*d(:,i)));
X(:,i+1)=X(:,i)+a(i)*d(:,i);
g1=[g1 subs(subs(subs(g,x1,X(1,i+1)),x2,X(2,i+1)),x3,X(3,i+1))];
k=(norm(g1(:,i+1))/norm(g1(:,i)))^2;
m=norm(g1(:,i+1));
i=i+1;
end
f1=subs(subs(subs(f,x1,X(1,i)),x2,X(2,i)),x3,X(3,i));
end 参考技术A MATLAB中用遗传算法求解约束非线性规划问题 Solution of optimization with nonliear constraints programming by genetic alogorithm in MATLAB 作者:王勇, 期刊-核心期刊 哈尔滨商业大学学报(自然科学版)JOURNAL OF HARBIN UNIVERSITY OF COMMERCE(NATURAL SCIENCES EDITION) 2006年 第04期
- 约束优化问题的遗传算法求解 Genetic algorithm solution for constrained optimization 作者:宋松柏,蔡焕杰,康艳, 期刊-核心期刊 西北农林科技大学学报(自然科学版)JOURNAL OF NORTHWEST SCI-TECH UNIVERSITY OF AGRICULTURE AND FORESTRY(NATURAL本回答被提问者采纳 参考技术B 一般没有程序,你是不是问错了饿。啊
什么是共轭梯度法?
参考技术A 数学上,共轭梯度法实求解特定线性系统的数值解的方法,其中那些矩阵为对称和copy正定。共轭梯度法是一个迭代方法,所以它适用于稀疏矩知阵系统,因为这些系统对于象乔莱斯基分解这样的直接方法太大了。这种系统在数值求解偏微分方程时相当常见。共轭梯度法道也可以用于求解无约束优化问题。
双共轭梯度法提供了一种处理非对称矩阵情况的推广。
以上是关于请问有人知道共轭梯度法的FR,PRP,HS三个算法的Matlab程序吗?的主要内容,如果未能解决你的问题,请参考以下文章