📄 gaosixiaoqufa.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 + -