高斯列主消元法C语言实现
高斯消去法和列主元高斯消去法解线性方程组的程序(C语言)精品资料

//Gauss消去法解线性方程组
//参考教材《计算方法教程》第二版,西安交通大学出版社
#include<stdio.h>
int main(void)
{
float A[7][7]={{3,-5,6,4,-2,-3,8},
{1,1,-9,15,1,-9 ,2},
for(k=0;k<size-1;k++)
{
max=fabs(A[k][k]);
col=k;
//查找最大元素所在的行
for(i=k;i<size;i++)
{
if(max<fabs(A[i][k]))
{
max=fabs(A[i][k]);
col=i;
}
}
printf("col:%d\n",col);
for(j=k;j<size;j++)
printf("\n\n");
//消去过程
for(k=0;k<size-1;k++)
{
if(!A[k][k])
return -1;
for(i=k+1;i<size;i++)
{
Aik=A[i][k]/A[k][k];
for(j=k;j<size;j++)
{
A[i][j]=A[i][j]-Aik*A[k][j];
{
A[i][j]=A[i][j]-Aik*A[k][j];
}
b[i]=b[i]-Aik*b[k];
}
高斯列主元消元法的VC语言代码

【这是自己编写的程序,请自己阅读着使用。
】/*shuzhi1*/#include <stdio.h>#define C 3void main(){float A[C][C];float b[C];float X[C];float t,r,s;int i,j,k,m,n;printf("Please input A:\n");for(i=0;i<=C-1;i++){for(j=0;j<=C-1;j++)scanf("%f",&A[i][j]);}printf("The data in the computer is:\nA=\n");for(i=0;i<=C-1;i++){for(j=0;j<=C-1;j++)printf("%4.4f ",A[i][j]);printf("\n");} /*A数据的输入与检验*/printf("Is there any mistake? Press 1 for yes,Press 0 for no! ");scanf("%d",&k);for(;k==1;){printf("Please input the adress(i,j) of the error data: ");scanf("%d",&i);scanf("%d",&j);printf("Please input the right data: ");scanf("%f",&t);A[i-1][j-1]=t;printf("The data in the computer is:\nA=\n");for(i=0;i<=C-1;i++){for(j=0;j<=C-1;j++)printf("%4.4f ",A[i][j]);printf("\n");}printf("Is there any mistake? Press 1 for yes,Press 0 for no! ");scanf("%d",&k);} /*修改出错数据*/printf("Please input b:\n");for(i=0;i<=C-1;i++)scanf("%f",&b[i]);printf("The data in the computer is:\nb=\n");for(i=0;i<=C-1;i++)printf("%4.4f ",b[i]); /*b数据的输入与检验*/printf("\nIs there any mistake? Press 1 for yes,Press 0 for no! ");scanf("%d",&k);for(;k==1;){printf("Please input the adress(i) of the error data: ");scanf("%d",&i);printf("Please input the right data: ");scanf("%f",&t);b[i-1]=t;for(i=0;i<=C-1;i++)printf("%4.4f ",b[i]);printf("\nIs there any mistake? Press 1 for yes,Press 0 for no! ");scanf("%d",&k);} /*修改出错数据*//*选择主元*/for(i=0;i<=C-2;i++){for(j=i+1;j<=C-1;j++){if(A[i][i]<=0)r=-A[i][i];elser=A[i][i];if(A[j][i]<=0)s=-A[j][i];elses=A[j][i];if (r<s){for(k=0;k<=C-1;k++){t=0;t=A[j][k];A[j][k]=A[i][k];A[i][k]=t; /*交换A[i]与A[j]*/}t=0;t=b[j];b[j]=b[i];b[i]=t; /*交换b*/}}printf("After %d change,the the A and b are:\n\n",i+1);for(m=0;m<=C-1;m++){for(n=0;n<=C-1;n++)printf("%4.4f ",A[m][n]);printf("b[%d]=%4.4f ",m+1,b[m]);printf("\n");}printf("\n"); /*打印变化后的数组*/for(m=i+1;m<=C-1;m++){t=(-A[m][i]);for(n=0;n<=C-1;n++)A[m][n]=A[m][n]+(A[i][n]/A[i][i])*t;b[m]=b[m]+b[i]/A[i][i]*t;}for(m=0;m<=C-1;m++){for(n=0;n<=C-1;n++)printf("%4.4f ",A[m][n]);printf("b[%d]=%4.4f ",m+1,b[m]);printf("\n");}printf("\n");} /*主元消零并打印当前数组*//*迭代求X[C]*/for(i=0;i<=C-1;i++)X[i]=0;for(i=C-1;i>=0;i--){t=0;for(j=i+1;j<=C-1;j++)t=t+A[i][j]*X[j];X[i]=(b[i]-t)/A[i][i];}printf("The answer of 'Ax=b' is:\n");for(i=0;i<=C-1;i++)printf("X[%d]=%4.4f ",i,X[i]);printf("\n");/*程序结束*/}。
[vip专享]Gauss列主元法的C语言编程实现
![[vip专享]Gauss列主元法的C语言编程实现](https://img.taocdn.com/s3/m/09a1ee5eda38376bae1fae56.png)
scanf("%f", &array[i][j]); } printf("\n"); } for(i=0; i<4; i++) { for(j=0; j<5; j++) {
printf("%8.4f",array[i][j]); } printf("\n"); } printf("\n\n\n\n\n\n"); for(k=0;k<=3;k++) { m = k; for(i=k+1;i<=3;i++) {
C
//消元过程//
“” 21P961P9610 3 2 1 4 3 2 271 1
3 “” 2 413“” 2 1 5
“”
for(j=0;j<=4;j++)
{
array[i][j] = array[i][j] - s * array[k][j];
}
} }
} for(i=0;i<4;i++) {
for(j=0;j<5;j++) {
1 320082 1 3
3 2 1 “” 23WOR1D
21
23WOR1DWO-R--DWwOoRrdDw1ordword
Gauss 列主元法的 C 语言编程实现
用高斯列主元消去法解线性方程组 Ax=b。 编程思路:在消元之前,在剩余的元素中选取绝对值最大的为主元,并将其换 到主元的位置,以防止出现小数被大数吃掉的现象。然后再将矩阵化为三角矩 阵,按照高斯消去法进行计算,最后进行回代求解。
实验三 编程实现列主元高斯消去法

实验三编程实现列主元高斯消去法1.实验目的:实现高斯主消元法,对计算过程加深理解。
2.实验内容:编写c++程序,实现对角占优方程组的编程求解。
3.实验步骤1、设计方程组的存储为二位数组,最大方程组数为100,第i行j列的元素值代表第i个方程的第j个系数,输入时没有的系数项填0。
2 对于每个方程按主消元法从0~n-1依次消元。
3迭代求解,对于第i个未知数的值,依次迭代i+1~n-1已求出的结果4.实验结果分析:对于除数很小的情况程序不能很好的解决,对于不是对角占优的也不能搜索出主元素,以后在进一步解决上述问题。
#include<iostream>using namespace std;const int MAX=100;double str[MAX][MAX];int main(){while(1){cout<<"输入方程组个数0<n<100"<<endl;int n,m,i,j,k,flag=0;cin>>n;if(n<=0||n>=100)break;cout<<"输入方程组的系数"<<endl;for(i=0;i<n;i++){for(j=0;j<=n;j++){cin>>str[i][j];if(i==j&&str[i][j]==0)flag=1;}}if(flag==1){cout<<"方程组不是对角占优的,此程序不能解决"<<endl;system("pause");return 0;}for(i=0;i<n;i++){for(j=n;j>=i;j--)//对角变一str[i][j]/=str[i][i];for(k=i+1;k<n;k++)//方程消元{double tem=str[k][i]/str[i][i];for(j=i;j<=n;j++){str[k][j]-=str[i][j]*tem;}}}double ans[MAX]={0};ans[n-1]=str[n-1][n];for(i=n-2;i>=0;i--){ans[i]=str[i][n];for(j=n-1;j>i;j--)ans[i]-=str[i][j]*ans[j];}for(i=0;i<n;i++)cout<<"X"<<i+1<<" = "<<ans[i]<<endl;system("pause");}}。
高斯列主消元法C语言实现

高斯列主消元法C语言实现#include<stdio.h>#include<math.h>void Guess(double a[][10],double b[],double x[],int n); intmain() {intii,jj;double a[10][10] = {{1,2,1},{2,2,3},{-1,-3,0}};double b[10] = {0,3,2};double x[10];intk,n=3;Guess(a,b,x,n);printf("三角化矩阵A:\n");for(ii=0; ii<n; ii++) {for(jj=0; jj<3; jj++) {printf("%7.2lf",a[ii][jj]);}printf("\n");}printf("\n方程数值b:\n");printf("\n");printf("\n求得的函数值x:\n");for(ii=0; ii<n; ii++) printf("%7.2lf",x[ii]);printf("\n");double aa[10][10] = {{2,1,0,0},{1,3,1,0},{0,1,1,1},{0,0,2,1}};double bb[10] = {1,2,2,0};n = 4;Guess(aa,bb,x,n);printf("\n\n三角化矩阵A:\n");for(ii=0; ii<n; ii++) {for(jj=0; jj<n; jj++) {printf("%7.2lf",aa[ii][jj]);}printf("\n");}printf("\n方程数值b:\n");for(ii=0; ii<n; ii++) printf("%7.2lf",bb[ii]);printf("\n");printf("\n求得的函数值x:\n");printf("\n");}void Guess(double a[][10],double b[],double x[],int n) { intk,ii,jj;//Guess法化下三角矩阵for(k=0; k<n-1; k++) {//找主元double maxi = a[k][k];int tab = k;for(ii=k+1; ii<n; ii++) {if(fabs(maxi)<fabs(a[ii][k])) {maxi = a[ii][k];tab = ii;}}double mid;mid = b[k];b[k] = b[tab];b[tab] = mid;for(ii=k; ii<n; ii++) {mid = a[k][ii];a[k][ii] = a[tab][ii];a[tab][ii] = mid;}//三角化for(ii=k+1; ii<n; ii++) {b[ii]=b[ii]-a[ii][k]/a[k][k]* b[k];for(jj=k+1; jj<n; jj++) {a[ii][jj]=a[ii][jj]-a[ii][k]/a[k][k]*a[k][jj];}a[ii][k]=0;}}//回代求解x值for(k=n-1; k>=0; k--) {double s =0;for(jj=k+1; jj<n; jj++) s += a[k][jj]*x[jj];x[k]=(b[k]-s)/a[k][k];}}。
列主元高斯消去法c++程序

列主元高斯消去法c++程序#include#include#includeusing namespace std;int main(){int N,row,colum; //定义方程组的阶数row=0; //列主元所在行colum=0; //主元所在列int L1=0; ////int L2=0;double max;double L0=1; //系数cout<<"请输入方程组的阶数"<<endl; cin>>N;double *B=new double[N+1];double **A=new double*[N]; //定义增广矩阵for (int i=0;i<n;i++)A[i]=new double[N+1]; //指针//A[N][N+1]={5,3,7,8,9,3,6,7,5,6,5,3};cout<<"请输入增广矩阵"<<endl;for ( i=0;i<n;i++){for (int j=0;j<n+1;j++){cin>>A[i][j];}}max=A[0][0];cout<<"增广矩阵A为:"<<endl;for ( i=0;i<n;i++){for (int j=0;j<n+1;j++){cout<<setw(5)<<a[i][j];}cout<<'\n';}for (L1=0;L1<n-1;l1++){for (i=L1;i{if(max{max=A[i][L1]; //L2换成L1row=i;} //列主元所在行,L1表示初始列元所在行}for (int j=0;j{B[j]=A[row][j];A[row][j]=A[L1][j];A[L1][j]=B[j];}cout<<"选取主元后的增广矩阵A为:"<<endl; for ( i=0;i<n;i++){for (int j=0;j<n+1;j++){cout<<setw(15)<<a[i][j];}cout<<'\n';}//消主元for ( i=L1+1;i<n;i++){L0=A[i][L1]/A[L1][L1]; //L0=A[i][L2]/A[L1][L2];for (int j=0;j<n+1;j++){A[i][j]=A[i][j]-A[L1][j]*L0;}}cout<<"第"<<l1+1<<"一次消元后的矩阵为"<<endl; for ( i=0;i<n;i++){for (int j=0;j<n+1;j++){cout<<setw(15)<<a[i][j];}cout<<'\n';}}return 0;}</setw(15)<<a[i][j];</n+1;j++)</n;i++)</l1+1<<"一次消元后的矩阵为"<<endl; </n+1;j++)</n;i++)</setw(15)<<a[i][j];</n+1;j++)</n;i++)</endl;</n-1;l1++)</setw(5)<<a[i][j];</n+1;j++)</n;i++)</endl;</n+1;j++)</n;i++)</endl;</n;i++)</endl;。
列主元高斯消元法的C语言编程及列管式换热器设计

列主元高斯消元法的C语言编程及列管式换热器设计主元高斯消元法(Gaussian Elimination)是一种线性代数中常用的求解线性方程组的方法。
它可以被用于列管式换热器的设计中,来计算热交换器的换热性能。
下面是用C语言实现主元高斯消元法的代码:```c#include <stdio.h>#include <stdlib.h>#define SIZE 10void swapRow(double matrix[SIZE][SIZE], int row1, int row2, int n)for(int i = 0; i <= n; i++)double temp = matrix[row1][i];matrix[row1][i] = matrix[row2][i];matrix[row2][i] = temp;}void printMatrix(double matrix[SIZE][SIZE], int n)for(int i = 0; i < n; i++)for(int j = 0; j <= n; j++)printf("%lf ", matrix[i][j]);}printf("\n");}void gaussianElimination(double matrix[SIZE][SIZE], int n) for(int i = 0; i < n; i++)//列中绝对值最大的元素int maxRow = i;for(int j = i + 1; j < n; j++)if(abs(matrix[j][i]) > abs(matrix[maxRow][i]))maxRow = j;}}//交换行swapRow(matrix, i, maxRow, n);//消元for(int j = i + 1; j < n; j++)double factor = matrix[j][i] / matrix[i][i];for(int k = i; k <= n; k++)matrix[j][k] = matrix[j][k] - factor * matrix[i][k];}}}void backSubstitution(double matrix[SIZE][SIZE], double solution[SIZE], int n)for(int i = n - 1; i >= 0; i--)solution[i] = matrix[i][n];for(int j = i + 1; j < n; j++)solution[i] -= matrix[i][j] * solution[j];}solution[i] /= matrix[i][i];}int maiint n;printf("请输入未知数的个数:");scanf("%d", &n);double matrix[SIZE][SIZE];double solution[SIZE];//输入方程组的系数矩阵和常数列printf("请输入方程组的系数矩阵和常数列(以空格分隔):\n"); for(int i = 0; i < n; i++)for(int j = 0; j <= n; j++)scanf("%lf", &matrix[i][j]);}}//打印输入的矩阵printf("输入的矩阵为:\n");printMatrix(matrix, n);//利用高斯消元法求解方程组gaussianElimination(matrix, n);//利用回代法求解解向量backSubstitution(matrix, solution, n);//打印解向量printf("解向量为:\n");for(int i = 0; i < n; i++)printf("x%d = %lf\n", i+1, solution[i]);}return 0;```上述代码实现了主元高斯消元法的求解过程,通过键盘输入方程组的系数矩阵和常数列,然后计算出解向量。
解线性代数方程组的直接法之Gauss主元消去法及其C++编程代码

解线性代数方程组的直接法—Gauss 主元消去法最近学习数值分析,为了能够边学习边训练编程,笔者决定对于所学算法一一分析记录,也便于自己以后复习时候的查阅,在这里顺便和大家共享一下我的学习经验,共勉今天主要写的是求解线性方程组的直接法之一Gauss 主元消去法 的基本算法步骤和用C++编程实现的具体过程,内容比较简单,代码已经经过测试,可以直接使用。
首先就是Gauss 顺序消去法的基本原理:主元消去法只是在顺序消元法进行前采取选主元措施。
对于Ax=b 这样一非齐次线性方程组,要求解x 列向量,利用线性代数方面的知识,我们可以对(A|b)这样一个增广矩阵做初等行变换,化为矩阵A 下三角为零的形式。
这个时候再进行回代操作就可以计算出来x 列向量啦。
例如:对矩阵Ax=b;111213*********,11,21,31,,1,2,3,A n n n n n n n n n n n n a a a a a a a a a a a a a a a a ----⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦ ... ... = ... ... ... ,121...n n b b b b b -⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦ 则对应A 的增广矩阵如下:11112131212223221,11,21,31,1,1,2,3,.........(A |b).........n n n n n n n n n n n n nn b a a a a a a a a b a a a a b a a a a b -----⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎣⎦第一步:以(A|b)的第一行为基,对的第2行到第n 行进行初等行变换; 假设110a ≠,将第1行的111i a a -倍加到第i 行(i=2,3,…,n),通式为 (2)(1)1111(j 1,2,...,n,n 1)i ij ij j a a a a a =-=+ 注意这里的j 是从1到n+1取值的; a ij 的上标(1),(2)只是用来表示数据a ij 前一时刻和当前时刻的值经过消元,增广矩阵(A|b)变成下面的形式:(1)(1)(1)(1)(1)11112131(2)(2)(2)(2)222232(2)(2)(2)(2)1,21,31,1(2)(2)(2)(2),2,3, 0...(A |b)......0...0...nnn n n n n n n n nn b a a a a b a a a a a a b a a a b ----⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦到这里,第一步就进行完啦,下来的第2步一直到第n-1步都和上面道理一样,那么进行完n-1步以后,我们得到这样一个增广矩阵:(1)(1)(1)(1)(1)111121,11(2)(2)(2)(2)2222,2(n 1)(n 1)(n 1)1,11,1(n 1)(n 1), 0...(A |b)......00 (00)...0n nnnn n n n n n nn b a a a a b a a a a a b a b ----------⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦嘿嘿,到这里基本就可以大功搞成了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高斯列主消元法C语言实现
#include<stdio.h>
#include<math.h>
void Guess(double a[][10],double b[],double x[],int n); intmain() {
intii,jj;
double a[10][10] = {{1,2,1},{2,2,3},{-1,-3,0}};
double b[10] = {0,3,2};
double x[10];
intk,n=3;
Guess(a,b,x,n);
printf("三角化矩阵A:\n");
for(ii=0; ii<n; ii++) {
for(jj=0; jj<3; jj++) {
printf("%7.2lf",a[ii][jj]);
}
printf("\n");
}
printf("\n方程数值b:\n");
printf("\n");
printf("\n求得的函数值x:\n");
for(ii=0; ii<n; ii++) printf("%7.2lf",x[ii]);
printf("\n");
double aa[10][10] = {{2,1,0,0},{1,3,1,0},{0,1,1,1},{0,0,2,1}};
double bb[10] = {1,2,2,0};
n = 4;
Guess(aa,bb,x,n);
printf("\n\n三角化矩阵A:\n");
for(ii=0; ii<n; ii++) {
for(jj=0; jj<n; jj++) {
printf("%7.2lf",aa[ii][jj]);
}
printf("\n");
}
printf("\n方程数值b:\n");
for(ii=0; ii<n; ii++) printf("%7.2lf",bb[ii]);
printf("\n");
printf("\n求得的函数值x:\n");
printf("\n");
}
void Guess(double a[][10],double b[],double x[],int n) { intk,ii,jj;
//Guess法化下三角矩阵
for(k=0; k<n-1; k++) {
//找主元
double maxi = a[k][k];
int tab = k;
for(ii=k+1; ii<n; ii++) {
if(fabs(maxi)<fabs(a[ii][k])) {
maxi = a[ii][k];
tab = ii;
}
}
double mid;
mid = b[k];
b[k] = b[tab];
b[tab] = mid;
for(ii=k; ii<n; ii++) {
mid = a[k][ii];
a[k][ii] = a[tab][ii];
a[tab][ii] = mid;
}
//三角化
for(ii=k+1; ii<n; ii++) {
b[ii]=b[ii]-a[ii][k]/a[k][k]* b[k];
for(jj=k+1; jj<n; jj++) {
a[ii][jj]=a[ii][jj]-a[ii][k]/a[k][k]*a[k][jj];
}
a[ii][k]=0;
}
}
//回代求解x值
for(k=n-1; k>=0; k--) {
double s =0;
for(jj=k+1; jj<n; jj++) s += a[k][jj]*x[jj];
x[k]=(b[k]-s)/a[k][k];
}
}。