⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cholesky.c

📁 这是数值方法中各种插值算法
💻 C
字号:
#include <stdio.h>
#include <math.h>
#define N 4
   int main()
       {
          int n1=4;
          double a1[4][4]={5,-4,1,0,-4,6,-4,1,1,-4,6,-4,0,1,-4,5};
          double b[4]={2,-1,-1,2};
          void Doolittle(int n,double a[N][N],double b[N]);
          Doolittle(n1,a1,b);
          getchar();

        }



  void  Doolittle(int n,double a[N][N],double b[N])
       {
          int i,j,k;
          double x[N],y[N];
          double sum,sum2;
          double l[N][N];
          double u[N][N];
          for(i=0;i<n;i++)
            for(j=0;j<n;j++)
              {
               l[i][j]=0;
               u[i][j]=0;
              }
          for(i=0;i<n;i++)
           {
            if(i==0)
             {
               l[i][i]=sqrt(a[i][i]);
             }
               l[i][0]=a[i][0]/l[0][0];

            }

           for(i=1;i<n;i++)
              {
                    sum=0;

                    for(k=0;k<i;k++)
                      {

                        sum=sum+l[i][k]*l[i][k];

                      }

                        l[i][i]=sqrt(a[i][i]-sum);


                for(j=i+1;j<n;j++)
                  {
                     sum2=0;

                    for(k=0;k<i;k++)
                      {

                        sum2=sum2+l[i][k]*l[i][k];

                       }


                       l[j][i]=(a[j][i]-sum2)/l[i][i];

                   }

                 }

              for(i=0;i<n;i++)
                for(j=0;j<n;j++)
                  {

                     u[j][i]=l[i][j];

                   }

              for(i=0;i<n;i++)
                {
                  sum=0;
                  if(i==0)
                    {
                      y[i]=b[i]/l[i][i];

                     }
                   else
                     {
                       for(k=0;k<i;k++)
                         {

                           sum=sum+l[i][k]*y[k];


                         }

                         y[i]=(b[i]-sum)/l[i][i];
                      }

                     }
          printf("The result of x is:\n");

               for(i=n-1;i>=0;i--)
                 {
                   sum=0;

                   if(i==n-1)
                     {
                       x[i]=y[i]/l[i][i];

                      }
                   else
                       {
                         for(k=i;k<n;k++)
                          {

                             sum=sum+u[i][k]*x[k];


                           }

                           x[i]=(y[i]-sum)/u[i][i];


                         }

                    printf("%f\n",x[i]);

                   }



        }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -