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

📄 sor.cpp

📁 常用数值算法的C++源码
💻 CPP
字号:
#include "stdio.h"
#include "math.h"
double   *x,*temp;

int Sor(int *a,int *b,int n,double w,double e)
{
	int    i,j,m=0;
	double d,sum,max=e+1;
	while(max>e)
	{
		for(i=0;i<n;i++)
		{
			j=0;
			sum=0;
			temp[i]=x[i];
			while(j<i)
			{
				sum=sum+x[j]*a[i*n+j];
				j++;
			}
		    for(j=i+1;j<n;j++)
				sum=sum+x[j]*a[i*n+j];
			x[i]=(1-w)*x[i]+w*(b[i]-sum)/a[i*n+i];
		}
		
		max=fabs(x[0]-temp[0]);
	    for(i=1;i<n;i++)
		{
			d=fabs(x[i]-temp[i]);
		    if(d>max) max=d;
		}
		m++;
	}
	return m;
}

void main()
{
	int    a[81]={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};
	int    b[9] ={-15,27,-23,0,-20,12,-7,7,10};
	int    m,n=9;
	double w;
	double e=0.5*pow(10,-5);
	double x1[9],x2[9];
	FILE   *fp=fopen("SOR.txt","w");
	x=x1;
	temp=x2;
	for(int i=1;i<100;i++)
	{
		w=0.02*i;
		for(int j=0;j<n;j++)
			x1[j]=0;
	    m=Sor(a,b,n,w,e);
		fprintf(fp,"松弛因子为%.2f时\n迭代次数:%d\n解向量:\n",w,m);
	    for(j=0;j<n;j++)
			fprintf(fp,"%9f\n",x[j]);
		fprintf(fp,"\n");
	}
	printf("运行结果保存至文件SOR.txt\n");
}

	




⌨️ 快捷键说明

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