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

📄 jiekou.cpp

📁 这个程序的主要功能是可以进行插值算法的实现
💻 CPP
字号:
//********************以下是接口程序****************************************
#include<iostream>
#include"sor.h"
using namespace std;

void gs::jiekou(double x)
{        double  u1=x;
	     
//**********通过以下的get函数得到方阵的系数和b向量以及初始化x向量********

         get();           
  
//***********通过以下的out_a_and_b函数输出系数矩阵和b向量****************	                         
	     out_a_and_b();  
  
  
//***********通过以下的out_x函数输出初始化x向量**************************
	     out_x();
	     cout<<endl;
 
		 
//***********通过以下的yunsuan函数求出x向量的值**************************
	     yunsuan(u1);
}

//**************************************************************************


















//*******************以下是gs类的各种成员函数的实现*************************

#include<iostream>
#include<fstream>
#include<iomanip>
#include"sor.h"
using namespace std;

//****************以下是gs类的构造函数******************
gs::gs(int n1,double w1)
{     n=n1;
      x=new double [n];              //生成一个动态一维数组
	  b=new double [n];              //生成一个动态一维数组
	  int  v=n*n;
	  a=new double [v]; /*生成一个动态一维数组,它在物理存储方面是一维数组,但在使用时是逻辑上的二维数组使用,所以它表示的是二维的系数矩阵。*/
      w=w1;        //给松弛因子赋值。
}

//*******************************************************

//****************以下是gs类的析构函数******************
gs::~gs()
{  delete x;
   delete b;
   delete a;
}

//*******************************************************************

//*****************以下是get函数的实现部分***************************
void gs::get()
{   cout<<"按行的顺序输入矩阵的系数和b的值!"<<endl;
    //以下两个循环给系数矩阵a和向量b赋值以及初始化向量x
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){  cout<<" "; 
		                       cin>>a[i*n+j];      }
						  cout<<" ";
		                  cin>>b[i];
						  x[i]=0;
						  cout<<endl;                     }        
}

//*******************************************************************
//*****************以下是out_a_and_b函数的实现部分********************
void gs::out_a_and_b()
{   cout<<"按行的顺序输出矩阵的系数和b的值!"<<endl;
	for(int i=0;i<n;i++){
		for(int j=0;j<n;j++){  cout<<setw(8)<<a[i*n+j];
		                       ofstream ofile("sor1.txt",ios::app);
							   ofile<<setw(8)<<a[i*n+j];               }
		                  
		                  ofstream ofile1("sor1.txt",ios::app);
                          ofile1<<endl;
						                      
						  cout<<setw(8)<<b[i]<<endl;
						  ofstream ofile("sor2.txt",ios::app); 
						  ofile<<setw(8)<<b[i]<<endl;

	}        
}
//************************************************************************

//*****************以下是out_x函数的实现部分****************************
void gs::out_x()
{   cout<<"输出 x 向量的数据如下: "<<endl;
for(int i=0;i<n;i++){     cout<<setw(8)<<x[i];
                          ofstream ofile("sor3.txt",ios::app);
						  ofile<<setw(8)<<x[i];                        
                                                              }   
                          cout<<endl;        
}
//****************************************************************************














//****************以下是SOR算法的实现部分******************************

#include<iostream>
#include<math.h>
#include<fstream>
#include<iomanip>
//#include <stdlib.h>
#include"sor.h"
using namespace std;

void gs::yunsuan(double u)
{            
            
            for(int k=0; ;k++){    double fabsx=0;       //这里k是指的迭代的次数
           
				 for(int i=0;i<n;i++){    double c=0;
			                          double XI=x[i];
						    for(int j=0;j<n;j++) c+=a[i*n+j]*x[j];/*这里必须先求出然后代入下面的式子中去*/
						    x[i]=x[i]+w*(b[i]-c)/a[i*n+i];/*这里求出第i个未知数,然后存入原来的第i个存储空间,当作k+1迭代的数据,然后用于以后的迭代*/
							
							if(fabs(XI-x[i])>fabsx) fabsx=fabs(XI-x[i]);
							
			                cout<<setw(15)<<x[i];
							ofstream ofile("sor4.txt",ios::app); /*将结果存入 sor4.txt文本文件中*/
				            ofile <<setw(15)<<x[i];//设置宽度                    }
			 cout<<endl; 
			 ofstream ofile("sor4.txt",ios::app);
			 ofile <<endl;
			 
			if (fabsx<u)break;                                         }

			cout<<endl<<"迭代次数 k= "<<k+1<<endl;
			
		    ofstream ofile("sor5.txt");  //将迭代次数存入sor5.txt文本文件
			ofile<<endl<<"迭代次数k= "<<k+1<<endl;
			
}
//***********

⌨️ 快捷键说明

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