高斯消去法C语言程序

合集下载

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

高斯消去法和列主元高斯消去法解线性方程组的程序(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语言编程
列主元高斯消元法
基本思想:用高斯消元法求解线性方程组时,为避免小的主元,在进行第 k 步消元前,应该在第 k 列 元素 aik (i k , , n ) 中找出第一个出现的绝对值最大者, 例如 | aik k | max | aik | , 再把第 ik 个方程与第 k
k ≤i≤n (k ) (k ) (k )
x[k-1]=0.0; for(j=k+1;j<=n;j++) x[k-1]+=A[k-1][j-1]*x[j-1]; x[k-1]=(A[k-1][n]-x[k-1])/A[k-1][k-1]; } //在屏幕上输出结果 for(i=0;i<=n-1;i++) printf("%f\n",x[i]); } void main() { double A[N][N+1]={{0,2,-0.1,7,76.2},{6,0,3,-5,15},{3,1,2,5,86},{2,4,1,0,48}}; double x[N]={0}; Gause_pivot(N,A,x); }
个方程进行交换,使 aik k 成为主元。我们称这个过程为选主元。由于只在第 k 列元素中选主元,通常也称 为按列编程
列主元高斯消元法的 C 语言程序代码如下: #include<stdio.h> #include<math.h> #include<iostream.h> #define N 4 void Gause_pivot(int n,double A[N][N+1],double x[]) { //高斯消元 int i,j,k; for(k=1;k<=n-1;k++) { //选主元 int ii,jj,kk,row; double max,temp; ii=1;kk=k; max=A[ii-1+(kk-1)][kk-1]; for(jj=ii+1;jj<=n;jj++) { if (fabs(A[jj-1+(kk-1)][kk-1])>fabs(max)) { max=A[jj-1+(kk-1)][kk-1]; row=jj+(kk-1); } } for(ii=1;ii<=n+1;ii++) { temp=A[kk-1][ii-1]; A[kk-1][ii-1]=A[row-1][ii-1]; A[row-1][ii-1]=temp; } for(i=k+1;i<=n;i++) for(j=k+1;j<=n+1;j++) A[i-1][j-1]-=A[k-1][j-1]*A[i-1][k-1]/A[k-1][k-1]; } //回代求解 x[n-1]=A[n-1][n]/A[n-1][n-1]; for(k=n-1;k>=1;k--) {

c++ 高斯消元法

c++ 高斯消元法
usingnamespace
//高斯消元法
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语言之高斯消元法

[转]C语言之高斯消元法

[转]C语⾔之⾼斯消元法学过数学的⼈都知道,⾼斯消元法是解线性⽅程组是,算法很简单,但过程很复杂,这就是我在⽹上找不到免费的且正确的⾼斯消元法的原因了。

所以我下决⼼⾃⼰编,结果I do it.⾼斯消元法的⽤途很⼴,它是解决数学问题最重要的⽅法之⼀,在《计算⽅法》这本书的第⼀章就讲的是⾼斯消元法,很多问题最终归结为解线性⽅法组。

因为我是个编程初学者,所以这个程序在⾼⼿看来可能会觉得funny.不过我不介意,还请你们多多指教。

我这个程序是⽤C语⾔编的,其它语⾔没有学过,上⼤学⾮计算机专业的学⽣⼀般都只学C语⾔,所以这个程序很适合⼤学⽣们。

希望⼤学能多指出我程序的缺点,并给我多提意见,谢谢⼤家。

=====================#include "Stdio.h"#include "Conio.h"/*L是矩阵的⾏减1,从程序上看是最外层循环的次数N 对应矩阵的⾏数,M对应矩阵的列数可以通过改变L、N、M来控制矩的阶数 */#define L 3#define N 4#define M 5void gauss(double a[N][M],double x[N]){int i,j,l,n,m,k=0;double temp[N];/*第⼀个do-while是将增⼴矩阵消成上三⾓形式*/do{n=0;for(l=k;l<L;l++)temp[n++]=a[l+1][k]/a[k][k];for(m=0,i=k;i<N;i++,m++)for(j=k;j<M;j++)a[i+1][j]-=temp[m]*a[k][j];k++;}while(k<N) ;/*第⼆个do-while是将矩阵消成对⾓形式,并且重新给k赋值*/k=L-1;do{n=0;for(l=k;l>=0;l--)temp[n++]=a[k-l][k+1]/a[k+1][k+1];for(m=0,i=k;i>=0;i--,m++)for(j=k;j<M;j++)a[k-i][j]-=temp[m]*a[k+1][j];k--;}while(k>=0) ;/*下⼀个for是解⽅程组*/for(i=0;i<N;i++)x[i]=a[i][N]/a[i][i];}void menu(){printf("\n _ _ _ _ _\n");printf(" 1.operation\n");printf(" 2.exit");printf("\n _ _ _ _ _\n");}main(){int i,j,choose;double a[N][M]={0},answer[N];clrscr();while(1){leep:menu();scanf("%d",&choose);switch(choose){case1:printf("!!The size of Maxrix is %d * %d,each line enter %d element:\n ",N,M,M);for(i=0;i<N;i++){printf("Enter the Matrix's %d line:\n",i);for(j=0;j<N+1;j++)scanf("%lf",&a[i][j]);}printf("\nthe corss matrix is:\n_ _ _ _ _\n");gauss(a,answer);for(i=0;i<N;i++){for(j=0;j<M;j++)printf("%-2lf ",a[i][j]);putchar('\n');}printf("_ _ _ _ _\nthe solve is:\n");for(i=0;i<N;i++)printf("x%d=%lf\n",i+1,answer[i]);case2:exit(0);default:printf("input error:\n");goto leep;}}getch();}/*试验:西安交通⼤学出版社出版的《计算⽅法》书上28页的例2.1: 1 2 3 -4 -2_ -3 -4 -12 13 5A= 2 10 0 -3 104 14 9 -13 7试验结果:x1=1,x2=2,x3=3,x4=4 */。

