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

C++课程设计高斯消元法求线性代数方程组的解

C++课程设计高斯消元法求线性代数方程组的解

C++课程设计高斯消元法求线性代数方程组的解第一篇:C++课程设计高斯消元法求线性代数方程组的解河北工业大学计算机软件技术基础(VC)课程设计报告学院管理班级管理104班姓名杨立宝 __ 学号 101707____ 成绩 __ ____一、题目:求线性代数方程组的解(高斯消去法)(C13)二、设计思路1、总体设计1)分析程序的功能第一:编写输入程序,通过键盘先输入对应的已知量及函数的大小n和系数a[i]和得数b[i]。

第二:编写中间程序,通过函数的调用先定义线性代数方程,然后通过程序求出方程的梯形矩阵系数,并最终得出结果。

第三编写输出程序,输出最终结果。

2)系统总体结构:设计程序的组成模块,简述各模块功能。

模块一:各函数的具体内容A:三个输入函数,分别输入n,一维数组,二维数组。

即输入已知量。

B:中间运算函数,计算是使得方程系数所成的矩阵成梯形矩阵,未知数的结果。

即计算中间变量及结果。

C:最后输出函数,输出最后计算结果。

模块二:各函数原型的声明 a写头文件。

b变量声明:存放输入数据的数组的声明,存放中间变量的数组的声明,存放运算结果的数组的声明。

分别存放对应数据。

c输入有关操作的文字d函数调用,在运算中自动调用对应的函数解决对应问题。

模块三:主函数2、各功能模块的设计:说明各功能模块的实现方法模块一:各个函数的声明,直接声明。

模块二:各函数都通过for循环来实现各个数组之间的基本运算。

3、设计中的主要困难及解决方案在这部分论述设计中遇到的主要困难及解决方案。

1)困难1 函数调用是怎么用?解决方案:仔细阅读课本,以及同学之间的讨论,和老师的帮助。

4、你所设计的程序最终完成的功能1)说明你编制的程序能完成的功能输入线性代数的系数后,运行程序即可得到梯形矩阵和结果。

2)准备的测试数据及运行结果三、程序清单如果是使用一个文件完成的程序,只需列出程序代码。

如果是使用多文件完成的程序,首先说明程序中的代码存放在哪些文件中,说明文件名(例如:本程序包含first.cpp、second.cpp、third.cpp和all.h四个文件);然后依次给出每个文件名及该文件清单,例如:#include const N= 10;//设定矩阵大小范围 /* * 使用已经求出的x,向前计算x(供getx()调用)* double a[][] 系数矩阵 * double x[] 方程组解 * int i 解的序号 * int n 矩阵大小 * return 公式中需要的和 */ double getm(double a[N][N], double x[N], int i, int n){ double m = 0;int r;for(r=i+1;rresult = double(b[n-1]/a[n-1][n-1]);else //计算其他x值(对于公式中的求和部分,需要调用getm()函数)result = double((b[i]-getm(a,x,i,n))/a[i][i]);return result;} void main(){ //double a[N][N] = {{2},{1,3,2},{1,2,2}};//double b[N] = {4,6,5};double a[N][N];//系数矩阵 double b[N];//右端项 double x[N];//方程组解 int i,j,k;int n=N;//矩阵大小/*用户手工输入矩阵*/ cout<>n;cout<>a[i][j];} cout<>b[i];} /*显示原始矩阵*/ cout</*进行高斯消去*/ for(j=0;j/*显示处理后矩阵*/ cout</*回代方式解方程组*/ for(i=n-1;i>=0;i--){ x[i] = getx(a,b,x,i,n);} /*显示方程组解*/ cout<四、对该设计题目有何更完善的方案1、对自己完成程序进行自我评价。

高斯列主消元法求解方程 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++程序

//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;
{max=A[i][L1]; //L2换成L1
row=i;} //列主元所在行,L1表示初始列元所在行
}
for (int j=0;j<N+1;j++) //换行
{B[j]=A[row][j];
A[row][j]=A[L1][j];
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[L1][j]=B[j];}
cout<<"选取主元后的增广矩阵A为:"<<endl;
for ( i=0;i<N;i++)
{

高斯消元法程序

高斯消元法程序

高斯消元法程序一、引言高斯消元法是一种求解线性方程组的常用方法,通过将线性方程组转化为行阶梯形矩阵,进而求得方程组的解。

本文将介绍高斯消元法的原理和实现过程,并给出一个简单的高斯消元法的程序示例。

二、高斯消元法原理高斯消元法的核心思想是通过矩阵的初等行变换,将线性方程组转化为行阶梯形矩阵,进而求解方程组的解。

具体的步骤如下: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. 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;。

相关文档
最新文档