计算机数值方法之线性方程的直接求解C语言

题目:

利用高斯消元法、LU分解法分别求解下列方程组:

高斯消元法原理很简单,用笔算非常简单,但是写程序的时候要理顺I,j,k,三个下标的循环语句,不要搞错,否则会出现数组溢出、无法输出数据等问题。最简单的高斯消元法对角线不能为零,于是延伸出了列主元素高斯消元法和完全主元素高斯消元法。

LU分解要一分为二的看待,就是先求L,用L求出y,再用U求出X。

方法一:高斯消元法

高斯消元法手写计算非常容易,用程序语言写会稍微复杂一点点。

高斯消元法的要点在于三个循环语句的理解和运用,理解i,j,k下标的运用即可,多看书。

#include<stdio.h>
#include<math.h>
int n = 3;
int main(){
float a[10][10];
float  l[10][10];
float  x[10];
int i,j,k;
for(i=1;i<=n;i++)
	for(j=1;j<=n+1;j++)
	scanf("%f",&a[i][j]);
    for (i = 1; i <= n; i++)
        if (a[i][i] == 0)
        {
            printf("无法使用高斯消元法\n");  
            return 0;
			break;
		}
   for(k=1;k<n;k++)
		for(i=k+1;i<=n;i++){
			l[i][k]=a[i][k]/a[k][k];
			for(j=k+1;j<=n+1;j++)
                a[i][j] = a[i][j] - l[i][k] * a[k][j];
        }
   
  x[n]=a[n][n+1]/a[n][n];
	for(k=n-1;k>=1;k--)
	{
		x[k]=a[k][n+1];
		
		for(j=k+1;j<=n;j++)
		x[k]-=a[k][j]*x[j];
		x[k]=x[k]/a[k][k];
	}
     printf("X的值为\n");
    for (i = 1; i <= n; i++)     
        printf("%f\n",x[i]);
return 0;
}

方法二:LU分解法

高斯消元法弄懂了之后,LU分解就迎刃而解了。

#include<stdio.h>
#include<math.h>
int n = 4;
int main(){
float  a[10][10];
float  l[10][10];
float  u[10][10];
float  x[10];
float  y[10];
int i,j,k;
float sum;
sum=0;
for(i=1;i<=n;i++)
	for(j=1;j<=n+1;j++)
	scanf("%f",&a[i][j]);
for(j=1;j<=n;j++)
     u[1][j]=a[1][j];
for(i=1;i<=n;i++)
     l[i][1]=a[i][1]/u[1][1];
for(k=2;k<=n;k++){
	   for(j=k;j<=n;j++)
		   for(i=1;i<=k-1;i++)
			   u[k][j]=a[k][j]-l[k][i]*u[i][j];
		   for(i=k+1;i<=n;i++){
			   sum=0;
			   for(j=1;i<=k-1;j++)
				   sum+=l[i][j]*u[j][k];
				   l[i][k]=(a[i][k]-sum)/u[k][k];
		   }
}
y[1]=a[1][n+1];
for(k=2;k<=n;k++){
	sum=0;
for(j=1;j<=k-1;j++)
sum+=l[k][j]*y[j];
y[k]=a[k][n+1]-sum;
}
printf("y的值为\n");
    for (i = 1; i <=n; i++)     
        printf("%f\n",y[i]);
x[n]=y[n]/u[n][n];
	for(k=n-1;k>=1;k--)
	{
		sum=0;
        for(j=k+1;j<=n;j++)
         sum+=u[k][j]*x[j];
		 x[k]=(y[k]-sum)/u[k][k];
	}	 
     printf("X的值为\n");
    for (i = 1; i <=n; i++)     
        printf("%f\n",x[i]);
return 0;
}

猜你喜欢

转载自blog.csdn.net/sinat_41892454/article/details/81390264
今日推荐