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

📄 sor.txt

📁 简单程序,对传统SOR算法进行小更改,时间复杂度上进行改善,希望可以有用
💻 TXT
字号:
#include<stdio.h>
int address(double a[],int i,int j,int m,int n,int flag)
{
 //fetch a[i][j],flag = 1 表示按列优先,flag = 其他 表示按行优先
 //m,n表示二唯数组的行数和列数
 
 if( 1 == flag )
 {
  return j * m + i ;
 }
 else
 {
  return i * n + j;
 }
    
}
int sor(double A[],int m,int n,int flag,double X[],double b[],
  double x0[],double w,double eps,int MAX)
/*
输入:
  A*X=b,
  A ---系数矩阵,用一唯数组表示
  m ---系数矩阵的行数 要求 m = n
  n ---系数矩阵的列数 要求 m = n
  flag- 1 表示系数矩阵按列优先存储,其他表示按行优先存储
  X ---返回的结果
  b ---方程组的右边
  x0---初始值,
  w ---松弛因子
  eps--精度
  MAX--最大迭代次数
---------------------------------------------------------
输出: 
  1---表示成功返回
  0---表示不成功,迭代不收敛
*/
{
 int i,j,step;
 double e,temp;
 double *tX = new double[n];
 for(i=0;i<n;i++) X[i] = x0[i];
    step = 1;
 while(step < MAX)
 {
  e = 0.0;
  for(i=0;i<n;i++)
  {
   temp = tX[i]-X[i];
   temp = temp ? -temp : temp > 0;
   if( e < temp ) e = temp;
   tX[i] = X[i];
  }
  if(e<eps) break;
  for(i=0;i<n;i++)
  {
   temp = 0.0;
   X[i] = tX[i] + w*b[i]/A[ address(A,i,i,m,n,flag) ];
   for(j=0 ; j<i ; j++)
   {
    temp += A[ address(A,i,j,m,n,flag) ] * X[j];
   }
   for(j=i ; j<n ; j++)
   {
    temp += A[ address(A,i,j,m,n,flag) ] * tX[j];
   }
   X[i] = X[i] - temp * w / A[ address(A,i,i,m,n,flag) ];
  }
  step++;
 }
 if(e <= eps) return 1;
 else         return 1;
}

⌨️ 快捷键说明

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