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

📄 gaosixiaoqufa.txt

📁 高斯消去法
💻 TXT
字号:
//高斯消去法

#include <iostream.h>
#include <iomanip.h>

int lines;         //矩阵的维数
float **matra;    //数组首地址,存放增广矩阵
float *solution;  //存放方程组的解
void linequ(int lns);   //构造函数,形参为维数,动态分配matra的存储空间
void _linequ();    //释放matra的空间
void inmatrix();   //输入增广矩阵matra初值
void printl();    //显示线性方程组
void showx();     //输出方程组的解
void solve1();     //求解函数(高斯消去法/列选主元素法/全主元素法)

//主函数
void main()
{
 cout<<"Input lines:";   //屏幕提示输入矩阵行数
 cin>>lines;       //输入行数
 linequ(lines);   //动态生成一个具有lines行的增广矩阵matra
 //提示输入矩阵数据
 cout<<"Input "<<lines*(lines+1)<<" numbers that will form the line_equation:"<<endl;
 inmatrix();   //输入增广矩阵数据
 printl();     //输出方程组(以增广矩阵形式)
 solve1();      //求解方程
 showx();      //输出方程组的解
 _linequ();    //释放动态分配的空间
}

//各函数实现
//构造函数,形参为维数
void linequ(int lns)
{
 lines=lns;
 matra=new float*[lines];   //动态内存分配(存放增广矩阵),lines*(lines+1)
 for(int i=0;i<lines;i++)
	 matra[i]=new float[lines+1];
 solution=new float[lns];  //动态分配解向量内存
}
//析构函数,释放解向量和增广矩阵内存空间
void _linequ()
{
 delete [] solution;  //释放内存
 for(int i=0;i<lines;i++)
     delete [] matra[i];
 delete [] matra;
}
//增广矩阵输入函数
void inmatrix()
{
 int i,j;
 for(i=0;i<lines;i++)   //共lines行
     for(j=0;j<lines+1;j++)   //每行lines+1列
	     cin>>setprecision(6)>>matra[i][j];   
}
//显示现行方程组
void printl()
{
 cout<<"The line_equation is:"<<endl;
 cout<<"--------------------------------"<<endl;
 for(int i=0;i<lines;i++)
 {
	 for(int j=0;j<lines+1;j++)
	     cout<<setw(15)<<setprecision(6)<<matra[i][j]<<" ";  //每行占15格
	 cout<<endl;
 }
}
//输出方程组的解
void showx()
{
 cout<<"---------------------------------"<<endl;
 cout<<"The result is:"<<endl;
 cout<<"---------------------------------"<<endl;
 for(int i=0;i<lines;i++)
    cout<<"X["<<i<<"]="<<setprecision(6)<<solution[i]<<endl;
}
//求解函数
void solve1()   //高斯消去法
{
 int k,i,j;
 float d,t;
 for(k=1;k<lines;k++)     //消去过程--将系数矩阵消成上三角形
     {
	  for(i=k;i<lines;i++)
	      {
		   float factor=-matra[i][k-1]/matra[k-1][k-1];
		   for(j=k-1;j<lines+1;j++)
		      matra[i][j]+=matra[k-1][j]*factor;
		  }
	 }
	    //消去过程结束

 d=matra[lines-1][lines-1];
 solution[lines-1]=matra[lines-1][lines]/d;  //回代过程
 for(i=lines-2;i>=0;i--)
     {
	  t=0.0;
	  for(j=i+1;j<=lines-1;j++)
	      t+=matra[i][j]*solution[j];
      solution[i]=(matra[i][lines]-t)/matra[i][i];
	 }

}









⌨️ 快捷键说明

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