高斯消元法的C++实现

150 篇文章 ¥59.90 ¥99.00
本文介绍了如何使用C++实现高斯消元法解决线性方程组。通过部分主元消去法将方程组转化为上三角形矩阵,再利用回代求解,给出了一段具体的C++代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

高斯消元法的C++实现

高斯消元法是一种用于解线性方程组的数值方法,它通过一系列的行变换将方程组转化为简化的上三角形或对角形矩阵,从而求解未知数的值。在本文中,我们将详细介绍如何使用C++语言实现高斯消元法,并附上相应的源代码。

首先,让我们定义一个包含方程组系数和常数项的矩阵。假设有n个未知数和n个方程,我们可以使用一个n x (n+1)的二维数组来表示这个矩阵。其中,矩阵的前n列存储方程组系数,最后一列存储常数项。

#include <iostream>
using namespace std;

const int MAX_SIZE =
#include #include #include #include using namespace std; //申明外联函数 //void gauss(); void select_main(int k,float **p,int m); void show(int m,int n,float **p); void answer(int m,int n,float **p); int gain_m(); int gain_n(int m); void guass(int m,int n,float **p); //********************************************* //主函数体 void main() { int m=gain_m(); int n=gain_n(m); cout<<endl<<"行数为:"<<m<<endl; cout<<"列数为:"<<n<<endl; //定义m行n列的动态数组 float **p=new float*[m]; for(int i=0;i>a;) { fn[jishu]=a; jishu++; } for(i=0;i<m;i++) { for(int j=0;j<n;j++) { *(*(p+i)+j)=fn[i*n+j]; } } //show(m,n,p); guass(m,n,p); cout<<endl; cout<<"高斯消元后的到的行列式为:"<<endl; show(m,n,p); answer(m,n,p); } //列主元函数 void select_main(int k,float **p,int m) { double d; d=*(*(p+k)+k); //cout<<d; int l=k; int i=k+1; for(;i fabs(d)) { d=*(*(p+i)+k); l=i; } else continue; } if(d==0) cout<<"错误"; else { if(k!=l) { for(int j=k;j<m+1;j++) { double t; t=*(*(p+l)+j); *(*(p+l)+j)=*(*(p+k)+j); *(*(p+k)+j)=t; } } } } //显示具有m行n列p数组的各元素值 void show(int m,int n,float **p) { for(int i=0;i<m;i++) { for(int j=0;j<n;j++) {cout<<*(*(p+i)+j)<<" ";} cout<<endl;}//数组创建成功 cout<<endl; } //计算并输出x的解 void answer(int m,int n,float **p) { *(*(p+m-1)+n-1)=*(*(p+m-1)+n-1) / *(*(p+m-1)+n-2); //cout<<*(*(p+m-1)+n-1)<=0;i--) { float a=0; for(int j=i+1;j<m;j++) { a=a + (*(*(p+i)+j) * *(*(p+j)+m)); } // cout<<a<<endl; *(*(p+i)+n-1)= (*(*(p+i)+n-1) - a) / *(*(p+i)+i); } cout<<"方程组的解为:"<<endl; for(i=0;i<m;i++) { cout<<"x"<<i+1<<"="; cout<<*(*(p+i)+n-1)<<endl; } } //获得行列式的行数 int gain_m() { ifstream fin("p59.txt"); int f=0; for(string str;getline(fin,str);) { cout<<str<>a;) { element++; } return element/m; } void guass(int m,int n,float **p) { for(int k=0;k<m;k++) { select_main(k,p,m);//调用列主元函数 for(int i=1+k;i<m;i++) { *(*(p+i)+k)=(float) *(*(p+i)+k) / *(*(p+k)+k); } for(i=k+1;i<m;i++) { for(int j=k+1;j<n;j++) { *(*(p+i)+j)=(*(*(p+i)+j)) - (*(*(p+i)+k)) * (*(*(p+k)+j)); } *(*(p+i)+k)=0; } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值