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

📄 新建 文本文档.txt

📁 一些解决线形方程组的并行计算的程序,希望对大家有一点帮助
💻 TXT
字号:
#include <iostream>
#include <stdlib.h>
//#include <stdio.h>
#include <math.h>
using namespace std;
int Jacobi(float x[],float x1[],float matrixB[],float f[],int num);
int main()
{
	int matrixnum;
	cout<<"please put into matrix mension:"<<endl;
	cin>>matrixnum;
	float linebuffer[matrixnum];
	float matrixD[matrixnum];
	float matrixL[matrixnum*(matrixnum-1)/2];
	float matrixU[matrixnum*(matrixnum-1)/2];
	float f[matrixnum];
	float b[matrixnum];//存放方程右边的向量值
	float matrixB[matrixnum];//存放雅可比矩阵B的每行元素
	float x0[matrixnum];     //存放X的初始向量,初始向量全设为0
	float x1[matrixnum];     //存放X的中间结果
	float x[matrixnum];      //存放X的最终结果   
   for(int i=0;i<matrixnum;i++)
    linebuffer[i]=matrixD[i]=matrixB[i]=x0[i]=x1[i]=x[i]=0;
   for(int i=0;i<matrixnum*(matrixnum-1)/2;i++)
    matrixL[i]=matrixU[i]=0;
    //求矩阵U L  D的逆矩阵
    cout<<"请输入方程右边的向量:"<<endl;
    for(int i=0;i<matrixnum;i++)
	{
		cin>>b[i];
		
	}
	int p=0,q=0,j;
for(int l=0;l<6;l++)
{
	
  for(int i=0;i<matrixnum;i++)
	{
		cout<<"请输入矩阵的第 "<<i+1<<"行~!"<<endl;
		for(int h=0;h<matrixnum;h++)
	     cin>>linebuffer[h];
		
		for(int m=0;m<matrixnum;m++)
        matrixB[m]=0;
	
	  for(j=0;j<matrixnum;j++)
	  {
	  	if(i==j)
		matrixD[i]=1/linebuffer[i];
	    else if(i<j)
	      { 
		     matrixU[p]=linebuffer[j];
		     p++;
	      }
		else
		  {
		     matrixL[q]=linebuffer[j];
		     q++;
		  }
	        
	   }
	   f[i]=matrixD[i]*b[i];
	   for(int l=0;l<matrixnum;l++)
	      cout<<matrixD[l];
	 //int y=0;
	 for(int j=0;j<matrixnum;j++)
	 {
	  if(i!=j)
	  matrixB[j]=-linebuffer[j]*matrixD[i];
	     //y++;
	  	}
	 for(int n=0;n<matrixnum;n++)
       //cout<<x1[i]<<endl;
       cout<<matrixB[n];
       	float temp=0;
	  for(int h=0;h<matrixnum;h++)
	   {
	   
	   	temp+=matrixB[h]*x1[h];
	   }
	   	x[i]=temp+f[i];
		//cout<<matrixB[h]<<endl;
	  
	  //cout<<x[i]<<endl;
	  //Jacobi(x,x1,matrixB,f,matrixnum);
    }
    for(int i=0;i<matrixnum;i++)
     x1[i]=x[i];
      
    //for(int i=0;i<matrixnum;i++)
       //cout<<x1[i]<<endl;
}
   for(int i=0;i<matrixnum;i++)
       cout<<x1[i]<<endl;

	//求公式里面的f  f=Db
 //for(int i=0;i<matrixnum;i++)
	//cout<<x[i]<<endl;
	//Jacobi(x,x1,matrixB,f,matrixnum);
	//for(int i=0;i<matrixnum;i++)
	 // cout<<f[i]<<endl;
	  
	  	
	  
	
	
	//for(j=0;j<matrixnum*(matrixnum-1)/2;j++)
	  // {
	   	//cout<<matrixL[j]<<endl;
	   	//cout<<matrixU[j]<<endl;
      // }
	
	// for(int h=0;h<matrixnum;h++)
	//{
		//cout<<linebuffer[h];
         //cout<<matrixB[h]<<endl;
	    //cout<<matrixD[h]<<endl;
		//cout<<matrixL[h]<<endl;
		//cout<<matrixU[h]<<endl;
	//}
	return 0;
	
}

//雅可比迭代
/*int Jacobi(float x[],float x1[],float matrixB[],float f[],int num)
{
	int t=1;
	int i=0;
   	while(t<=6)
   	{
   		for(i=0;i<num;i++)
   		{
   			float temp=0;
   			//for(j=0;j<num;j++)
   			  temp+=matrixB[i]*x[i];
   			  x1[i]=temp+f[i];
   		}
   		
   		for(i=0;i<num;i++)
   		  x[i]=x1[i];
   		  t++;
   		
   		
   		
   		
   	}
	
	
	return 0;
}
*/

⌨️ 快捷键说明

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