高斯列主消元法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语言编程实现
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 ----------⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦嘿嘿,到这里基本就可以大功搞成了。
最新3高斯列主元消去法汇总
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k];
}
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
}
message();
}
exchange(intr,intk)
{
inti;
for(i=1;i<=n+1;i++)
{
temp=fabs(A[i][k]);
flag=i;
}
returntemp;
}
message()
{
printf("\n\n Go on Enter ,Exit press Esc!");
switch(getch())
{
caseEnter: main();
caseEsc: exit(0);
default:{printf("\n\nInput error!");message();}
a[i][j]=a[mi][j];
a[mi][j]=tmp;
}
}
for(j=i+1;j<n;j++)
{ tmp=-a[j][i]/a[i][i];
b[j]+=b[i]*tmp;
for(k=i;k<n;k++)
a[j][k]+=a[i][k]*tmp;
}
}
x[n-1]=b[n-1]/a[n-1][n-1];
message();
main()
{
floatx[NUMBER];
数值分析_列主元高斯消元法_直接LU分解
一.实验要求二.算法描述三.实验代码//列主元高斯消元法#include<iostream>#include<cmath>using namespace std;double A[100][100];//系数矩阵double b[100];//右端项double x[100];//结果double e;//用于溢出控制int n;//矩阵n*n大小int main(){cout << "----列主元高斯消元法----\n";cout << "请输入矩阵的大小n及e:"; cin >> n >> e;//1.输入A,b,ecout << "请输入系数矩阵:" << endl;for (int i = 1; i <= n; i++)for (int j = 1; j <=n; j++)cin >> A[i][j];cout << "请输入右端矩阵:" << endl;for (int i = 1; i <= n; i++)cin >> b[i];for (int k = 1; k <= n - 1; k++)//2.选主元及消元{double T = A[k][k]; int ik = k;for(int l = k + 1; l <= n; l++)if(A[l][k]>T){ T = A[l][k]; ik = l; }if (T < e){ cout << "求解失败." << endl; exit(0);}if (ik != k){double temp;for (int l = 1; l <= n; l++)//交换ik行和k行{temp = A[ik][l]; A[ik][l] = A[k][l]; A[k][l] = temp;}temp = b[ik]; b[ik] = b[k]; b[k] = temp;//交换b_ik 和bk}for (int i = k + 1; i <= n; i++){T = A[i][k] / A[k][k];b[i] = b[i] - T*b[k];for (int j = k + 1; j <= n; j++){A[i][j] = A[i][j] - T*A[k][j];}}}//3.回代if (abs(A[n][n]) <= e){ cout << "求解失败." << endl; exit(0); }x[n] = b[n] / A[n][n];for (int i = n - 1; i >= 1; i--){double sum = 0;for (int j = i + 1; j <= n; j++)sum += A[i][j] * x[j];x[i] = (b[i] - sum) / A[i][i];}cout << "结果:" << endl;//打印xifor (int i = 1; i <= n; i++)cout << x[i] << " ";cout << endl;return 0;}//直接LU分解法#include<iostream>#include<cmath>using namespace std;double A[100][100];//系数矩阵double b[100];//右端项double u[100][100];//u矩阵double l[100][100];//l矩阵double y[100];//中间变量double x[100];//结果double e;//用于溢出控制int n;//矩阵n*n大小int main(){cout << "----直接LU分解法----\n";cout << "请输入矩阵的大小n及e:"; cin >> n >> e;//1.输入A,b,ecout << "请输入系数矩阵:" << endl;for (int i = 1; i <= n; i++)for (int j = 1; j <= n; j++)cin >> A[i][j];cout << "请输入右端矩阵:" << endl;for (int i = 1; i <= n; i++)cin >> b[i];//2.计算u_kj,l_ikfor (int k = 1; k <= n; k++){for (int j = k; j <= n; j++){double sum = 0;for(int m = 1; m <= k - 1; m++)sum += l[k][m] * u[m][j];u[k][j] = A[k][j] - sum;if (abs(u[k][k])<e){ cout << "求解失败." << endl;exit(0); }for (int i = k + 1; i <= n; i++){sum = 0;for (int m = 1; m <= k - 1; m++)sum += l[i][m] * u[m][k];l[i][k] = (A[i][k] - sum) / u[k][k];}}//3.求解LY=by[1] = b[1];for (int i = 2; i <= k; i++){double sum = 0;for(int j = 1; j <= i - 1; j++)sum += l[i][j] * y[j];y[i] = b[i] - sum;}//4.求解UX=Yx[n] = y[n] / u[n][n];for (int i = n - 1; i >= 1; i--){double sum = 0;for(int j = i + 1; j <= n; j++)sum += u[i][j] * x[j];x[i] = (y[i] - sum) / u[i][i];}}cout << "结果:" << endl;//5.打印xifor (int i = 1; i <= n; i++)cout << x[i] << " ";cout << endl;return 0;}四.实验结果。
用Gauss列主元消去法求解方程组
\\本程序适用于n个方程,n个未知数的线性代数方程组# include "stdio.h"# include"math.h"# define eps 1e-8# define n 2\\以上为定义部分main(){int t,i,j,k;double T,m[3][3],x[3];double A[3][3]={{2,2,3},{4,7,7},{-2,4,5}};double b[3]={3,1,-7};\\以上为输入部分for(k=0;k<n;k++){t=k;for(i=k+1;i<=n;i++){if(fabs(A[t][k])<fabs(A[i][k]))t=i;}\\寻找第k列的主元素(绝对值最大的数)for(j=k;j<=n;j++){T=A[t][j];A[t][j]=A[k][j];A[k][j]=T;}T=b[k];b[k]=b[t];b[t]=T;\\把主元素及其所在的行与第k行交换if(fabs(A[k][k])<=eps){printf("fail!");exit();}\\判断系数矩阵的行列式的值是否为0,确定是否有唯一解for(i=k+1;i<=n;i++){m[i][k]=A[i][k]/A[k][k];for(j=k+1;j<=n;j++){A[i][j]=A[i][j]-m[i][k]*A[k][j];}b[i]=b[i]-m[i][k]*b[k];A[i][k]=0.000000;}\\消元,把第k列对角线以下的系数通过矩阵变换化为0 for(i=0;i<=n;i++){for(j=0;j<=n;j++)printf("%f\t",A[i][j]);printf("%f\n",b[i]);}printf("\n");}\\输出消元后的系数矩阵和右端项\\上述过程为消元过程,以下为回代过程if(fabs(A[n][n])<=eps){printf("A[%d][%d]=0,fail!",n,n);exit(); }\\判断是否有唯一解elsex[n]=b[n]/A[n][n];\\最后一行求解xnfor(i=n-1;i>=0;i--){for(j=i+1;j<=n;j++){ b[i]=b[i]-A[i][j]*x[j];}x[i]=b[i]/A[i][i];}\\从n-1行依次求解x(n-1) (x1)printf("Result is:\n");for(i=0;i<=n;i++)printf("X%d=%f\t",i,x[i]);}\\输出结果。
3高斯列主元消去法8页word文档
3.高斯列主元消去法,求解其次线性方程组C/C++ codeprintf("Now input b(i),i,j=0...%d:\n",n-1); for(i=0;i<n;i++)scanf("%f",&b[i]);for(i=0;i<n-2;i++){ for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++) if(fabs(a[j][i])>mx){ mi=j;mx=fabs(a[j][i]);if(i<mi){ tmp=b[i];b[i]=b[mi];b[mi]=tmp;for(j=i;j<n;j++){ tmp=a[i][j];a[i][j]=a[mi][j];a[mi][j]=tmp;for(j=i+1;j<n;j++){ tmp=-a[j][i]/a[i][i];b[j]+=b[i]*tmp;for(k=i;k<n;k++)a[j][k]+=a[i][k]*tmp;x[n-1]=b[n-1]/a[n-1][n-1];for(i=n-2;i>=0;i--){ x[i]=b[i];for(j=i+1;j<n;j++)x[i]-=a[i][j]*x[j];x[i]/=a[i][i];for(i=0;i<n;i++)printf("Answer:\n x[%d]=%f\n",i,x[i]); getch();return0;#include<math.h>#include<stdio.h>#define NUMBER 20#define Esc 0x1b#define Enter 0x0dfloat A[NUMBER][NUMBER+1] ,ark;int flag,n;exchange(int r,int k);float max(int k);message();main()float x[NUMBER];int r,k,i,j;char celect;clrscr();printf("\n\nUse Gauss.");printf("\n\n1.Jie please press Enter.");printf("\n\n2.Exit press Esc.");celect=getch();if(celect==Esc)exit(0);printf("\n\n input n=");scanf("%d",&n);printf(" \n\nInput matrix A and B:");for(i=1;i<=n;i++)printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i);for(j=1;j<=n+1;j++) scanf("%f",&A[i][j]);for(k=1;k<=n-1;k++)ark=max(k);if(ark==0)printf("\n\nIt's wrong!");message();else if(flag!=k)exchange(flag,k);for(i=k+1;i<=n;i++)for(j=k+1;j<=n+1;j++)A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];x[n]=A[n][n+1]/A[n][n];for( k=n-1;k>=1;k--)float me=0;for(j=k+1;j<=n;j++)me=me+A[k][j]*x[j];x[k]=(A[k][n+1]-me)/A[k][k];for(i=1;i<=n;i++)printf(" \n\nx%d=%f",i,x[i]); message();exchange(int r,int k)int i;for(i=1;i<=n+1;i++)A[0][i]=A[r][i];for(i=1;i<=n+1;i++)A[r][i]=A[k][i];for(i=1;i<=n+1;i++)A[k][i]=A[0][i];float max(int k)int i;float temp=0;for(i=k;i<=n;i++)if(fabs(A[i][k])>temp)temp=fabs(A[i][k]);4.龙贝格求积公式,求解定积分C/C++ codesum+=(f(p)+f(q))/2;return(h*sum);void main(){ int i;int n=N,m=0;float T[MAX+1][2];T[0][1]=LBG(a,b,n);n*=2;for(m=1;m<MAX;m++){ for(i=0;i<m;i++)T[i][0]=T[i][1];T[0][1]=LBG(a,b,n);n*=2;for(i=1;i<=m;i++)T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e)) { printf("Answer=%f\n",T[m][1]); getch();return ;希望以上资料对你有所帮助,附励志名言3条:1、宁可辛苦一阵子,不要苦一辈子。
3高斯列主元消去法
floatsum=0,h=(q-p)/n;
for(i=1;i<n;i++)
sum+=f(p+i*h);
sum+=(f(p)+f(q))/2;
return(h*sum);
}
voidmain()
{inti;
intn=N,m=0;
floatT[MAX+1][2];
T[0][1]=ቤተ መጻሕፍቲ ባይዱBG(a,b,n);
message();
main()
{
floatx[NUMBER];
intr,k,i,j;
charcelect;
clrscr();
printf("\n\nUse Gauss.");
printf("\n\n1.Jie please press Enter.");
printf("\n\n2.Exit press Esc.");
{
me=me+A[k][j]*x[j];
}
x[k]=(A[k][n+1]-me)/A[k][k];
}
for(i=1;i<=n;i++)
{
printf(" \n\nx%d=%f",i,x[i]);
}
message();
}
exchange(intr,intk)
{
inti;
for(i=1;i<=n+1;i++)
{for(j=i+1,mi=i,mx=fabs(a[i][j]);j<n-1;j++)
高斯列主元素消去法算法C++
#include<iostream>#include<fstream>#include<stdlib.h>#include<math.h>#define eps 0.0000000005using namespace std;void exchange(double A[3][3],double b[],int p,int q); void xiaoyuan(double A[3][3],double b[],int p,int n); void gauss(double A[3][3],double b[],int n);int main(int argv,char argc[]){double A[3][3];A[0][0]=0.00000001;A[0][1]=2;A[0][2]=3;A[1][0]=-1;A[1][1]=3.712;A[1][2]=4.623;A[2][0]=-2;A[2][1]=1.072;A[2][2]=5.643;double b[3]={1,2,3};gauss(A,b,3);return 0;}void exchange(double A[3][3],double b[],int p,int q,int n) {for(int i=0;i!=n;i++){double temp=0;temp=A[p][i];A[p][i]=A[q][i];A[q][i]=temp;}double temp=0;temp=b[p];b[p]=b[q];b[q]=temp;//cout<<"b[]"<<b[p]<<" "<<b[q]<<endl;}void xiaoyuan(double A[3][3],double b[],int p,int n) {cout<<"消元"<<endl;for(int i=p;i!=n-1;i++){cout<<"i="<<i<<endl;double temp=(0-A[i+1][p])/A[p][p];for(int j=p;j!=n;j++){A[i+1][j]=A[i+1][j]+A[p][j]*temp;cout<<A[i+1][j]<<" ";}b[i+1]=b[i+1]+b[i]*temp;cout<<b[i+1];}}void gauss(double A[3][3],double b[],int n){for(int k=0;k!=n-1;k++){double max=0;int index=k;cout<<A[k][k];max=A[k][k];for(int i=k+1;i!=n;i++){if(fabs(A[i][k])-fabs(max)>0){max=A[i][k];index=i;}}cout<<endl<<max<<endl;if(fabs(max)<eps){cout<<"无解"<<endl;exit(1);}if(k!=index){exchange(A,b,k,index,n);}xiaoyuan(A,b,k,n);system("PAUSE");}if(fabs(A[n-1][n-1])<eps){cout<<"无解"<<endl;exit(1);}//cout<<"b="<<endl;for(k=n-1;k!=-1;k--){cout<<b[k]<<" ";}cout<<endl;for(int i=n-1;i!=-1;i--){double sum=0;for(int j=i;j!=n-1;j++){double temp=0;temp=A[i][j+1]*b[j+1];sum=sum+temp;}b[i]=(b[i]-sum)/A[i][i];cout<<b[i]<<endl;}}。
高斯列主消元法求解方程 c语言程序报告
HUNAN UNIVERSITY 程序设计训练报告专业班级材料科学与工程四班指导老师院长 (系主任)2012 年6 月30 日目录1 软件开发平台 (1)2 软件功能说明 (1)2.1 功能分析说明 (1)2.2 功能说明图 (4)3 软件设计详细内容 (5)3.1 采用的主要数据结构类型 (5)3.2 流程图 (5)4 软件测试 (11)4.1 软件测试用例 (11)4.2 软件测试报告 (16)5 总结和致谢 (16)6 附录 (17)6.1 源码 (17)6.2 二人分工说明 (22)6.3 参考文献 (22)1软件开发平台Visul C++ 6.02软件功能说明用高斯列主消元法求解方程个数不超过15个的线性方程组2.1 功能分析说明线性方程组可以表示为以下形式:通解于:方程等价于AX=b对其增广矩阵进行初等行换不改变方程组的解,从而将其化为简单形式来求解方程组。
|A|= (-1)21(j j t)3jn j a11j a22j…a njn&calculate(intn,int m)功能:quanpailie_A()功能: 计算一个全排列(-1)21(j j t )3jn j a 11j a 22j …a njn 的值gauss_row_xiaoqu()功能: 将增广矩阵通过交换两行的方法使得第一列中a 11绝对值最大第二行各元素分别减去第一行对应元素的a 21/a 11倍,使得a 21化为零; 第三行各元素分别减去第一行对应元素的a 31/a 11倍,使得a 31化为零; 同理将a 31,a 41…a 1n 都化为零;通过交换两行的方法使得第一列中a 22绝对值最大第三行各元素分别减去第二行对应元素的a 32/a 22倍,使得a 32化为零; 第四行各元素分别减去第二行对应元素的a 42/a 22倍,使得a 42化为零; 同理将a 32,a 42…a 2n 都化为零;以此类推,可将主对角线下的元素全化为零,变为上三角矩阵。
高斯消元法程序
高斯消元法程序一、引言高斯消元法是一种求解线性方程组的常用方法,通过将线性方程组转化为行阶梯形矩阵,进而求得方程组的解。
本文将介绍高斯消元法的原理和实现过程,并给出一个简单的高斯消元法的程序示例。
二、高斯消元法原理高斯消元法的核心思想是通过矩阵的初等行变换,将线性方程组转化为行阶梯形矩阵,进而求解方程组的解。
具体的步骤如下:1. 构造增广矩阵:将线性方程组的系数矩阵和常数向量合并成一个增广矩阵。
2. 第一步消元:通过初等行变换,使得增广矩阵的第一列除第一个元素外的其他元素都变为0。
3. 逐列消元:对于增广矩阵的每一列(除第一列外),重复以下步骤:a. 找到当前列中第一个非零元素所在的行,并将该行交换到当前列的第一行。
b. 通过初等行变换,使得当前列的第一个元素下方的所有元素都变为0。
4. 回代求解:从最后一行开始,逐步回代求解出方程组的解。
三、高斯消元法程序示例下面给出一个简单的高斯消元法的程序示例,该程序使用C语言编写:```c#include <stdio.h>#define N 3 // 方程组的未知数个数void gauss_elimination(double A[N][N+1], double x[N]) { int i, j, k;double factor, tmp;// 第一步消元for (i = 0; i < N; i++) {factor = A[i][i];for (j = i; j < N + 1; j++) {A[i][j] /= factor;}for (k = i + 1; k < N; k++) {factor = A[k][i];for (j = i; j < N + 1; j++) {A[k][j] -= factor * A[i][j];}}}// 回代求解for (i = N - 1; i >= 0; i--) { tmp = 0;for (j = i + 1; j < N; j++) { tmp += A[i][j] * x[j]; }x[i] = A[i][N] - tmp;}}int main() {double A[N][N+1] = {{2, 1, -1, 8},{-3, -1, 2, -11},{-2, 1, 2, -3}};double x[N];int i;gauss_elimination(A, x);printf("方程组的解为:\n"); for (i = 0; i < N; i++) {printf("x[%d] = %f\n", i, x[i]);}return 0;}```程序中,`gauss_elimination`函数实现了高斯消元法的过程,`main`函数中给出了一个包含3个未知数的线性方程组的示例,程序输出了方程组的解。
- 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];
}
}。