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

📄 sor.cpp

📁 sor方法求解方程组 用c++软件开发的源代码
💻 CPP
字号:
//松弛迭代(SOR)方法

#include <vector>
#include <math.h> 
#include <fstream> 
#include <iostream> 
#include <stdio.h> 
#include <stdlib.h>

using namespace std;

ofstream out("out.txt");

double operator * (vector<double> a,vector<double> b) 
{ 
	double data=0; 
	if(a.size()==b.size()) 
	{ vector<double> :: iterator it1=a.begin(); 
	  vector<double> :: iterator it2=b.begin(); 
	  for(;it1!=a.end();++it1,++it2) 
	  { data+=((*it2)*(*it1)); } 
} 
	return data;
}

double Delta(vector<double> a,vector<double> b) 
{ 
	double data=0; 
	if(a.size()==b.size()) 
	{ 
		vector<double> :: iterator it1=a.begin(); 
		vector<double> :: iterator it2=b.begin(); 
		for(;(it1!=a.end())&&(it2!=b.end());++it1,++it2) 
		{ 
			if(fabs((*it1)-(*it2))>data) 
			{ data=fabs((*it1)-(*it2)); }
		}
	}
	return data; 
} 
vector<double> GS(vector<vector<double> > A,
vector<double> B,vector<vector<double> > D,
vector<vector<double> > L,
double delta,double w) 
{ 
	vector<double> x1(B.size(),0); 
	vector<double> x2(B.size(),0); 
	do { 
		x1=x2; 
		for(int i=0;i<(int)x2.size();++i) 
		{ 
			double xx=L*x2; 
			xx+=D*x1; x2=(B-xx)/A;
		} 
		for(int i=0;i<(int)x2.size();++i) 
		{ x2=(1-w)*x1+w*x2; } 
	}
	while(Delta(x1,x2)>delta); 
	return x1; 
}

void Print(vector<double> a)
{ 
	vector<double> :: iterator it=a.begin(); 
	for(;it!=a.end();++it) 
	{ 
		cout<<(*it)<<"\t"; 
		cout<<(*it)<<"\t"; 
	} 
	    cout<<endl; out<<endl; 
}

void Print(vector<vector<double> > A) 
{ 
	for(int i=0;i<A.size();++i) 
	{ Print(A); } 
} 
int main() 
{ 
	cout<<"Define the dimension of the matrix:"<<endl; 
	int num; 
	cin>>num; 
	vector<vector<double> > A(num); 
	vector<double> B; for(int i=0;i<num;++i) 
	{ 
		double bb=0; 
		for(int j=0;j<num;++j) 
		{ 
			{ 
				A.push_back(1/((double)i+(double)j+1)); 
				bb+=(1/((double)i+(double)j+1)); 
			} 
		} 
		        
		B.push_back(bb); 
} 
	cout<<"Input the delta:"<<endl; 
	double delta; 
	cin>>delta; 
	cout<<"Input the SOR coefficient:"<<endl; 
	double w; 
	cin>>w; 
	cout<<"The Result is:"<<endl; 
	vector<vector<double> > D; 
	vector<vector<double> > L; 
	for(int i=0;i<(int)A.size();++i) 
	{ 
		vector<double> z(A.size(),0); 
		vector<double> y(A.size(),0); 
		for(int j=0;j<(int)A.size();++j) 
		{ 
			if(j<i) 
			{ z[j]=A[j]; } 
			else if(j>i) { y[j]=A[j]; } 
} 
		D.push_back(y); 
		L.push_back(z); 
} 
	Print(GS(A,B,D,L,delta,w));
	system("PAUSE"); 
} 

⌨️ 快捷键说明

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