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

📄 sor

📁 收集的C语言算法程序
💻
字号:
SOR迭代2007-07-16 18:43#include<iostream>
#include<math.h>
using namespace std;
#define n 3                      //以三阶为例
#define err 0.0000001
#define N 80
#define w 0.55

void main()
{
int i,j,k;
double a[n][n],b[n],x[n],y[n],tempsum1=0,tempsum21=0,tempsum22=0,tempsum3=0,sum=0;

cout<<"Please input the matrix of coefficients:"<<"\n";
for(i=0;i<n;i++)
for(j=0;j<n;j++)
cin>>a[i][j];

cout<<"Please input the right part:"<<"\n";
for(i=0;i<n;i++)
cin>>b[i];

cout<<"Please input the initializing vector x:\n";
for(i=0;i<n;i++)
{
cout<<"x["<<i+1<<"]"<<"=";
     cin>>x[i];
}
k=1;                                     
while(1)
{ 
   for(j=1;j<n;j++)
      tempsum1+=a[0][j]*x[j];         
      y[0]=(1-w)*x[0]+w*(b[0]-tempsum1)/a[0][0];
     
   for(i=1;i<n-1;i++)
   {
      for(j=0;j<=i-1;j++)             
    tempsum21+=a[i][j]*y[j];     
   for(j=i+1;j<n;j++)
          tempsum22+=a[i][j]*x[j];      
   y[i]=(1-w)*x[i]+w*(b[i]-tempsum21-tempsum22)/a[i][i];
      }
      for(j=0;j<n-1;j++)
   tempsum3+=a[n-1][j]*y[j];          
      y[n-1]=(1-w)*x[n-1]+w*(b[n-1]-tempsum3)/a[n-1][n-1];
     
   for(i=0;i<n;i++)
   sum+=(y[i]-x[i])*(y[i]-x[i]);
      sum=sqrt(sum);                             
if(sum<err) {cout<<"The result is:\n";for(i=0;i<n;i++) cout<<"x["<<i+1<<"]="<<x[i]<<"\n";break;}
else 
{
   if(k<N) {k=k+1;for(i=0;i<n;i++) x[i]=y[i];tempsum1=0;tempsum21=0;tempsum22=0;tempsum3=0;sum=0;}        
      else {cout<<"Error Warning,calculator is unable to determine the reslut!\n";break;}    
}
}
}
//SOR迭代是Seidel迭代的加速。w称为松弛因子。对于某些特殊的矩阵,可以寻找其最优松弛因子。
 

⌨️ 快捷键说明

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