📄 gaosi.h
字号:
#include"stdlib.h"
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<math.h>
class CGaosi_Xiaoyuan
{
protected:
float **xishu_juzhen; //系数矩阵
float *jie_juzhen; //解矩阵
float *changshu_juzhen; //常数矩阵
int num_of_jieshu; //方程的阶数
int n; //精确位数
protected:
int XiaoYuan();
int QiuJie();
int Print_xiaoyuan_fangcheng();
public:
CGaosi_Xiaoyuan(char *,int);
~CGaosi_Xiaoyuan();
void Print_yanshi_fangcheng();
void Print_result();
};
CGaosi_Xiaoyuan::CGaosi_Xiaoyuan(char *File_name,int m)
{
ifstream input(File_name); //打开数据文件
if(!input) //如果不能打开就报错
{
cout<<"con't open the file"<<endl;
exit(0);
}
else
{
input>>num_of_jieshu; //读入方程的阶数
xishu_juzhen=new float*[num_of_jieshu]; //开辟系数矩阵内存
changshu_juzhen=new float[num_of_jieshu];//开辟常数矩阵内存
jie_juzhen=new float[num_of_jieshu]; //开辟解矩阵内存
for(int i=0;i<num_of_jieshu;i++)
{
xishu_juzhen[i]=new float[num_of_jieshu];
for(int j=0;j<num_of_jieshu;j++) //读入系数矩阵
input>>xishu_juzhen[i][j];
input>>changshu_juzhen[i]; //读入常数矩阵
jie_juzhen[i]=0; //把解向量初始化为0
}
}
n=m; //计算精度
}
CGaosi_Xiaoyuan::~CGaosi_Xiaoyuan()
{
for(int i=0;i<num_of_jieshu;i++)
delete []xishu_juzhen[i];
delete [] changshu_juzhen;
delete [] jie_juzhen;
delete [] xishu_juzhen;
}
int CGaosi_Xiaoyuan::XiaoYuan() //消元
{
float temp;
for(int k=0;k<num_of_jieshu-1;k++)
{
if(xishu_juzhen[k][k]==0) //判断能否进行到底
{
cout<<"error! con't go on"<<endl;
return 0;
}
for(int i=k+1;i<num_of_jieshu;i++)
{
temp=xishu_juzhen[i][k]/xishu_juzhen[k][k];
for(int j=k;j<num_of_jieshu;j++)
xishu_juzhen[i][j]-=temp*xishu_juzhen[k][j];
changshu_juzhen[i]-=temp*changshu_juzhen[k];
}
}
return 1;
}
int CGaosi_Xiaoyuan::QiuJie() //迭代求解
{
if(!XiaoYuan())
return 0;
else
for(int i=num_of_jieshu-1;i>=0;i--)
{
float temp=0;
for(int j=i+1;j<num_of_jieshu;j++)
temp+=xishu_juzhen[i][j]*jie_juzhen[j];
jie_juzhen[i]=(changshu_juzhen[i]-temp)/xishu_juzhen[i][i];
}
return 1;
}
void CGaosi_Xiaoyuan::Print_yanshi_fangcheng() //打印原始方程
{
cout<<"你要求解的方程为:"<<endl;
for(int i=0;i<num_of_jieshu;i++)
{
for(int j=0;j<num_of_jieshu-1;j++)
cout<<setiosflags(ios::fixed)<<setprecision(n)<<
setw(10)<<xishu_juzhen[i][j]<<"X"<<j<<"+";
cout<<setw(10)<<xishu_juzhen[i][num_of_jieshu-1]<<"X"<<num_of_jieshu-1;
cout<<setw(10)<<"="<<changshu_juzhen[i];
cout<<endl;
}
}
int CGaosi_Xiaoyuan::Print_xiaoyuan_fangcheng() //打印消元后的方程组
{
if(!QiuJie())
{
cout<<"不能求解 A[k][k]=0"<<endl;
return 0;
}
else
{
cout<<"消元后方程变为:"<<endl;
for(int i=0;i<num_of_jieshu;i++)
{
for(int j=0;j<num_of_jieshu-1;j++)
cout<<setiosflags(ios::fixed)<<setw(10)<<setprecision(n)
<<xishu_juzhen[i][j]<<"X"<<j<<"+";
cout<<setw(10)<<xishu_juzhen[i][num_of_jieshu-1]<<"X"<<num_of_jieshu-1;
cout<<setw(10)<<"="<<changshu_juzhen[i]<<endl;
}
}
return 1;
}
void CGaosi_Xiaoyuan::Print_result() //打印结果
{
if(Print_xiaoyuan_fangcheng())
{
cout<<"得到的解为:"<<endl;
for(int i=0;i<num_of_jieshu;i++)
cout<<setiosflags(ios::fixed)<<setw(7)<<setprecision(n)
<<setw(5)<<"X"<<i<<"="<<jie_juzhen[i]<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -