flag=0;
for(i=0;i
因子为 0.45 时,需要迭代 17 次;
因子为 0.75 时,需要迭代 10 次;
因子为 1.0 时,需要迭代 6 次;
3
因子为 1.25 时,需要迭代 6 次;
因子为 1.5 时,需要迭代 32 次;
因子为 1.75 时,需要迭代超过 2000 次。
超松弛迭代法收敛速度的快慢与松弛因子的选择有密切关系,迭代次数随着超松弛因子增加
先减少再增加。
4
实验二:
1. 实验目的
1、通过上机计算体会迭代法求解线性方程组的特点,并能和消去法比较;
2、运用所学的迭代法算法,解决各类线性方程组,编出算法程序;
3、体会上机计算时,终止步骤<或 k>(予给的迭代次数),对迭代法敛散性的意义;
4、体会初始解 x,松弛因子的选取,对计算结果的影响。
2. 实验环境
使用平台:Microsoft Visual C++
使用语言:C++
3. 实验关键代码
(1) 系数矩阵的定义
cout<<"<<请输入矩阵的规格(?X?)>>:";
cin>>matrixNum;
matrixA=allocMem(matrixNum*matrixNum);
matrixD=allocMem(matrixNum*matrixNum);
matrixL=allocMem(matrixNum*matrixNum);
matrixU=allocMem(matrixNum*matrixNum);
B=allocMem(matrixNum*matrixNum);
f=allocMem(matrixNum);
x=allocMem(matrixNum);
5
xk=allocMem(matrixNum);
b=allocMem(matrixNum);
cout<
>:
"<>*(matrixA+i*matrixNum+j);
}
(2)高斯列主元素消去法
void GaussLineMain(double* A,double* x,double* b,int num)
{
int i,j,k;
for(i=0;ifabs(lineMax)) lineI=j;
for(j=i;jfor(i=num-1;i>=0;i--){
for(j=num-1;j>i;j--)
*(b+i)-=*(A+i*num+j)*(*(x+j));
*(x+i)=*(b+i)/(*(A+i*num+i));
}
}
(3)雅可比迭代算法
void Jacobi(double* x,double* xk,double* B,double* f,int num,int time)
{
int t=1,i,j;
while(t<=time){
for(i=0;i