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

📄 逐次超松弛迭代法sor.cpp

📁 数值计算各算法的程序,包括:牛顿迭代法,超松驰迭代法,微分法等.对于初学数值分析这门课程的人有很大的帮助.
💻 CPP
字号:
#include <iostream.h>
#include <math.h>
#include <iomanip.h>
#define length 9
int fun(double a[length][length],double b[length],double x[length],double omiga,double err)
{
	int i,j,k=0;
	double sum,temp[length];
	do
	{
		sum=0;
		k++;
		for(i=0;i<length;i++)
		{
			temp[i]=b[i];/*每一次迭代B变化了,需保存B*/
			for(j=0;j<length;j++)
			{
					if(i!=j)
					b[i]=b[i]-a[i][j]*x[j];/*每一次的新值覆盖了原来的值,还未算出的还是原来的值*/
			}	
			double temp1;
			temp1=x[i];
			x[i]=(1-omiga)*x[i]+omiga*b[i]/a[i][i];
			if(fabs(x[i]-temp1)>sum)
				sum=fabs(x[i]-temp1);/*不需用数组存下所有的误差,只需每次算出误差取出最大的*/
			b[i]=temp[i];
		}
	}while(sum>err);
	return k;
}
void main()
{
	double R[length][length]={{31,-13,0,0,0,-10,0,0,0},
				{-13,35,-9,0,-11,0,0,0,0},
				{0,-9,31,-10,0,0,0,0,0},
				{0,0,-10,79,-30,0,0,0,-9},
				{0,0,0,-30,57,-7,0,-5,0},
				{0,0,0,0,-7,47,-30,0,0},
				{0,0,0,0,0,-30,41,0,0},
				{0,0,0,0,-5,0,0,27,-2},
				{0,0,0,-9,0,0,0,-2,29}};
	double V[length]={-15,27,-23,0,-20,12,-7,7,10};
	int i,j,k,m[99];
	double omiga[99],x[length],err=0.5e-5,R1[length][length],V1[length],x1[length],x2[length];
	for(i=1;i<100;i++)
	{
		omiga[i]=i/50.0;
	}
	for(i=0;i<length;i++)
	{
		x[i]=0;
	}
	for(i=0;i<length;i++)
	{
		for(j=0;j<length;j++)
		{
			R1[i][j]=R[i][j];
		}
		V1[i]=V[i];
		x1[i]=x[i];
	}/*每一次调用函数之后R,V,X的值都变化了,需保存R,V,X*/
	for(i=1;i<96;i++)
	{
		m[i]=fun(R,V,x,omiga[i],err);
		cout<<"omiga["<<i<<"]="<<omiga[i]<<endl;
		cout<<"迭代次数为:"<<m[i]<<endl;
		for(k=0;k<length;k++)
		{
			x2[k]=x[k];
		}
		for(k=0;k<length;k++)
		{
			for(j=0;j<length;j++)
			{
				R[k][j]=R1[k][j];
			}
			V[k]=V1[k];
			x[k]=x1[k];
		}
	}
	cout<<"解向量为:";
	for(i=0;i<length;i++)
	{
		cout<<setw(10)<<x2[i];
	}
	cout<<endl;
	for(i=2;i<96;i++)
	{
		if(m[i]<m[1])
			m[1]=m[i];
	}
	cout<<"最小迭代次数为:"<<m[1]<<endl;
}


