欢迎来到天天文库
浏览记录
ID:48619329
大小:16.30 KB
页数:7页
时间:2020-01-29
《高斯列主消元法法和LU分解法.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、高斯列主消元法:#include#include#defineN10intmain(){inti=0,j=0,r=0,n=0,k=1;floata[N][N],x[N],max=-1,sum1=0,sum2=0;//输入矩阵维数printf("Pleaseentern02、{for(i=k;i<=n;i++){if(fabs(a[i][k])>max){max=a[i][k];r=i;}if(a[r][k]==0){printf("Cannotsolve!");return0;}}//换行for(j=1;j<=n+1;j++){sum1=a[k][j];a[k][j]=a[r][j];a[r][j]=sum1;}//将矩阵化为上三角矩阵for(i=k+1;i<=n;i++){for(j=k+1;j<=n+1;j++){a[i][j]=a[i][j]-(a[i][k])*(a[k][j])/(a[k][k]);}}k=k+1;max=-1;}while3、(k<(n-1));//求x[]x[n]=(a[n][n+1])/(a[n][n]);for(k=n-1;k>=1;k--){for(j=k+1;j<=n;j++)sum2=sum2+(a[k][j])*(x[j]);x[k]=(a[k][n+1]-sum2)/(a[k][k]);sum2=0;}//输出结果for(i=1;i<=n;i++){printf("x[%d]=%f",i,x[i]);}while(1);return0;}LU分解法:#include#include#defineN10//矩阵大小范围/**使用已经求出的x,向前计算x4、(供getx()调用)*floata[][]矩阵U*floatx[]方程组解*inti解的序号(数组X元素序号)*intn矩阵大小*return公式中需要的和*/floatgetmx(floata[N][N],floatx[N],inti,intn){floatmx=0;intr;for(r=i+1;r5、[N][N],floaty[N],inti,intn){floatmy=0;intr;for(r=0;r6、n-1]);else//计算其他x值(对于公式中的求和部分,需要调用getmx()函数)result=(float)((b[i]-getmx(a,x,i,n))/a[i][i]);returnresult;}/**解数组Y,计算其中一元素值*floata[][]矩阵L*floaty[]数组Y*inti数组Y元素序号*intn矩阵大小*return数组Y的第i个元素值*/floatgety(floata[N][N],floatb[N],floaty[N],inti,intn){floatresult;if(i==0)//计算第一个y的值result=float(b[i]/a[i][i])7、;else//计算其他y值(对于公式中的求和部分,需要调用getmy()函数)result=float((b[i]-getmy(a,y,i,n))/a[i][i]);returnresult;}intmain(){floatl[N][N]={0};//定义L矩阵floatu[N][N]={0};//定义U矩阵floaty[N]={0};//定义数组Yfloatx[N]={0};//定义数组Xfloata[N][N];//定义系数矩阵floatb
2、{for(i=k;i<=n;i++){if(fabs(a[i][k])>max){max=a[i][k];r=i;}if(a[r][k]==0){printf("Cannotsolve!");return0;}}//换行for(j=1;j<=n+1;j++){sum1=a[k][j];a[k][j]=a[r][j];a[r][j]=sum1;}//将矩阵化为上三角矩阵for(i=k+1;i<=n;i++){for(j=k+1;j<=n+1;j++){a[i][j]=a[i][j]-(a[i][k])*(a[k][j])/(a[k][k]);}}k=k+1;max=-1;}while
3、(k<(n-1));//求x[]x[n]=(a[n][n+1])/(a[n][n]);for(k=n-1;k>=1;k--){for(j=k+1;j<=n;j++)sum2=sum2+(a[k][j])*(x[j]);x[k]=(a[k][n+1]-sum2)/(a[k][k]);sum2=0;}//输出结果for(i=1;i<=n;i++){printf("x[%d]=%f",i,x[i]);}while(1);return0;}LU分解法:#include#include#defineN10//矩阵大小范围/**使用已经求出的x,向前计算x
4、(供getx()调用)*floata[][]矩阵U*floatx[]方程组解*inti解的序号(数组X元素序号)*intn矩阵大小*return公式中需要的和*/floatgetmx(floata[N][N],floatx[N],inti,intn){floatmx=0;intr;for(r=i+1;r5、[N][N],floaty[N],inti,intn){floatmy=0;intr;for(r=0;r6、n-1]);else//计算其他x值(对于公式中的求和部分,需要调用getmx()函数)result=(float)((b[i]-getmx(a,x,i,n))/a[i][i]);returnresult;}/**解数组Y,计算其中一元素值*floata[][]矩阵L*floaty[]数组Y*inti数组Y元素序号*intn矩阵大小*return数组Y的第i个元素值*/floatgety(floata[N][N],floatb[N],floaty[N],inti,intn){floatresult;if(i==0)//计算第一个y的值result=float(b[i]/a[i][i])7、;else//计算其他y值(对于公式中的求和部分,需要调用getmy()函数)result=float((b[i]-getmy(a,y,i,n))/a[i][i]);returnresult;}intmain(){floatl[N][N]={0};//定义L矩阵floatu[N][N]={0};//定义U矩阵floaty[N]={0};//定义数组Yfloatx[N]={0};//定义数组Xfloata[N][N];//定义系数矩阵floatb
5、[N][N],floaty[N],inti,intn){floatmy=0;intr;for(r=0;r6、n-1]);else//计算其他x值(对于公式中的求和部分,需要调用getmx()函数)result=(float)((b[i]-getmx(a,x,i,n))/a[i][i]);returnresult;}/**解数组Y,计算其中一元素值*floata[][]矩阵L*floaty[]数组Y*inti数组Y元素序号*intn矩阵大小*return数组Y的第i个元素值*/floatgety(floata[N][N],floatb[N],floaty[N],inti,intn){floatresult;if(i==0)//计算第一个y的值result=float(b[i]/a[i][i])7、;else//计算其他y值(对于公式中的求和部分,需要调用getmy()函数)result=float((b[i]-getmy(a,y,i,n))/a[i][i]);returnresult;}intmain(){floatl[N][N]={0};//定义L矩阵floatu[N][N]={0};//定义U矩阵floaty[N]={0};//定义数组Yfloatx[N]={0};//定义数组Xfloata[N][N];//定义系数矩阵floatb
6、n-1]);else//计算其他x值(对于公式中的求和部分,需要调用getmx()函数)result=(float)((b[i]-getmx(a,x,i,n))/a[i][i]);returnresult;}/**解数组Y,计算其中一元素值*floata[][]矩阵L*floaty[]数组Y*inti数组Y元素序号*intn矩阵大小*return数组Y的第i个元素值*/floatgety(floata[N][N],floatb[N],floaty[N],inti,intn){floatresult;if(i==0)//计算第一个y的值result=float(b[i]/a[i][i])
7、;else//计算其他y值(对于公式中的求和部分,需要调用getmy()函数)result=float((b[i]-getmy(a,y,i,n))/a[i][i]);returnresult;}intmain(){floatl[N][N]={0};//定义L矩阵floatu[N][N]={0};//定义U矩阵floaty[N]={0};//定义数组Yfloatx[N]={0};//定义数组Xfloata[N][N];//定义系数矩阵floatb
此文档下载收益归作者所有