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];
}
高斯列主消元法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++ 高斯消元法

//高斯消元法
voiddoubledoubleint
//消元
forint0
//将第i列的第i+1行以下的元素清零
forint1
double
fororint10
forint1
//打印结果
"Solution:"
forint0
"x"1" = "
int
//例子:3个方程,3个未知数
double211
312
212
double8113
int
//调用高斯消元法
return0
这个示例中,A是系数矩阵,b是常数列,n是方程的个数。gaussianElimination函数执行高斯消元法,得到方程组的解,并打印结果。
请注意,该示例中假设输入的方程组有唯一解。在实际应用中,你可能需要添加对特殊情况(例如奇异矩阵、无解或有无穷解的情况)的处理。
高斯消元法(Gaussian Elimination)是一种线性方程组求解的方法,通常用于解决形如(Ax = b)的线性方程组。在C++中,可以通过编写代码来实现高斯消元法。以下是一个简单的C++示例,用于解决三个未知数的线性方程组:
#include<iostream>
#include<vector>
高斯方法解线性方程组c程序

高斯消去法和高斯主元消去法解线性方程组:高斯消元法:#include<stdio.h>#include<math.h>main(){int gauss(int n,double a[],double b[]); int i;double a[3][3]={{3,-1,4},{-1,2,-2},{2,-3,-2}}; double b[3]={7,-1,0};if(gauss(3,&a[0][0],b)!=0)for(i=0;i<=2;i++)printf("\nx[%d]=%f\n",i,b[i]);}int gauss(int n,double a[],double b[]) {int i,k,j,p,q;double d,t;for(k=0;k<=n-2;k++){d=a[k*n+k];if(d==0)return(0);for(j=k+1;j<=n-1;j++){p=k*n+j;a[p]=a[p]/d;}b[k]=b[k]/d;for(i=k+1;i<=n-1;i++){for(j=k+1;j<=n-1;j++){p=i*n+j;a[p]=a[p]-a[i*n+k]*a[k*n+j];}b[i]=b[i]-a[i*n+k]*b[k];}}d=a[(n-1)*n+n-1];if(fabs(d)+1.0==1.0){printf("fail\n");return(0);}b[n-1]=b[n-1]/d;for(k=n-2;k>=0;k--){t=0.0;for(j=k+1;j<=n-1;j++)t=t+a[k*n+j]*b[j];b[k]=b[k]-t;}return (1);}⎪⎩⎪⎨⎧=---=-+-=+-0232122743321321321x x x x x x x x x结果:x1=2,x2=1,x3=0.5高斯全选主元法:#include<stdio.h>#include<math.h>#include<stdlib.h>main(){int gauss(int n,double a[],double b[]);int i;double a[3][3]={{3,-1,4},{-1,2,-2},{2,-3,-2}}; double b[3]={7,-1,0};if(gauss(3,&a[0][0],b)!=0)for(i=0;i<=2;i++)printf("\nx[%d]=%f\n",i,b[i]);}int gauss(int n,double a[],double b[]){int *js,i,j,L,k,is,p,q;double d,t;js=malloc(n*sizeof(int));L=1;for(k=0;k<=n-2;k++){d=0.0;for(i=k;i<=n-1;i++)for(j=k;j<=n-1;j++){t=fabs(a[i*n+j]);if(t>d){d=t;is=i;js[k]=j;}}if(d+1.0==1.0)L=0;else{if(js[k]!=k)for(i=0;i<=n-1;i++){p=i*n+k;q=i*n+js[k];t=a[p];a[p]=a[q];a[q]=t;}if(is!=k){for(j=k;j<=n-1;j++){p=k*n+j;q=is*n+j;t=a[p];a[p]=a[q];a[q]=t;}t=b[k];b[k]=b[is];b[is]=t;}}if(L==0){free(js);printf("fail\n");return(0);}d=a[k*n+k];for(j=k+1;j<=n-1;j++){p=k*n+j;a[p]=a[p]/d;}b[k]=b[k]/d;for(i=k+1;i<=n-1;i++){for(j=k+1;j<=n-1;j++){p=i*n+j;a[p]=a[p]-a[i*n+k]*a[k*n+j];}b[i]=b[i]-a[i*n+k]*b[k];}}d=a[(n-1)*n+n-1];if(fabs(d)+1.0==1.0){free(js);printf("fail\n");return(0);}b[n-1]=b[n-1]/d;for(i=n-2;i>=0;i--){t=0.0;for(j=i+1;j<=n-1;j++)t=t+a[i*n+j]*b[j];b[i]=b[i]-t;}js[n-1]=n-1;for(k=n-1;k>=0;k--)if(js[k]!=k){t=b[k];b[k]=b[js[k]];b[js[k]]=t;} free(js);return(1);}结果:x1=2,x2=1,x3=0.5。
高斯消去法C语言程序

