实验一:Doolittle三角分解法之C语言代码

此题目的直接三角分解法,与上面的Guass列选主元消去法有着一些联系,至少前面的输入代码是差不多的:题目:
2、Doolittle三角分解法
[ 2 10 0 -3 ]
[-3 -4 -12 13]
[ 1 2 3 -4 ]
[ 4 14 9 -13]

                                                                                有了前面的基础,这个题目就比较简单了,根据实验书给的算法,一步一步解决就OK了:
1.输入矩阵的维数,接着输入矩阵A,再进行一行一列的计算
2.计算u的第一行,再计算L的第一列....后面的就不多bb了,根据指导书上用一个循环就可以实现u的所有行的值,以及L的所有列的值.talk is cheap,let’s show my code. 下面上自己的代码(唯一的问题就是自己不会GUI图形编程,只怪当初懒,半途而废了..)
 Doolittle三角分解法代码:
                                                                  

/********************************************
    > File Name: Doolittle.c
    > Author:chendiyang
    > School:WUST_CST_1501班
    > Myblog:www.chendsir.com
    > Mail:[email protected] 
    > Created Time: 2017年04月18日 星期二 9时15分56秒
 ************************************************************************/
#include 
#include 
#define MAX 20

int main()
{
    int n;
    int i,j,k;
    int mi;
    double mx,tmp;
    static double a[MAX][MAX],b[MAX],x[MAX],y[MAX];
    static double l[MAX][MAX],u[MAX][MAX];
    printf("\n 输入方程组的维数:");//输入AX=b的维数
    scanf("%d",&n);
    if(n>MAX)
    {
        return 1;
     } 
     if(n<=0)
     {
        return 1;
     }
     //输入矩阵的值
     printf("\n请输入A矩阵的值:"); 
     for(i=0;ifor(j=0;jscanf("%lf",&a[i][j]);
      //输入L矩阵的对角线的值
      for(i=0;i1;
      for(k=0;k//计算u的第一行到第K行元素    
          for(j=k;jfor(i=0;i<=k-1;i++)
              u[k][j]-=(l[k][i]*u[i][j]);
            //  u[k][j]/=l[k][k];
          }


        //计算L的第一列到第K列元素
          for(i=k+1;ifor(j=0;j<=k-1;j++)
             l[i][k]-=(l[i][j]*u[j][k]);
             l[i][k]/=u[k][k];
          }

      }
      //解方程组Ly=b
      for(i=0;ifor(j=0;j<=i-1;j++)
          y[i]-=(l[i][j]*y[j]);
          //y[i]/=l[i][i];
      }
      //解方程组Ux=y
      for(i=n-1;i>=0;i--)
      {
          x[i]=y[i];
          for(j=i+1;j//输出运行结果 
          printf("solution is :\n");
          printf("矩阵L的值如下:\n");
          for(i=0;iprintf("[");
            for(j=0;jprintf("%lf ",l[i][j]);
          }
          printf("]\n");
        }
         printf("矩阵u的值如下:\n");
          for(i=0;iprintf("[");
            for(j=0;jprintf("%lf ",u[i][j]);
          }
          printf("]\n");
        }
          return 0;    

}
                     我们的题目是这个:

[ 2 10 0 -3 ]
[-3 -4 -12 13]
[ 1 2 3 -4 ]= L(单位下三角矩阵) *   U(上三角矩阵)
[ 4 14 9 -13]
运行结果如下图:
实验一:Doolittle三角分解法之C语言代码_第1张图片 
如果我的算法没有问题的话,L和U的结果应该是正确的,会算的可以手算验证一下,我个人是不会的,虽然算法能看懂,但做题就难死我了,上课也没去听讲.实验一到此为止,是完成了,翘了好几节课,今天英语课被点名了,好衰啊,我本学期第一次翘就点,这运气没谁了...

你可能感兴趣的:(数值分析)