解线性代数方程组的直接法之Gauss主元消去法及其C++编程代码

解线性代数方程组的直接法之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 ----------⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦嘿嘿,到这里基本就可以大功搞成了。

(完整版)数值计算用C编程实现gauss顺序消去法

(完整版)数值计算用C编程实现gauss顺序消去法

用C 编程实现gauss 顺序消去法 班级: 09医软(一)班姓名: 包优 学号: 09713001姓名: 曹俊武 学号: 09713003姓名: 查海松 学号: 09713004一、 实验名称用c 编程实现gauss 顺序消去法二、 执行步骤设有线性方程组Ax = b (1.1)其中A=⎪⎪⎭⎪⎪⎬⎫⎪⎪⎩⎪⎪⎨⎧nn n n n n a a a a a a a a a K K K K KK K 212222111211,x=⎪⎪⎩⎪⎪⎨⎧⎪⎪⎭⎪⎪⎬⎫n x x x M 21,b=⎪⎪⎩⎪⎪⎨⎧⎪⎪⎭⎪⎪⎬⎫n b b b M 21 为了清晰起见,以n=4为例来说明消去法的过程,将方程组写成如下的形式⎪⎪⎩⎪⎪⎨⎧⎪⎪⎭⎪⎪⎬⎫=+++=+++=+++=+++)1(44)1(443)1(432)1(421)1(41)1(34)1(343)1(332)1(321)1(31)1(24)1(243)1(232)1(221)1(21)1(14)1(143)1(132)1(121)1(11b x a x a x a x a b x a x a x a x a b x a x a x a x a b x a x a x a x a (1.2) Gauss 消去法的过程是:第1步 假定)1(11a ≠0 ,在方程组(1,2)中保留第一个方程,将第一个方程分别乘 21)1(11)1(21l a a = 、 31)1(11)1(31l a a = 、41)1(11)1(41l a a = ,再分别减第二个、第三个、第四个方程便得到方程组(1,2)的等价方程组⎪⎪⎩⎪⎪⎨⎧⎪⎪⎭⎪⎪⎬⎫=++=++=++=+++)2(44)2(443)2(432)2(42)2(34)2(343)2(332)2(32)2124)2(243)2(232)2(22)1(14)1(143)1(132)1(121)1(11b x a x a x a b x a x a x a b x a x a x a b x a x a x a x a (1.3)其中)1(11)1()2(ji ij ij a l a a -=(j=2,3,4,5,;i=2,3,4,),)1(11)1()2(b l b b i i i -=(i=2,3,4). 第2 步 假定0)2(22≠a ,在方程组(1,3)中保留第一及第二个方程分别乘以 32)2(22)2(32l a a = ,42)2(22)2(42l a a =再分别减第三个、第四个方程便可得到方程组(1,3)的等价方程组⎪⎪⎩⎪⎪⎨⎧⎪⎪⎭⎪⎪⎬⎫=+=+=++=+++)3(44)3(443)3(43)3(34)3(343)3(33)2124)2(243)2(232)2(22)1(14)1(143)1(132)1(121)1(11b x a x a b x a x a b x a x a x a b x a x a x a x a (1.4) 其中)2(22)2()3(ji ij ij a l a a -=(j=3,4;i=3,4))2(22)2()3(b l b b i i i -=(i=3,4)第3步 假定0)3(33≠a ,保留方程组(1,4)的前3个方程,将第三个方程乘 43)3(33)3(43l a a = ,再减去第四个方程便可得到方程组(1,4)的等价方程组 ⎪⎪⎩⎪⎪⎨⎧⎪⎪⎭⎪⎪⎬⎫==+=++=+++)4(44)4(44)3(34)3(343)3(33)2124)2(243)2(232)2(22)1(14)1(143)1(132)1(121)1(11b x a b x a x a b x a x a x a b x a x a x a x a (1.5) 其中)3(3443)3(44)4(44a l a a -=,)3(343)3(4)4(4b l b b -=。

高斯消去法C语言程序

高斯消去法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语言写高斯消元法

高斯消元法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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

高斯消去法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;。

相关文档
最新文档