欢迎来到天天文库
浏览记录
ID:59511978
大小:10.89 KB
页数:7页
时间:2020-11-04
《高斯列主消元法法和LU分解法.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
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、][%d]:",i,j);scanf("%f",&a[i][j]);}}do{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+13、;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(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++){pri4、ntf("x[%d]=%f",i,x[i]);}while(1);return0;}LU分解法:#include#include#defineN10//矩阵大小范围/**使用已经求出的x,向前计算x(供getx()调用)*floata[][]矩阵U*floatx[]方程组解*inti解的序号(数组X元素序号)*intn矩阵大小*return公式中需要的和*/floatgetmx(floata[N][N],floatx[N],inti,intn){floatmx=0;5、intr;for(r=i+1;r6、/**解方程组,计算某x*floata[][]矩阵U*floatx[]方程组解*inti解的序号*intn矩阵大小*return方程组的第i个解(数组X的第i个元素值)*/floatgetx(floata[N][N],floatb[N],floatx[N],inti,intn){floatresult;if(i==n-1)//计算最后一个x的值result=(float)(b[i]/a[n-1][n-1]);else//计算其他x值(对于公式中的求和部分,需要调用getmx()函数)result=(floa7、t)((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]);else//计算其他y值(对于8、公式中的求和部分,需要调用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、][%d]:",i,j);scanf("%f",&a[i][j]);}}do{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
3、;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(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++){pri
4、ntf("x[%d]=%f",i,x[i]);}while(1);return0;}LU分解法:#include#include#defineN10//矩阵大小范围/**使用已经求出的x,向前计算x(供getx()调用)*floata[][]矩阵U*floatx[]方程组解*inti解的序号(数组X元素序号)*intn矩阵大小*return公式中需要的和*/floatgetmx(floata[N][N],floatx[N],inti,intn){floatmx=0;
5、intr;for(r=i+1;r6、/**解方程组,计算某x*floata[][]矩阵U*floatx[]方程组解*inti解的序号*intn矩阵大小*return方程组的第i个解(数组X的第i个元素值)*/floatgetx(floata[N][N],floatb[N],floatx[N],inti,intn){floatresult;if(i==n-1)//计算最后一个x的值result=(float)(b[i]/a[n-1][n-1]);else//计算其他x值(对于公式中的求和部分,需要调用getmx()函数)result=(floa7、t)((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]);else//计算其他y值(对于8、公式中的求和部分,需要调用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、/**解方程组,计算某x*floata[][]矩阵U*floatx[]方程组解*inti解的序号*intn矩阵大小*return方程组的第i个解(数组X的第i个元素值)*/floatgetx(floata[N][N],floatb[N],floatx[N],inti,intn){floatresult;if(i==n-1)//计算最后一个x的值result=(float)(b[i]/a[n-1][n-1]);else//计算其他x值(对于公式中的求和部分,需要调用getmx()函数)result=(floa
7、t)((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]);else//计算其他y值(对于
8、公式中的求和部分,需要调用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
此文档下载收益归作者所有