高斯消去法C语言程序XYYZ 2006年4月9日#include <stdio.h>#include <math.h>#define N 4void main(){int k,i,j,ii=0,jj=0,z[N],tt;double a[N][N],b[N],sum,x[N],y[N],sp,t;printf("请输入原始增广矩阵(按行输入):\n");for(i=0;i<N;i++){for(j=0;j<N;j++)scanf("%lf",&a[i][j]);scanf("%lf",&b[i]);}printf("你输入的原始增广矩阵为:\n");for(i=0;i<N;i++)z[i]=i;for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%f ",a[i][j]);printf("%f\n",b[i]);}printf("\n");for(k=0;k<N-1;k++){ii=k;jj=k;for(i=k;i<N;i++)for(j=k;j<N;j++)if(fabs(a[ii][jj])<fabs(a[i][j])){ii=i;jj=j;}if(a[ii][jj]==0)break;if(ii!=k)for(j=k;j<N;j++){t=0;t=a[ii][j];a[ii][j]=a[k][j];a[k][j]=t;} {t=0;t=b[ii];b[ii]=b[k];b[k]=t;}if(jj!=k)for(i=0;i<N;i++){t=0;t=a[i][jj];a[i][jj]=a[i][k];a[i][k]=t;}{tt=0;tt=z[jj];z[jj]=z[k];z[k]=tt;}for(i=k+1;i<N;i++) /*消元过程*/ {sp=a[i][k]/a[k][k];for(j=k;j<N;j++)a[i][j]=a[i][j]-a[k][j]*sp;b[i]=b[i]-b[k]*sp;}printf("第%d次消元后的结果\n",k+1);for(i=0;i<N;i++){for(j=0;j<N;j++)printf("%f ",a[i][j]);printf("%f\n",b[i]);}printf("\n");}y[N-1]=b[N-1]/a[N-1][N-1]; /*回代过程*/ for(k=N-2;k>=0;k--){sum=0;for(j=k+1;j<N;j++)sum=sum+a[k][j]*y[j];y[k]=(b[k]-sum)/a[k][k];}for(i=0;i<N;i++)printf("z[%d]=%d ",i,z[i]);printf("\n");for(i=0;i<N;i++)x[z[i]]=y[i];for(i=0;i<N;i++)printf("y[%d]=%f ",i,y[i]); printf("\n");for(i=0;i<N;i++)printf("x[%d]=%f ",i,x[i]); printf("\n");}#include<stdio.h>#include <math.h>#define N 20int main(){ int n,i,j,k;int mi,tmp,mx;float a[N][N],b[N],x[N];printf("\nInput n:");scanf("%d",&n);if(n>N){ printf("The input n should in(0,N)!\n");getch();return 1;}if(n<=0){ printf("The input n should in(0,N)!\n");getch();return 1;}printf("Now input a(i,j),i,j=0...%d:\n",n-1); for(i=0;i<n;i++){ for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("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();return 0;}#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]);flag=i;}return temp;{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]);flag=i;}return temp;。
C语言写高斯消元法

