列主元高斯消去法C++源文件
更新时间:2023-03-19 09:11:02 阅读量: 人文社科 文档下载
- 选列主元高斯消去法推荐度:
- 相关推荐
VC2010 + win7makefile编译,makefile在源文件头部
/*
编译环境 windows7 系统下 使用visual studio 2010
使用VC++6.0 可能会用少许不兼容,修改一下即可
Copyright of 唐禹
Edited in 2010/11/01
Builed in 2010/11/01
Version 1.1
*/
/****************************************************
---------------------Makefile 文件------------------
zy.exe: zy.obj
@link /subsystem:console zy.obj
zy.obj:
@echo "Compiling zy......."
@cl /c zy.cpp
clean:
@echo "正在清除项目....."
@del zy.obj zy.exe
@echo "项目清除完成"
run:
@zy
********************************************************/
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int N; //方程的阶数,改用变量,可以由使用者决定方程阶数,程序更加灵活
double Main_Element; //记录每次选择的主元
double **A;
double **B;
double **A_B;
double **X;
/*用于试验的方程组
{3,1,6};
A= {2,1,3};
{1,1,1};
B= {2,7,4};
求的根为:X={19,-7,-8};
*/
/*
为变量分配存储空间,初始化系数矩阵
*/
void Init_Data();
/*
销毁变量空间
*/
void Destroy_Data();
/*
求方程组Ax=B的增广矩阵A_B
*/
double** AUB(int N,double **A,double **B,double **A_B);
/*
用于显示矩阵的详细参数,row x col 型
*/
void Show_Matrix(double **A,int row,int col);
/*
用于横向显示向量,N x 1 型
*/
void Show_Result(int x/*表征解的个数*/,int N);
int Gauss_Colum_Main_Element(
int n, //方程阶数
double **A, //系数矩阵
double **B, //
double e); //精度控制
/*
确定列主元素所在行,并返回行号
*/
int Choose_Colum_Main_Element(
int n, //方程阶数
double**A, //系数矩阵
int start);
/*
交换矩阵L1,L2 两行
*/
void Exchange(double **A,int num_of_colum,int L1,int L2);
/*
单位化系数矩阵,更准确地说是将矩阵 A的左上角nxn 个分块矩阵单位化
*/
double **Unitization(int n/*方程阶数*/,double**A /*系数矩阵*/);
/*
对确定好列主元素的矩阵进行消元处理
*/
void Elimination(int n,double**A,int start);
/*主函数*/
int main()
{
bool willgo;
do
{
Init_Data();
Show_Result(Gauss_Colum_Main_Element(N,A,B,0),N);
cout<<"退出(0)还是继续求解其他方程组(1)?"<<endl;
Destroy_Data();
cin>>willgo;
}while(willgo);
return 0;
}
//以下部分是对前面声明的函数的具体实现,相应的功能参看前面声明部分
//初始化数据
void Init_Data()
{
cout<<"请输入方程的阶数:"<<
;endl;
cin>>N;
while(N<=0)
{
cout<<"请输入有效的方程阶数"<<endl;
cin>>N;
}
A=new double*[N];
B=new
VC2010 + win7makefile编译,makefile在源文件头部
double*[N];
A_B=new double*[N];
X=new double*[N];
for(int i=0;i<N;i++)
{
A[i]=new double[N];
B[i]=new double[1];
A_B[i]=new double[N+1];
X[i]=new double[1];
}
cout<<"您选择了"<<N<<"阶方程组计算.\n 请输入系数矩阵 A(按行输入):"<<endl;
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
cin>>A[i][j];
}
}
cout<<"请输入矩阵B:"<<endl;
for(int i=0;i<N;i++)
{
cin>>B[i][0];
}
AUB(N,A,B,A_B);
}
//销毁数据
void Destroy_Data()
{
for(int i=0;i<N;i++)
{
delete A[i];
delete B[i];
delete A_B[i];
delete X[i];
}
delete A;
delete B;
delete A_B;
delete X;
}
//求增广矩阵
double** AUB(int N,double **A,double **B,double **A_B)
{
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
A_B[i][j]=A[i][j];
}
A_B[i][N]=B[i][0];
}
return A_B;
}
//输出矩阵A 的row x col 个元素
void Show_Matrix(double **A,int row,int col)
{
cout<<endl;
for(int i=0;i<row;i++)
{
cout<<"|";
for(int j=0;j<col;j++)
{
cout<<setw(10)<<A[i][j];
}
cout<<" |";
cout<<endl;
}
cout<<endl;
}
//输出最终结果
void Show_Result(int x,int N)
{
if(x==0) // Gauss_Colum_Main_Element返回0,无解
{
cout<<"由于消元过程中出现主元小于所设定的精度,且此时增广矩阵中B!~0\n"
<<"所以:方程无解"<<endl;
return ;
}
if(x==-1) // Gauss_Colum_Main_Element返回-1,为任意解
{
cout<<"方程组为任意解"<<endl;
return ;
}
cout<<"所求方程组的根为:(x1,x2,x3)=( ";
for(int i=0;i<N;i++)
{
cout<<X[i][0]<<" ,";
}
cout<<"\b)."<<endl<<endl;
}
//高斯列主元消去法的主调函数
int Gauss_Colum_Main_Element(
int N, //方程阶数
double **A, //系数矩阵
double**B, //
double e) //精度控制
{
cout<<endl<<"Ax=B的增广矩阵为:"<<endl;
Show_Matrix(A_B,N,N+1);
cout<<"解方程Ax=B的过程如下:"<<endl;
for(int i=0;i<N;i++)
{
int row=Choose_Colum_Main_Element(N,A_B,i);
if(Main_Element<=e) goto A_0;
Exchange(A_B,N+1,row,i);
Elimination(N,A_B,i);
cout<<"选取列主元后第"<<i+1<<"次消元:"<<endl;
Show_Matrix(A_B,N,N+1);
}
Unitization(N,A_B);
cout<<"单位化之后的结果:"<<endl;
Show_Matrix(A_B,N,N+1);
for(int i=0;i<N;i++)
{
X[i][0]=A_B[i][N];
}
return 1;
A_0: //如果出现增广矩阵中|A|~0 的情况处理如下
f
or(int i=0;i<N;i++)
{
//增广矩阵中|B|!~0
if(abs(A_B[i][N])>e) return 0;
}
//增广矩阵中|B|~0,即方程解为任意解的情况
return -1;
}
//选取主
VC2010 + win7makefile编译,makefile在源文件头部
元素,并返回主元所在的行
int Choose_Colum_Main_Element(int n,double**A,int start)
{
int row=start;
double max=abs(A[start][start]);
for(int i=start;i<n;i++)
{
if(max<abs(A[i][start]))
{
row=i;
max=A[i][start];
}
}
Main_Element=max;
return row;
}
//交换L1,L2 行
void Exchange(double **A,int num_of_colum,int L1,int L2)
{
double temp;
for(int i=0;i<num_of_colum;i++)
{
temp=A[L1][i];
A[L1][i]=A[L2][i];
A[L2][i]=temp;
}
}
//消元过程函数(消元其实点为start,start)
void Elimination(int n,double**A,int start)
{
double factor;
for(int i=start+1;i<n;i++)
{
factor=A[i][start]/A[start][start];
for(int j=start;j<n+1;j++)
{
A[i][j]=A[i][j]-factor*A[start][j];
}
}
}
//回带求解,即“单位化”增广矩阵
double **Unitization(int n,double**A)
{
double row_first; //行首元素
//主对角元素单位化
for(int i=0;i<n;i++)
{
row_first=A[i][i];
for(int j=0;j<n+1;j++)
{
A[i][j]=A[i][j]/row_first;
}
}
for(int k=n-1;k>0;k--)
{
for(int i=0;i
<k;i++)
{
double factor=A[i][k];
for(int j=0;j<n+1;j++)
{
A[i][j]=A[i][j]-factor*A[k][j];
}
}
}
return A;
}
正在阅读:
列主元高斯消去法C++源文件03-19
20XX年7月份公司行政秘书工作计划03-19
信息技术期末复习题一12-05
《绿色发展-节约资源和保护环境》2018 继续教育试题及答案03-07
工艺品小学作文06-15
从业人员三级安全教育培训卡10-22
财务会计深度案例11-26
带式运输机上的 同轴式二级圆柱齿轮 减速器 之课程设计05-06
中秋节优秀9篇03-26
- 粮油储藏基础知识
- 论文范文(包括统一封面和内容的格式)
- 经典解题方法
- 综合部后勤办公用品管理办法+领用表
- 学生宿舍突发事件应急预案
- 16秋浙大《生理学及病理生理学》在线作业
- 四分比丘尼戒本(诵戒专用)
- 浙江财经大学高财题库第一章习题
- 九大员岗位职责(项目经理、技术负责人、施工员、安全员、质检员、资料员、材料员、造价员、机管员)
- 旅游财务管理习题(学生版)
- 德阳外国语高二秋期入学考试题
- 投资学 精要版 第九版 第11章 期权市场
- 控制性详细规划城市设计认识
- bl03海运提单3国际贸易答案
- 2010-2011学年湖北省武汉市武珞路中学七年级(上)期中数学试卷
- VB程序填空改错设计题库全
- 教师心理健康案例分析 - 年轻班主任的心理困惑
- 民间借贷司法解释溯及力是否适用?
- 三联书店推荐的100本好书
- 《化工原理》(第三版)复习思考题及解答
- 高斯
- 消去法
- C++
- 源文件
- 厦华彩电总线进入方法__ A
- 什么因素主导着中国黄金市场价格波动_基于2008年_2012年数据的实证分析
- BEC+higher难词解析汇编汇
- 全国计算机等级考试二级ACCESS试题及答案
- 行政管理学作业
- 素质大赛班会设计
- 豫东平原夏玉米高产优质制种技术措施研究
- 新希望年报(000876)年度报告2011年(食品酒茶财务风险)新希望六和股份有限公司_九舍会智库
- 小区智能化系统讲解1
- CCK 型催化裂化进料喷嘴及其工业应用
- VF程序题库
- 服务合作协议模板
- 腹部损伤病人的护理
- 我的大学 励志
- 2012无机化学B卷答案及评分标准1
- 华师版本七年级上册第一章走进数学世界(1)
- 锈蚀钢筋与混凝土动态粘结性能的试验研究
- 房地产预警系统研究综述
- 2016新南威尔士大学专业
- 民族的脊梁