黄金比例分割法确定对称逐次超松弛迭代法的最佳松弛因子

合集下载

最优松弛因子的选择方法

最优松弛因子的选择方法

SOR方法中最优松弛因子的几种选择方法学习了解线性方程组的SOR方法后,老师给我们强调了SOR方法中松弛因子的重要性,但却并没有明确告诉我们如何更好的选取最佳的松弛因子,我想这可能是暗示我们自己课下去查阅资料研究。

所以我这次选取了这一课题作为我的一次大作业。

通过学习我们知道了SOR方法中的松弛因子w的取值直接影响到算法的收敛性和收敛速度。

w选取得当,可以加快收敛速度,甚至可以使发散的迭代变成收敛。

因此,参数w的选取是SOR方法能否成功的关键。

为了保证迭代过程的收敛,必须要求0<w<2,而对超松弛法取1<w<2。

通过查阅资料,我找到了三种对超松弛因子的的选取的简单实用的方法,这些方法还能够运用到计算机算法中去,便于算法的实行。

一、松弛因子的选择方法1.二分比较法将松弛因子w的区间(1,2)进行二分,每个小区间的长度为1/2,w取区间中点值3/2,按照课本上(3.2.15)的公式迭代,求出迭代次数k。

如果k不超过指定的发散常数,则可确定w的值;否则将(1,2)区间四等分,每个小区间的长度为1/4,w取各分点的值继续迭代。

一般地,将区间(1,2)二分M次,每次二分步长为1/2^M,w依次取各二分点的值,同样按照课本中(3.2.15)的公式迭代,并求出迭代次数k值。

如果k值不超过指定的发散常数,则可确定w的值,这种方法总能找到一个不超过指定发散常数的w值。

用算法描述如下:第一步,给定发散常数RADIATION的值,令二分次数M的初始值为1;第二步,将区间(1,2)二分M次,每次二分的步长为1/2^M,w取各二分点的值;第三步,对每一个二分点按照课本中(3.2.15)中公式迭代求出迭代次数K;第四步,比较各二分点的K值找出最少迭代次数的Kmin值;第五步,判断若Kmin小于RADIATION,则结束;否则二分次数M++,跳至第二步继续二分。

2.逐步搜索法将w的取值区间(1,2)进行M等分,w分别取1+1/M,1+2/M,1+3/M,……,1+(M-1/M)。

超松弛迭代法中松弛因子ω的选取方法

超松弛迭代法中松弛因子ω的选取方法

超松弛迭代法中松弛因子ω的选取方法一、超松弛迭代算法基本概念超松弛迭代法简称为SOR(Successive Over -- Relaxation)法,是求解线性代数方程组的一种迭代加速方法,它是在高斯--塞德尔迭代法的基础上进行加速的,将前一步的结果x k i )(与高斯--塞德尔迭代方法的迭代值x k i )1(+适当的加权平均,期望获得更好的近似值x k i )1(+。

其迭代公式如下:x k i )1(+=(1--ω)x k i )(+a iiw (b i --x a k j i j ij )1(11+-=∑--x a j n i j ij (k)∑=) i =1,2,…,n;k =0,1,2,…(1.1)SOR 法中ω的取值对迭代公式的收敛速度影响很大,它的好坏直接影响到加速的快慢。

为了保证迭代过程的收敛,必须要求0<ω<2,超松弛法取1<ω<2。

但是在1和2之间仍然有很多的取值,究竟如何取值没有同意的规定。

经过多次的实验、分析与研究提出了ω选取的几种方法。

二、松弛因子ω的选取方法1、逐步实验法将ω的取值区间(1,2)进行M 等分,ω分别取1+1/M ,1+2/M ,……,1+(M--1)/M ,通过公式1.1依次对同一精度要求求出迭代次数k 的值,在求的同时比较出最少的迭代次数k ,并将此次ω的值保留,这样就得到了1+1/M ,1+2/M ,……,1+(M--1)/M 中最优的ω值,算法步骤如下:第一步:给定M 的值第二步:对于,ω分别取1+1/M ,1+2/M ,……,1+(M--1)/M 按照公式 x k i )1(+=(1--ω)x k i )(+a iiw (b i ---x a k j i j ij )1(11+-=∑---x a j n i j ij (k)∑=) i =1,2,…,n;k =0,1,2,…根据给定的精度要求迭代,求出迭代次数k 的值。

SOR迭代法求解线性方程组

SOR迭代法求解线性方程组

SOR迭代法求解线性方程组一实验名称:实验四:逐次超松弛迭代法。

二实验题目:求解下面的三元一次线性方程组:2x-y+2z=4;x+2y+3z=9;2x-2y-3z=-3;要求选取不同的松弛因子进行计算,并估计最优松弛因子的大小。

三实验目的:1.熟悉掌握逐次超松值迭代法的基本原理和基本方法。

2.学会用逐次超松弛迭代法解简单的方程组。

3.选取不同的w值(0<w<2)进行试探性的计算,从中摸索出近似的最佳松弛因子。

四基础理论:超松弛迭代法以及所涉及的主要算法为:Xi^(k+1)←(1-w)*Xi^(k)+w*Xi的共轭的(k+1)次幂。

五实验环境:Visual C++6.0。

六实验过程:1. 在程序中输入不同的数据时,会得到不同的结果。

2.大于1的时候的松弛因子,被称作超松弛法。

小于则被称做低松弛法。

由于松弛因子对方程组的收敛速度影响很大,所以在一定的误差范围内,选择不同的松弛因子时,迭代次数也会不同。

3. 按照实验题目中的数据输入时,比较结果当w=0.6时,会出现下面的结果:当w=0.7时得当w=0.8时得当w=0.9时,会出现下面的结果当w=1.0时得七结果分析:当在一定的误差范围内,有以上运行结果可以得出答案,最优松弛因子的范围为0.8。

八逐次超松弛迭代法程序代码:#include<iostream.h>#include<stdlib.h>#include<stdio.h>#include<math.h>void SOR(double w, double a[3][3], double b[3], double x[3], double esp) {double t[3];int flag=0;int n=0;while(!flag){flag=1;n++;t[0]=x[0]; t[1]=x[1]; t[2]=x[2];for(int i=0;i<3;i++){double m=b[i];for(int j=0;j<3;j++){m-=(a[i][j]*x[j]);}x[i]=x[i]+w*m/a[i][i];}for(int k=0;k<3;k++){if(fabs(x[k]-t[k])>=esp){flag=0;break;}}}printf("%d\n",n);}void main(){double a[3][3];double b[3];double x[3];double w,esp;a[0][0]=2; a[0][1]=-1; a[0][2]=2;a[1][0]=1; a[1][1]=2; a[1][2]=3;a[2][0]=2; a[2][1]=-2; a[2][2]=-3;b[0]=4; b[1]=9; b[2]=-3;x[0]= x[1]= x[2]=0;w=0.6;esp=0.0001;SOR(w,a,b,x,esp);for(int i=0;i<3;i++)printf("%f\n",x[i]);}。

数值分析大作业超松弛迭代法如何选取最佳松弛因子

数值分析大作业超松弛迭代法如何选取最佳松弛因子

数值分析⼤作业超松弛迭代法如何选取最佳松弛因⼦超松弛迭代法如何选取最佳松弛因⼦船建学院B1301095 wj⼀、课题背景逐次超松弛迭代法是Gauss-Seidel⽅法的⼀种加速⽅法,是解⼤型稀疏矩阵⽅程组的有效⽅法之⼀,它具有计算公式简单,程序设计容易,占⽤计算机内存较少等优点,但需要选择好的加速因⼦(即最佳松弛因⼦)。

最佳松弛因⼦ω的确定是数值代数中的⼀个理论难题,对于不同的矩阵,其最佳松弛因⼦往往相差很⼤,没有统⼀的计算公式来确定ω。

由于对称正定矩阵sor⽅法收敛的充分必要条件为w在0到2之间,故利⽤对称正定矩阵⼀定收敛的性质,本⽂提供⼀种针对于系数矩阵为对称正定矩阵时,如何选取合适的最佳松弛因⼦的⽅法。

⼆、课题研究流程图三、SOR迭代公式逐次超松弛(Successive Over Relaxation)迭代法,简称SOR迭代法,它是在GS法基础上为提⾼收敛速度,采⽤加权平均⽽得到的新算法,设解⽅程的GS法记为(1)再由与加权平均得这⾥ω>0称为松弛参数,将(1)式代⼊则得(2)称为SOR迭代法,[WTBX]ω>0称为松弛因⼦,当ω=1时(2)式即为GS法,将(2)式写成矩阵形式,则得即于是得SOR迭代的矩阵表⽰(3)四、Matlab程序%sor法确定对称正定矩阵的最佳松弛因⼦w%clc;clear;n=100;%矩阵的阶数%for num=1:100X=diag(rand(n,1));U=orth(rand(n,n)-0.5);a=U'*X*U;%以上是利⽤随机对⾓矩阵和随机正交矩阵,产⽣随机的对称正定矩阵,正交变化不改变特征值%L=zeros(n,n);U=zeros(n,n);%分配L和U的内存空间%step=0.02;%定义w的计算精度%for k=1:(2/step) %由于对称正定矩阵sor⽅法收敛的充分必要条件为w在0到2之间%w=(k-1)*step;for i=1:n %⼀个总的for循环给三个矩阵赋值D-L-U=A,%for j=1:i-1L(i,j)=-a(i,j);%L矩阵的赋值%endfor j=i+1:nU(i,j)=-a(i,j);%U矩阵的赋值%endD(i,i)=a(i,i);%D矩阵的赋值%endH=inv(D-w*L)*((1-w)*D+w*U);%sor⽅法的核⼼,H矩阵为迭代矩阵%p(k)=max(abs(eig(H)));%利⽤此函数求矩阵的谱半径%endk_min=find(p==min(p));%find函数寻找不同的w中谱半径的最⼩值,即寻找收敛最快的w%w_min(num)=(k_min-1)*step;%由最⼩值的序号得到最优的w%endhist(w_min,100)%对数量⾜够多的随机对称正定矩阵做频率统计,w划分100份,做出统计图%mean(w_min)%对不同矩阵的最⼩谱半径所对应的w对平均统计%五、结果对于不同阶数,计算得到的最佳收敛因⼦w不同,⼤致是随阶数增⼤⽽增⼤。

黄金比例分割法确定对称逐次超松弛迭代法的最佳松弛因子

黄金比例分割法确定对称逐次超松弛迭代法的最佳松弛因子
阵,U为单位上三角阵);
(2) 1 < ω < 2 ;
(3) 取 [D] = k[I ],当 k n ∈ (0, 1) 时;
2
则本文采用改进的SSOR迭代法收敛。
证明:本文所采用的SSOR-PCG法改进的迭代格式所采用的迭代矩阵为:
Lω = I − ω(D − ωCL )−1 A = (I − ωL)−1 ((1 − ω)I + ωU )
表1 方向
x y x y x
本文算法与MARC计算节点位移比较
MARC 解
本文算法解
-0.315654E-03
-0.315041E-03
-0.151406E-03
-0.151282E-03
-0.130349E-01
-0.130269E-01
-0.354377E-01
-0.353946E-01
-0.148028E-01
0.019 0.213 0.122 0.052
y
10151
x
y
10251
x
y
注:表中节点位置参见图1.
-0.168963E-03 0.131212E-01
-0.355535E-01 0.149818E-01
-0.943525E-01
-0.168703E-03 0.131073E-01
-0.355067E-01 0.149659E-01
(1)
( ) R: α = y k ,Vy k
式中 ( , ) 为内积表示,下同。
如果α ≤ ε ,则停止,否则
-1-