高斯消元法C语言程序及其输出结果杨学玉(33)C语言程序:#include <stdio.h>#include <stdlib.h>#include <math.h>#define N 10double a[N+1][N+1],b[N+1],x[N+1];/* 用在此处以便可以让下面的程序也调用*/main(){ int n,i,j,k;double temp;printf("请输入方程组的维数:\n");scanf("%d",&n);if(n>N){printf("错误:元素超过初设定的值%d\n",N);exit(0);}printf("开始输入各元素的值:");for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("请输入元素[%d][%d]",i,j);scanf("%lf",&a[i][j]);}printf("请输入常数b[%d]",j);scanf("%lf",&b[i]);}for(j=1;j<=n-1;j++){for(i=j+1;i<=n;i++){temp=a[i][j]/a[j][j];for(k=1;k<=n;k++){a[i][k]=a[i][k]-temp*a[j][k];}b[i]=b[i]-temp*b[j];}}fun(n,n,a,b);x[n]=b[n]/a[n][n];for(j=n-1;j>=1;j--){x[j]=b[j];for(k=n;k>=j+1;k--){x[j]=x[j]-x[k]*a[j][k];}x[j]=x[j]/a[j][j];}for(j=1;j<=n;j++){printf("x[%d]=%f\n",j,x[j]);}}/*列出高斯消元后得到的数组*/fun(int m,int n,double a[N+1][N+1],double b[N+1]) {int i,j;printf("消元后的矩阵是:\n");for(i=1;i<=m;i++){for(j=1;j<=n;j++){printf("%f",a[i][j]);}printf("\n") ;}}C语言输出结果:Mat-lab。
c语言求矩阵的秩算法
c语言求矩阵的秩算法矩阵的秩是线性代数中一个重要的概念,它表示矩阵中非零行的最大数量。
在C语言中,求矩阵的秩算法可以通过高斯消元法来实现。
高斯消元法是一种线性代数中常用的求解线性方程组的方法,它可以将矩阵化为行阶梯形式,从而方便求解矩阵的秩。
具体实现步骤如下:1. 将矩阵化为增广矩阵,即将矩阵的系数矩阵和常数矩阵合并成一个大矩阵。
2. 对矩阵进行初等行变换,将矩阵化为行阶梯形式。
具体来说,可以通过以下三种初等行变换来实现:(1)交换两行的位置;(2)将某一行乘以一个非零常数;(3)将某一行加上另一行的若干倍。
3. 统计矩阵中非零行的数量,即为矩阵的秩。
下面是C语言实现矩阵秩算法的代码:```#include <stdio.h>#define ROW 3#define COL 3int rank(int matrix[ROW][COL]) {int i, j, k, r, temp;int rank = ROW;for (i = 0; i < rank; i++) {if (matrix[i][i] != 0) {for (j = 0; j < ROW; j++) {if (j != i) {temp = matrix[j][i] / matrix[i][i];for (k = 0; k < rank; k++) {matrix[j][k] -= temp * matrix[i][k]; }}}} else {for (j = i + 1; j < ROW; j++) {if (matrix[j][i] != 0) {for (k = 0; k < rank; k++) {temp = matrix[i][k];matrix[i][k] = matrix[j][k];matrix[j][k] = temp;}break;}}if (j == ROW) {rank--;for (j = 0; j < ROW; j++) {matrix[j][i] = matrix[j][rank];}}i--;}}return rank;}int main() {int matrix[ROW][COL] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};int r = rank(matrix);printf("The rank of the matrix is %d\n", r);return 0;}```在上述代码中,我们定义了一个rank函数来计算矩阵的秩。
C语言中的线性代数运算
C语言中的线性代数运算在计算机编程领域中,线性代数是一门基础而重要的数学学科。
它涉及到向量、矩阵和线性方程组等概念,是许多领域中的核心工具,包括图形处理、数据分析和人工智能等。
一、向量的表示和运算在C语言中,向量可以使用数组来表示。
可以定义一个一维数组来表示一个向量,每个数组元素表示向量的一个分量。
要进行向量的加法、减法和数量乘法,只需对对应的数组元素进行相应的运算即可。
例如,对于两个具有n个分量的向量v和w,它们的加法可以表示为:for(i=0; i<n; i++){v[i] = v[i] + w[i];}二、矩阵的表示和运算矩阵是一个二维数组,在C语言中可以使用二维数组表示。
假设有两个矩阵A和B,它们的和可以定义为将对应位置的元素相加得到的新矩阵C。
可以使用嵌套的for循环来完成矩阵的加法运算。
例如:for(i=0; i<n; i++){for(j=0; j<m; j++){C[i][j] = A[i][j] + B[i][j];}}矩阵的乘法是线性代数运算中的一个重要概念。
C语言中可采用嵌套的for循环来实现两个矩阵相乘的操作。
如果矩阵A是一个n行m 列的矩阵,矩阵B是一个m行p列的矩阵,那么它们的乘积矩阵C就是一个n行p列的矩阵。
具体实现如下:for(i=0; i<n; i++){for(j=0; j<p; j++){C[i][j] = 0;for(k=0; k<m; k++){C[i][j] += A[i][k] * B[k][j];}}}三、线性方程组的求解线性方程组是线性代数中的重要问题之一,它可以用矩阵和向量的形式表示。
在C语言中,可以使用高斯消元法或LU分解等方法求解线性方程组。
高斯消元法是一种经典的线性方程组求解方法。
它通过行变换将方程组转化为三角形矩阵,然后通过回代法求解得到方程的解。
下面是高斯消元法求解线性方程组的示例代码:for(k=0; k<n; k++){for(i=k+1; i<n; i++){factor = A[i][k] / A[k][k];for(j=k+1; j<n; j++){A[i][j] = A[i][j] - factor * A[k][j];}B[i] = B[i] - factor * B[k];}}for(i=n-1; i>=0; i--){sum = 0;for(j=i+1; j<n; j++){sum += A[i][j] * X[j];}X[i] = (B[i] - sum) / A[i][i];}以上是对C语言中线性代数运算的简要介绍。
高斯列主消元法求解方程 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 都化为零;以此类推,可将主对角线下的元素全化为零,变为上三角矩阵。
C语言写高斯消元法
高斯消元法C语言程序及其输出结果杨学玉(33)C语言程序:#include <stdio.h>#include <stdlib.h>#include <math.h>#define N 10double a[N+1][N+1],b[N+1],x[N+1];/* 用在此处以便可以让下面的程序也调用*/main(){ int n,i,j,k;double temp;printf("请输入方程组的维数:\n");scanf("%d",&n);if(n>N){printf("错误:元素超过初设定的值%d\n",N);exit(0);}printf("开始输入各元素的值:");for(i=1;i<=n;i++){for(j=1;j<=n;j++){printf("请输入元素[%d][%d]",i,j);scanf("%lf",&a[i][j]);}printf("请输入常数b[%d]",j);scanf("%lf",&b[i]);}for(j=1;j<=n-1;j++){for(i=j+1;i<=n;i++){temp=a[i][j]/a[j][j];for(k=1;k<=n;k++){a[i][k]=a[i][k]-temp*a[j][k];}b[i]=b[i]-temp*b[j];}}fun(n,n,a,b);x[n]=b[n]/a[n][n];for(j=n-1;j>=1;j--){x[j]=b[j];for(k=n;k>=j+1;k--){x[j]=x[j]-x[k]*a[j][k];}x[j]=x[j]/a[j][j];}for(j=1;j<=n;j++){printf("x[%d]=%f\n",j,x[j]);}}/*列出高斯消元后得到的数组*/fun(int m,int n,double a[N+1][N+1],double b[N+1]) {int i,j;printf("消元后的矩阵是:\n");for(i=1;i<=m;i++){for(j=1;j<=n;j++){printf("%f",a[i][j]);}printf("\n") ;}}C语言输出结果:Mat-lab程序及输出结果:[此文档可自行编辑修改,如有侵权请告知删除,感谢您的支持,我们会努力把内容做得更好]。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
高斯消元法C语言程序及其输出结果
杨学玉(33)C语言程序:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define N 10
double a[N+1][N+1],b[N+1],x[N+1];
/* 用在此处以便可以让下面的程序也调用*/
main()
{ int n,i,j,k;
double temp;
printf("请输入方程组的维数:\n");
scanf("%d",&n);
if(n>N)
{
printf("错误:元素超过初设定的值%d\n",N);
exit(0);
}
printf("开始输入各元素的值:");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
printf("请输入元素[%d][%d]",i,j);
scanf("%lf",&a[i][j]);
}
printf("请输入常数b[%d]",j);
scanf("%lf",&b[i]);
}
for(j=1;j<=n-1;j++)
{
for(i=j+1;i<=n;i++)
{
temp=a[i][j]/a[j][j];
for(k=1;k<=n;k++)
{
a[i][k]=a[i][k]-temp*a[j][k];
}
b[i]=b[i]-temp*b[j];
}
}
fun(n,n,a,b);
x[n]=b[n]/a[n][n];
for(j=n-1;j>=1;j--)
{
x[j]=b[j];
for(k=n;k>=j+1;k--)
{
x[j]=x[j]-x[k]*a[j][k];
}
x[j]=x[j]/a[j][j];
}
for(j=1;j<=n;j++)
{
printf("x[%d]=%f\n",j,x[j]);
}
}
/*列出高斯消元后得到的数组*/
fun(int m,int n,double a[N+1][N+1],double b[N+1]) {
int i,j;
printf("消元后的矩阵是:\n");
for(i=1;i<=m;i++)
{
for(j=1;j<=n;j++)
{
printf("%f",a[i][j]);
}
printf("\n") ;
}
}
C语言输出结果:
Mat-lab程序及输出结果:。