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

📄 sor.cpp

📁 算法实验名称: 解线性方程组的超松弛迭代法的c程序 功能说明: 本实验主要写出了解线性方程组Ax=b的超松弛迭代法的C程序代码,并举例进行了运算.
💻 CPP
字号:
/*sorm.c:successive overrelaxation method for linear system.*/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <math.h>
#ifndef EPSILON
#define EPSILON 1.0e-10
#define DIM 4
#define MI 1000
#endif
//#include "sor.h"
int sor1(double (&A)[DIM][DIM],double (&b)[DIM],double (&x)[DIM],double omiga)
{
	static int first=0;
	int i,j,k;
	static double x1[DIM],norm;
	norm=0.0;
	if(first==0)
	{
		srand(time(NULL));
		for(i=0;i<DIM;i++)
		{x[i]=rand();norm=norm+x[i]*x[i];}
        norm=sqrt(norm);
		for(i=0;i<DIM;i++) x[i]=x[i]/norm;
		first=1;
	}
	for(k=0;k<MI;k++)
	{
		for(i=0;i<DIM;i++)
		{
			x1[i]=b[i];
			for(j=0;j<i;j++) x1[i]=x1[i]-A[i][j]*x1[j];
			for(j=i;j<DIM;j++) x1[i]=x1[i]-A[i][j]*x[j];
			x1[i]=x[i]+omiga*x1[i]/A[i][i];
		}
		norm=0.0;
		for(i=0;i<DIM;i++) norm=norm+(x1[i]-x[i])*(x1[i]-x[i]);
		norm=sqrt(norm);
		for(i=0;i<DIM;i++) x[i]=x1[i];
		if(norm<EPSILON) goto endd;
	}
endd:return(k);
}

void main (void)
{
	int i,itime,iter;
	static double A[DIM][DIM]={{0.78,-0.02,-0.12,-0.14},
	{-0.02,0.86,-0.04,0.06},{-0.12,-0.04,0.72,-0.08},
	{-0.14,0.06,-0.08,0.74}};
	static double omiga,x[DIM]={0.0},b[DIM]={0.76,0.08,1.12,0.68};
	system("cls");
	itime=0;
	omiga=1.03;
	printf("SOR iterative method:\n");
    iter=sor1(A,b,x,omiga);
	  itime=itime+iter;
	  if(iter<MI) itime=itime+1;
	  printf("Iterative %3d times.\n",itime);
	  for(i=0;i<DIM;i++) printf("%15.10f\n",x[i]);
	  if(iter<MI)
	  {
		  printf("Success!\n");
		  getch();
	  }
	  else
	  {
		  printf("fail!\n");
		  getch();
	  }
}

⌨️ 快捷键说明

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