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

📄 sor.cpp

📁 用SOR迭代法求解线性方程组 线性方程组的超松弛法
💻 CPP
字号:
#include"math.h"
#include<iostream>
using namespace std;
#define MAX 12                 //定义最大迭代次数
void Jacobi(int n,double **A,double b[],double X[],double w,double e){
	int i,j,flag;             //flag标志位,记录满足条件的t[i]的个数
	double *t=new double[n];  //记录迭代前后迭代解向量的距离
	double *Y=new double[n];  
	double *X_T=new double[n];
	cout<<"刚输入的矩阵为:"<<endl;                    //输出矩阵A
	cout<<"**********************************"<<endl;
	for(i=0;i<n;i++){
		for(j=0;j<n;j++)
			cout<<A[i][j]<<'\t';
		cout<<endl;
	}
	cout<<"**********************************"<<endl;
	for(int k=0;k<MAX;k++){                        //迭代过程
		flag=0;
		for(i=0;i<n;i++){
			Y[i]=0;
			for(j=0;j<n;j++){
				if(i!=j)
					Y[i]=Y[i]+A[i][j]*X[j];
			}
			X_T[i]=(1-w)*X[i]+w*(b[i]-Y[i])/A[i][i];
			t[i]=fabs(X[i]-X_T[i]);                //计算迭代前后迭代解向量的距离
		    X[i]=X_T[i];
		}
		for(i=0;i<n;i++)                         //检验达到要求精度的解的分量的个数
			if(t[i]<=e)
				flag++;        
		if(flag==n){                           //如果全部都达到精度,输出
			cout<<"迭代次数为:"<<endl;
			cout<<(k+1)<<endl;
			break;
		}
	}                                         //迭代不成功,退出,输出
	if(k==MAX)
		cout<<"迭代不成功,超出最大迭代次数 "<<MAX<<",退出!"<<endl;
delete []t;
delete []X_T;                                 //释放空间
delete []Y;
}

void main(){
	int n,i,j;
	cout<<"请输入矩阵的阶数:"<<endl;
	cin>>n;
	double **A=new double*[n];                //动态申请空间,存放系数矩阵A
	for(i=0;i<n;i++)
		A[i]=new double[n];
	cout<<"请按行优先输入系数矩阵A:"<<endl;
	for(i=0;i<n;i++)
		for(j=0;j<n;j++)
			cin>>A[i][j];
	double w;
	cout<<"请输入超松弛因子:"<<endl;
	cin>>w;
	double e;
	cout<<"请输入期望的精度:"<<endl;
	cin>>e;
	double *X=new double[n];                 //预先定义初次迭代解向量为0
	for(i=0;i<n;i++)
		X[i]=0;
	double *b=new double[n];
	cout<<"请输入向量b :"<<endl;
	for(i=0;i<n;i++)
		cin>>b[i];
    Jacobi(n,A,b,X,w,e);
    cout<<"求得的解向量为:"<<endl;
	for(i=0;i<n;i++)
		cout<<X[i]<<'\t';
	cout<<endl;
	delete[]X;                            //释放内存空间
	delete[]b;
	for(i=0;i<n;i++)
		delete[]A[i];
	delete []A;
}

⌨️ 快捷键说明

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