⎧τ ⎪
k
⎪δ k
=
+1
( y k ,Vy k ) /(d k ,2z k = δ k +τkdk,

matlab超松弛迭代法求方程组

matlab超松弛迭代法求方程组

一、介绍MATLAB(Matrix Laboratory)是一种用于数值计算和数据可视化的专业软件。

在MATLAB中,超松弛迭代法是解决线性方程组的一种有效算法。

本文将介绍MATLAB中超松弛迭代法的基本原理和实现方法,并给出一个具体的例子进行演示。

二、超松弛迭代法的基本原理超松弛迭代法是一种逐步迭代的算法,用于求解线性方程组。

它的基本原理是通过不断迭代更新方程组的解,直到达到满足精度要求的解。

超松弛迭代法的公式如下:X(k+1) = (1-w)X(k) + w*(D-L)⁻¹*(b+U*X(k))其中,X(k)代表第k次迭代的解向量,X(k+1)代表第k+1次迭代的解向量,D、L和U分别代表方程组的对角线元素、下三角元素和上三角元素构成的矩阵,b代表方程组的右端向量,w代表松弛因子。

超松弛迭代法的关键在于选择合适的松弛因子w,一般情况下,可以通过试验选取一个合适的值。

在MATLAB中,可以使用sor函数来实现超松弛迭代法。

三、MATLAB中超松弛迭代法的实现方法在MATLAB中,可以通过调用sor函数来实现超松弛迭代法。

sor 函数的语法格式如下:[X,flag,relres,iter,resvec] = sor(A,b,w,tol,maxit)其中,A代表线性方程组的系数矩阵,b代表右端向量,w代表松弛因子,tol代表迭代的精度要求,maxit代表最大迭代次数,X代表迭代求解得到的解向量,flag代表迭代的结果标志,relres代表相对残差的大小,iter代表迭代次数,resvec代表迭代过程中的残差向量。

以下是一个使用sor函数求解线性方程组的示例:A = [4 -1 0 -1 0 0; -1 4 -1 0 -1 0; 0 -1 4 0 0 -1; -1 0 0 4 -1 0; 0 -1 0 -1 4 -1; 0 0 -1 0 -1 4];b = [1; 0; -1; 0; 1; 0];w = 1.25;tol = 1e-6;maxit = 100;[X,flag,relres,iter,resvec] = sor(A,b,w,tol,maxit);通过调用sor函数,可以得到方程组的解向量X,迭代的结果标志flag,相对残余resrel和迭代次数iter。

数值分析第二次大作业SOR最优松弛因子选取方法及SOR迭代法的改进

数值分析第二次大作业SOR最优松弛因子选取方法及SOR迭代法的改进

《数值分析》第二次大作业题目:SOR最优松弛因子选取方法及SOR迭代法的改进内容:1.SOR最优松弛因子选取方法2.SOR迭代法的改进(SSOR迭代法)3.SSOR迭代法的Matlab程序4.举例比较jacobi,Gauss-Seidel,SOR及SSOR 迭代法的收敛速度姓名:合肥工业大学学号:2011班级:信息与计算科学11-1班参考资料:1.《确定SOR最优松弛因子的一个实用算法》李春光等《计算力学学报》2.《数值分析与实验》,薛毅,北京工业大学出版社.3.《数值分析中的迭代法解线性方程组》,马云,科学出版社4.《非线性互补问题的改进超松弛迭代算法》,段班祥等,江西师范大学出版社5.《迭代法解线性方程组的收敛性比较》,郑亚敏,江西科学出版社.一、SOR最优松弛因子选取方法SOR迭代法迭代公式:x(k+1)i=(1-ω)xi+(k) bi-∑aijxjaii⎝j=1ω⎛ i-1(k+1)-j=i+1∑axijn(k)j⎫⎪ (i=1,2,..n.), ⎪⎭1.二分比较法将松弛因子1/2,ω的区间(1,2)进行二分,每个小区间的长度为ω去中间值3/2,按照SOR 迭代法迭代公式,求出跌代次数k,如果k不超过指定的发散常数,则可确定ω的值;否则将(1,2)四等分,每个区间长度为1/4,ω取各分点值,继续迭代,一般地,将1区间(1,2)二分M次,每次二分步长为,ω一次取取各分点值,2M按照SOR迭代法迭代公式,求出跌代次数k,如果k不超过指定的发散常数,则可确定的ω的值,这样总能找到一个不超过指定发散常数ω值。

2.逐步搜索法将1+ω的取值区间(1,2)进行M等分,ω分别取ω的值。

12M-1,1+,...,1+,通过迭代公式依次对同意精度要求求出迭代MMM次数k的值,并从中选出最优松弛因子3.黄金分割法依据黄金分割比的思想,通过计算机主动选取最优松弛因子的近似值,步骤如下a.对(1,2)区间进行第一次0.618的分割,区间边界a1=1,b1=2,在区间(a1,b1)分割出黄金点p1=a1+0.618(b1-a1),进行SOR迭代法的迭代,求出迭代次数k的值,如果没有超过规定的发散常数,迭代结束,否则做步骤b。

线性代数课程论文

线性代数课程论文

基于自适应遗传算法的SOR迭代(华南理工大学理学院数学系计算数学牛海静)摘要:对于确定逐次超松驰迭代法中的最佳松驰因子问题, 迄今, 人们还没有给出一可行实用的方法. 利用自适应遗传算法全局搜索性能、并行性及其遗传操作, 构造出近似确定最佳松驰因子的一种自适应进化方法, 并由此得到一近似确定功能的自适应逐次超松驰迭代算法. 数值算例表明, 该算法在求解线性方程组中是可行的, 实用和快捷的.关键词:逐次超松驰迭代法; 遗传算法; 最佳松驰因子; 线性方程组1引言在科学计算和工程设计中, 人们经常会遇到求解线性代数方程组问题, 而且在计算方法的其它分支的研究也往往归结为此类问题. 目前, 大型的线性方程组都是利用计算机进行数值求解, 归结起来, 主要有两类: 一类是直接解法, 就是指经过有限步运算求得方程组的解的一类方法, 此类方法比较适用于系数矩阵稠密的中、小型线性方程组; 另一类是迭代解法,适用于解大型、稀疏矩阵的线性方程组. 逐次超松驰迭代法(Successive Over-Relaxation) 是解线性方程组的一种迭代加速法, 是求解大型线性方程组的有效方法之一. 通过选择恰当的松驰因子, 它能使收敛速度变得较快, 也使发散的可能变成收敛, 因此, 超松驰迭代法算法有着极高的应用价值. 本文利用自适应遗传算法全局搜索性能和并行性、及其遗传操作, 构造出一种近似确定最佳松驰因子的自适应进化算法, 并由此得到一个近似确定功能的自适应遗传逐次超松驰迭代法(Adaptive Genetic Algorithm Successive Over-Relaxation) 算法, 简称为A GA SOR.2 逐次超松驰迭代法超松驰迭代法简称为SOR 法, 是求解线性代数方程组的一种迭代加速法, 它是在Gauss Seidel 迭代法的基础上进行加速的, 将前一步的结果ki x与Gauss Seidel 迭代方法的迭代值(1)k ix 适当的加权平均, 期望获得更好的近似值(1)k ix .其迭代公式如下:1(1)()(1)()1(1)[],i n k k k k iiiijjijjj j iiixx b a xa xa1,2,,;0,1,2,i n k其中:为松弛因子. SOR 法中取值对迭代公式的收敛速度影响很大, 它的好坏直接影响到收敛速度的快慢. 为了保证迭代过程的收敛, 必须要求02,但是在0 和2 之间有很多的取值, 究竟如何取值至今没有较好的解决方法. 基于此目的, 文中提出一个可一般确定近似值的自适应数值进化方法, 该方法利用的是自适应遗传算法中全局性、并行性及其遗传操作, 使其快捷方便. 该算法适用于满足SOR 迭代方法的大型稀疏矩阵的线性方程组.3 遗传算法原理与A GA SOR 算法3.1 适应度函数与编码实现若一个代数方程组, 它由n 个方程组组成, 涉及m 个变量:11()()()()iinnX X X X f A fA fA(1)其中:1()f 可为除分段函数外的任意形式的函数表达式,,{|(,)}.j i j Xx x x X x a b 12m ,,...,求解方程组(1)等价于求极值问题: 求一X ,以使式(2)取值最小.当最小值为0时,所对应的X ,即为方程之解; 当其最小值不为0 时, 则此方程组无解. 设适应度函数: 1()(),niii F X X XfA(2)本文是用遗传算法寻找SOR 法中的最佳松驰因子, 确定在(0, 2) 区间的最优值. 对于,选定迭代初始值后, 它与方程组的解X 联系是比较紧密, 较好的可以在较少的迭代次数内得到较精确的解. 因而, 为了更好的平衡这种关系,可以用式(2) 与迭代次数K 的平均值的负值做为适应度函数, 即:1()()(),22niii X K F X KFit XfA(3)(或者可以选择适应度函数为 111()()()n iii Fit F X KX KfA也可以吧,不知道效果怎么样)求适应度函数时, 也要把迭代次数考虑进来. 如果比较差, 有可能达不到所要求的精度, 就会无限迭代下去. 因此,给出一个限定条件, 如果迭代次数达到最大限定, 则k 取最大限, 适应度还按式(3) 进行处理. 同时为使算法能适用于任意的线性方程组, 必须根据用户输入的系数矩阵A 和常数项向量B , 还有选代初始值0X 和要求精度, 用上述方法生成适应度函数.对于染色体编码, 本文采用实数编码. 与二进制编码相比, 采用实数编码方式, 使算法具有较高的通用性. 同时, 为了更好地与实际问题相结合, 将方程组的解X 和迭代次数K 放在的后面, 一起组成一个染色体Pop , 即:[].i i i Pop X K 其中的X 和K 都是采用实数表示, 即用原值表示. 这样更利于最佳松驰因子寻优和方程求解.3.2 遗传算子 3.2.1 选择算子选择算子采用轮盘法、锦标赛选择法和几何规划排序选择法的结合. 轮盘法的基本精神是个体被选中的概率取决于个体的相对适应度:i iif p f (4)其中: i p 个体i 被选中的概率; if 个体i 的适应度;if 群体的累加适应度.显然, 个体适应度越高被选中的概率愈大. 但是, 适应度小的个体也有可能被选中, 以便增加下代群体的多样性. 而锦标赛选择法是随机地从种群中选一定数目的()Tour 个体, 然后将最好的个体选做父个体. 这个过程重复进行完成个体的选择. 锦标赛选择法的参数为竞赛规模Tour , 其取值范围为 [ 2,N ind ] (其中N ind 是竞赛规模, 允许比2大的数) , 这里取Tour 为3, 使多样化得到一定的损失. 几何规划排序选择法是基于几何规划排序进行选择,主要是对适应度进行排序, 较好的做为父个体, 这有利于防止较好个体的破坏. 综合各自的特点, 本算法选择是先利用几何规划排序选择法对初始群体进行选择, 然后用锦标赛选择法对几何规划排序选择法得到的父群体进行选择, 最后用轮盘法选择. 这样可以提高收敛速度和搜索范围, 更有利于交叉与变异的进行. 3.2.2交叉算子算术交叉算子是实数编码遗传算法中应用最广泛的一种算子, 其采用的交叉方法是线性插值. 比如在两个体1,2之间进行算术交叉, 则交叉运算所产生出的两个新个体为*112*212(1)(1)(5)其中是在[0,1] 区间内的参数, 它可以是一个常数, 也可以是由进化所决定的变量, 本文选择为[ 0, 1 ]区间上的随机数. 3.2.3变异算子本文采用均匀变异和边界变异两种变异算子. 对其说明如下:均匀变异是指分别用符合某一范围内均匀分布的随机数, 以某一较小的概率替换个体编码串中各个基因座上的原有基因值. 其具体过程是: 假设有一个个体为12k l XX X X X .若k X 为变异点, 其取值范围为min max [,]k k U U (其中minkU 表示的是基因k X 可取值范围的最小值, 而max kU 表示最大值) , 在该点以个体X进行均匀变异后, 可得到一个新的个体''12,k l X X X X X 其中变异点的新基因值是: minm min 'ax ().k k k kU r U U X 式中r 为范围内符合均匀分布的一个随机数.边界变异是均匀变异操作的一个变形遗传算子. 在进行边界变异操作时, 随机地取基因座的二个对应边界基因之一取代原有基因值. 在进行由12k l XX X X X 向''12k l X X X X X 的边界变异时, 若变异点k X 处的基因值取范围为min max [,]k kU U ,则新的基因'k X 由下式确定:min max,, 1.kk U U如果random(0,1)=0;如果random(0,1)= (6)式中if random(0,1)表示以均匀等概率从0,1中任取其一.( 补充:由于本文中的染色体只有三个基因组成,且后面的两个基因X 和K 的值是随着基因的选取而相应变化的,所以我们本文的交叉和变异操作只针对于基因进行,这样X 和K 的值会根据适应度函数等相应产生新的值.) 3.2.4终止条件以设定的最大的遗传代数为终止条件 3.3 交叉概率c P 和变异概率m P遗传算法的参数中交叉概率c P 和变异概率m P 的选择是影响遗传算法行为和性能的关键所在, 直接影响算法的收敛性. c P 越大, 新个体产生的速度就越快, 但过大时遗传模式被破坏的可能性也越大; 但是如果 c P 过小, 会使搜索过程缓慢, 以至停滞不前. 对于变异概率m P , 如果 m P 过小, 就不易产生新的个体结构; 如果m P 取值过大, 那么遗传算法就变成了纯粹的随机搜索算法. 针对此问题, Srinvivas 等提出一种自适应遗传算法(Adaptive GA ,A GA ) , c P 和m P 能够随适应度自动改变. 本算法中,c P 和m P 根据式(7)式(8)来动态确定, 从而增加算法的进化能力和收敛速度.'12'1max '1,()(),c c avg c avgavgcc avgP P f f P f f f f P P f f (7)12max1max1,()(),m m m avgavg mm avgP P f f P ff f f P P ff (8)其中: 1212max 0.9,0.6,0.1,0.001,c c m m P P P P f 为群体中最大的适应度值;avg f 为每代群体的平均适应度值; 'f 为要交叉的两个个体中较大的适应度值; f 为要变异个体的适应度值.3.4 次超松驰迭代(A GA SOR)描述 具体算法过程描述如下:Step 1 参数接收: 接收用户输入线性方程组的系数矩阵A 、常数项b 、迭代初始值0X 和要求的精度; 确定种群规模N ;定出K 的最大限max K 的值和最大遗传代数T .Step 2 群体初始化: 随机生成N 个代入SOR 的迭代公式, 根据系数矩阵 A 、常数项b 、迭代初始值 0X 和要求的精度生成适应度函数;Step 3 计算适应度, 并保存迭代终止时的迭代次数k : 如果k 达到最大限, 则k 就等于最大限定次数; 否则按达到精度时的K 值保存;并产生N 个个体的初始种群S ;置代数计数器t 1.Step 4 寻找并保存当前代最优个体(也就是适应度值最大的个体); Step 5 进行以下遗传操作:(最初针对初始种群全体)(a) 选择算子: 按几何规划排序选择法、锦标赛选择法、轮盘法(按选择概率i P 所决定的选中机会,每次从群体中随机选定一个染色体并将其复制,共做N 次,然后将复制所得的N 个染色体组成群体1S )进行选择;(b) 交叉算子: 按式(7)计算c P 并决定出参加交叉的染色体数c ,从1S 中随机确定c 个染色体,随机配对并用算术交叉算子进行交叉,并用产生的新染色体代替原染色体,得群体2S ;(c) 变异算子: 按式(8)计算m P 并决定变异次数m ,从2S 中随机确定m 个染色体,分别进行均匀变异和边界变异两种算子,并用产生的新染色体代替原染色体,得群体3S;(d) 计算适应度: 并保存迭代次数k, 如果k达到最大限, 则k就为最大限定次数; 否则按原值保存;(e) 寻找并保存最优个体, 并用前代最优个体代替当前代的最差个体,置t t1;Step 6如果达到最大遗传代数, 则结束并输出所找到的最优松驰因子,然后转Step7; 否则转Step 5,;Step 7把代入SOR公式 , 另取精度1(使1,原可以取略大一点,加快收敛速度),得出方程的解X和迭代次数k,并结束.4 数值算例与分析为了验证本文算法的有效性,在计算机上进行了数值模拟计算.选择参数为:5 结论本文的近似确定X进化算法, 是基于遗传算法对X 的寻找而得到的, 因而, 不难把它平行地推广到对称超松驰迭代法(SSOR ) , 加速超松驰迭代法(AOR).参考文献:[ 1 ] 王世瑞, 王金金, 冯有前, 等. 计算方法[M ]. 西安: 电子科技大学出版社, 1997, 1: 33241.3 期谢竹诚, 等: 基于自适应遗传算法的逐次超松驰迭代法159[ 2 ] 马东升. 数值计算方法[M ]. 北京: 机械工业出版社, 2002, 1: 922102.[ 3 ] 李春光, 徐成贤. 确定SOR 最佳松驰因子的一个实用算法[J ]. 计算力学学报, 2002, 8, 19 (3) : 2992302.[4 ] 胡小兵, 吴树范等. 一种基于遗传算法的求代数方程组数值解的新方法[ J ]. 控制理论与应用, 2002, 19 (4) : 5672570.[ 5 ] HE Jun, XU ji2you, YAO Xin. So lving equations by hybrid evo lutionary computation techniques[J ]. IEEE T ranson Evo lutionary Computation, 2000,4 (3) : 2952304.[ 6 ] 罗亚中, 袁端才等. 求解非线性方程组的混合遗传算法[J ]. 计算力学学报, 2005,22 (1) : 1092114.[ 7 ] 周明, 孙树冻. 遗传算法原理及应用[M ]. 北京: 国防工业出版社, 1999.[ 8 ] 王小平, 曹立明. 遗传算法——理论、应用与软件实现[M ]. 西安: 西安交通大学出版社, 2002, 1.[ 9 ] 刘新胜, 张知难. 查找最佳松驰因子的一种实用方法[J ]. 新疆大学学报(自然科学版) , 2005, 5, 22 (2) : 1612164.[文档可能无法思考全面,请浏览后下载,另外祝您生活愉快,工作顺利,万事如意!]。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

2.SSOR-PCG法改进的迭代格式
SSOR法在每步迭代中,需计算系数矩阵与方向向量的乘积,下面引用了该法的改进迭
代格式,避免了该乘积的计算,比原迭代格式节省计算量8%—50%。
SSOR法的改进迭代格式[3]为:
置初值 δ 0 , g 0 = Kδ 0 − R, y 0 = W −1g 0 , z 0 = −Vy 0 , d 0 = W −T z 0 , k = 0 ,
-0.943297E-01
0.154 0.106 0.132 0.106 0.024
运行时间
表2
二者运算时间比较
Marc计算
1分32秒
本文算法计算 17秒
通过所列的表1和表2观察可以发现,本文算法所求出的位移与大型商业软件MARC相比 较精度误差很小,具有较高的精度,且在保证精度的基础上计算时间也大大缩短,有很高的
j =1
j =i +1
j =1
j =i +1
i −1
n
n
i −1
n
∑ ∑ ∑ ∑ ∑ > ( λ − 1 + ωi )Iii − λ ( ωi aij + ωi aij ) > ( λ − 1 + ωi )Iii − λ ( ωi aij + ωi aij + ωi aij )
j =1
j =i +1

黄金比例分割法确定对称逐次超松弛迭代法的最佳 松弛因子
张德宣,杜成斌,孙立国
河海大学工程力学系,南京 (210098)
E-mail:zdx.1234@
摘 要:本文提出了将黄金分割法确定松弛因子与对称逐次超松弛法的改进迭代格式相结合 的迭代算法。算法应用黄金比例分割法确定最佳松弛因子,成功的将其与运行速度和效率很 高的对称逐次超松弛法的改进迭代格式相结合,并给出了迭代收敛性证明,编写了相应的程 序,对一实际结构进行的算例计算表明,与大型商业软件的计算结果相比较,本文所提算法 具有精度高,收敛快的优点。 关键词:黄金分割;对称逐次超松弛法;松弛因子
-0.147813E-01
y
-0.942368E-01
-0.942186E-01
x
0.431350E-04
0.432271E-04
y
-0.353197E-01
-0.352766E-01
x
0.329006E-03
0.328835E-03
误 差% 0.194 0.082 0.061 0.343 0.145
表1 方向
x y x y x
本文算法与MARC计算节点位移比较
MARC 解
本文算法解
-0.315654E-03
-0.315041E-03
-0.151406E-03
-0.151282E-03
-0.130349E-01
-0.130269E-01
-0.354377E-01
-0.353946E-01
-0.148028E-01
(1)
( ) R: α = y k ,Vy k
式中 ( , ) 为内积表示,下同。
如果α ≤ ε ,则停止,否则
-1-

⎧τ ⎪
k
⎪δ k
=
+1
( y k ,Vy k ) /(d k ,2z k = δ k +τkdk,
− Vd k ),
⎪ ⎪
y
k
+1
=
避免了计算Ad,比原迭代格式可省 (ra − 2)n 次乘法运算, ra 为A的各行非零元素的平均个
数。因此, ra = 3 是改进迭代格式节省计算量约8﹪; 2ra >> 6 时,可节省计算量约50﹪,
各迭代步计算量接近CG(共轭梯度)法的计算量。
3.松弛因子的选取
本文采用上述对称逐次超松弛法的改进迭代格式求解大型线性方程组,将黄金分割法确 定松弛因子与之相结合,松弛因子的取值对迭代公式的收敛速度影响很大,它的好坏直接影
0.019 0.213 0.122 0.052
y
10151
x
y
10251
x
y
注:表中节点位置参见图1.
-0.168963E-03 0.131212E-01
-0.355535E-01 0.149818E-01
-0.943525E-01
-0.168703E-03 0.131073E-01
-0.355067E-01 0.149659E-01
的迭代次数少,则选取(dot1, dot2)作为收敛区间,如果是dot3对应的迭代次数少,则选取(dot3, dot4)作为收敛区间。
(3)在所选取的收敛区间里循环进行上述的两个步骤,直到选取出迭代次数最少时所对应 的最佳松弛因子。
通过本文中所采用的算例验证,本文方法确定松弛因子的加速效果是明显的,计算的时 间相对较短。在SSOR法改进迭代格式中采用黄金比例分割的综合算法就可以根据不同的具 体工程问题确定最佳松弛因子,该算法简单明了,而且效果显著,大大节省了选取最佳松弛 因子的时间,提高了大型有限元方程组计算的收敛速度。
yk
+τ k (d k
+W
−1 (z k
− Vd k )),
⎪⎪β ⎨
k
= ( y k+1,Vy k+1 ) /( y k ,Vy k ),
(2)
⎪z k+1 = −Vy k+1 + β k z k ,
⎪⎪d k+1 = W −T z k+1 ,
⎪k = k + 1, ⎪⎪⎩转到R
从迭代格式可见,由于V是对角阵,计算Vy和Vd为2n次乘法运算。改进的迭代格式由于
会延长许多,是很不经济的。 黄金分割比例法是一种经典的算法,本文即采用此种方法来确定最佳松弛因子,其具体
步骤和主要思想如下: (1)利用优选法思想,在(1,2)之间选取四个点,即: dot1=1,dot2=dot4-0.618(dot4-dot1),dot3=dot1+0.618(dot4-dot1),dot4=2 。 (2)分别取dot2与 dot3作为松弛因子代入迭代程序,比较出最少的迭代次数,如果dot2对应
i, j =1
j =1
j =i+1
∑ ∑ ∑ n
> ( λ − 1 + ωi )Iii − λ ωi aii
i =1
= ⎜⎜⎝⎛ λ
−1+ ωi kn

λ ωi
⎟⎟⎠⎞
n i =1
aii
=
⎜⎜⎝⎛
λ
(1 −
k nωi ) kn
+
(ωi
−1) ⎟⎟⎠⎞
n i =1
aii
由1 < ω
<
2 ,进而 ωi
−1 >
差缩小10−s 所需最小迭代次数为 k ≥ s ln10 ,称 R(B) = − ln ρ(B) 为迭代法收敛速度。 − ln ρ(B)
n
∑ 定义3[6] A = (aij )n×n ,如果A的元素满足 aij ≥ aij (i, j = 1,2L, n) ,称A为对角占优矩 j =1 j≠i
n
∑ 阵,记为 A ∈ D0 ;而当 aij > aij (i, j = 1,2L, n) 时,称A为严格对角占优矩阵,记为 j =1 j≠i
减少迭代次数,这并无规律,完全取决于计算当时的情况,如结构划分单元的多少及计算精
度等因素都有一定的关系。
5.算例
设一悬臂梁长20m,高5m,厚1m, 如图1所示。材料弹性模量E=2.1E7,泊松比ν =0.167,
不计自重,上表面受1000 N/m 的均布荷载。网格划分为平面四节点单元,长度方向200等分, 高度方向50等分,则节点总数为10251,单元总数为10000。
4.收敛性证明
定义1[4] 设A∈ C n∗n , λ1, λ2 ,L, λn 为A的特征值,我们称
-2-

ρ
(
A)
=
max i
λi
(3)
为A的谱半径。
定义2[5] 由 0 < ρ (B) < 1 ,且误差向量 ε (k) = x (k) − x∗ 满足 ε k = B k ε (0) ,推出欲使初始U 为严格对角占优矩阵,所以 A = D − L − U ≠ 0 ,由于 I − ωL 也为对
角阵,从而 I − ωL −1 ≠ 0 。
分析式(7)后半部分,并由 λ ≥ 1 可得
-3-

i −1
n
i −1
n
∑ ∑ ∑ ∑ (λ − 1 + ωi )Iii − λ ωi aij − ωi aij ≥ ( λ − 1 + ωi )Iii − λ ωi aij − ωi aij
λ < 1 ,结合定义1可知谱半径 ρ (Lω ) < 1,则该迭代方法收敛。
本文论证出了改进的SSOR迭代法收敛的一个充分条件,而由引理1并结合定义2可知,
迭代次数与收敛速度成反比,即 ρ (B) 越小,迭代收敛速度R(B)越快。而一般来说迭代矩阵
B的谱半径 ρ(B) 对ω 极为敏感,但是究竟是ω 取值大能减少迭代次数,还是ω 取值小可以
图1 悬臂梁网格剖分示意图
表1为本文算法与大型商业软件MARC计算的节点位移比较,表2为两者运算时间的比较 (采用的计算机配置为:Pentium(R) D CPU 2.80 GHz , 1.00 GB 内存)。
-4-

节点 2
101 201
5126 10052
1.引言
线性代数方程组 Ax = b (其中A为非奇异系数矩阵,b为列向量)的迭代解法通常有
相关文档
最新文档