/*程序运行结果:
omiga[1]=0.02
迭代次数为:855
omiga[2]=0.04
迭代次数为:477
omiga[3]=0.06
迭代次数为:336
omiga[4]=0.08
迭代次数为:261
omiga[5]=0.1
迭代次数为:214
omiga[6]=0.12
迭代次数为:182
omiga[7]=0.14
迭代次数为:158
omiga[8]=0.16
迭代次数为:140
omiga[9]=0.18
迭代次数为:125
omiga[10]=0.2
迭代次数为:113
omiga[11]=0.22
迭代次数为:103
omiga[12]=0.24
迭代次数为:95
omiga[13]=0.26
迭代次数为:88
omiga[14]=0.28
迭代次数为:82
omiga[15]=0.3
迭代次数为:76
omiga[16]=0.32
迭代次数为:71
omiga[17]=0.34
迭代次数为:67
omiga[18]=0.36
迭代次数为:63
omiga[19]=0.38
迭代次数为:59
omiga[20]=0.4
迭代次数为:56
omiga[21]=0.42
迭代次数为:53
omiga[22]=0.44
迭代次数为:51
omiga[23]=0.46
迭代次数为:48
omiga[24]=0.48
迭代次数为:46
omiga[25]=0.5
迭代次数为:44
omiga[26]=0.52
迭代次数为:42
omiga[27]=0.54
迭代次数为:40
omiga[28]=0.56
迭代次数为:38
omiga[29]=0.58
迭代次数为:37
omiga[30]=0.6
迭代次数为:35
omiga[31]=0.62
迭代次数为:34
omiga[32]=0.64
迭代次数为:32
omiga[33]=0.66
迭代次数为:31
omiga[34]=0.68
迭代次数为:30
omiga[35]=0.7
迭代次数为:29
omiga[36]=0.72
迭代次数为:27
omiga[37]=0.74
迭代次数为:26
omiga[38]=0.76
迭代次数为:25
omiga[39]=0.78
迭代次数为:24
omiga[40]=0.8
迭代次数为:24
omiga[41]=0.82
迭代次数为:23
omiga[42]=0.84
迭代次数为:22
omiga[43]=0.86
迭代次数为:21
omiga[44]=0.88
迭代次数为:20
omiga[45]=0.9
迭代次数为:19
omiga[46]=0.92
迭代次数为:19
omiga[47]=0.94
迭代次数为:18
omiga[48]=0.96
迭代次数为:17
omiga[49]=0.98
迭代次数为:17
omiga[50]=1
迭代次数为:16
omiga[51]=1.02
迭代次数为:15
omiga[52]=1.04
迭代次数为:15
omiga[53]=1.06
迭代次数为:14
omiga[54]=1.08
迭代次数为:13
omiga[55]=1.1
迭代次数为:13
omiga[56]=1.12
迭代次数为:12
omiga[57]=1.14
迭代次数为:11
omiga[58]=1.16
迭代次数为:11
omiga[59]=1.18
迭代次数为:10
omiga[60]=1.2
迭代次数为:10
omiga[61]=1.22
迭代次数为:10
omiga[62]=1.24
迭代次数为:11
omiga[63]=1.26
迭代次数为:11
omiga[64]=1.28
迭代次数为:12
omiga[65]=1.3
迭代次数为:13
omiga[66]=1.32
迭代次数为:13
omiga[67]=1.34
迭代次数为:14
omiga[68]=1.36
迭代次数为:15
omiga[69]=1.38
迭代次数为:16
omiga[70]=1.4
迭代次数为:16
omiga[71]=1.42
迭代次数为:17
omiga[72]=1.44
迭代次数为:17
omiga[73]=1.46
迭代次数为:19
omiga[74]=1.48
迭代次数为:20
omiga[75]=1.5
迭代次数为:20
omiga[76]=1.52
迭代次数为:22
omiga[77]=1.54
迭代次数为:24
omiga[78]=1.56
迭代次数为:25
omiga[79]=1.58
迭代次数为:26
omiga[80]=1.6
迭代次数为:28
omiga[81]=1.62
迭代次数为:31
omiga[82]=1.64
迭代次数为:34
omiga[83]=1.66
迭代次数为:36
omiga[84]=1.68
迭代次数为:39
omiga[85]=1.7
迭代次数为:44
omiga[86]=1.72
迭代次数为:50
omiga[87]=1.74
迭代次数为:55
omiga[88]=1.76
迭代次数为:63
omiga[89]=1.78
迭代次数为:76
omiga[90]=1.8
迭代次数为:89
omiga[91]=1.82
迭代次数为:110
omiga[92]=1.84
迭代次数为:144
omiga[93]=1.86
迭代次数为:207
omiga[94]=1.88
迭代次数为:361
omiga[95]=1.9
迭代次数为:1412
解向量为: -0.289238  0.345434 -0.712811 -0.220607 -0.430398  0.154309-0.0578219
 0.201054   0.29023
最小迭代次数为:10*/

⌨️ 快捷键说明

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