xqinghua.c

来自「该程序是用vc开发的对动态数组进行管理的DLL」· C语言 代码 · 共 2,502 行 · 第 1/5 页

C
2,502
字号
/*

  #include "stdio.h"
  #include "acjdn.c"
  main()
  { int i;
    static double ar[4][4]={ {1.0,3.0,2.0,13.0},
                             {7.0,2.0,1.0,-2.0},
                             {9.0,15.0,3.0,-2.0},
                             {-2.0,-2.0,11.0,5.0}};
    static double ai[4][4]={ {3.0,-2.0,1.0,6.0},
                             {-2.0,7.0,5.0,8.0},
                             {9.0,-3.0,15.0,1.0},
                             {-2.0,-2.0,7.0,6.0}};
    static double br[4][2]={ {2.0,-2.0},{7.0,3.0},
                             {3.0,2.0},{9.0,1.0}};
    static double bi[4][2]={ {1.0,3.0},{2.0,7.0},
                             {-2.0,9.0},{3.0,2.0}};
    if (acjdn(ar,ai,br,bi,4,2)!=0)
      for (i=0;i<=3;i++)
        printf("x(%d)=%13.7e +j %13.7e,   %13.7e +j %13.7e\n",
               i,br[i][0],bi[i][0],br[i][1],bi[i][1]);
  }




*/
/*********** Example  End **********/

/*********** Result  Start **********/
/*
x(0)= 6.782330e-02 +j  7.078231e-02,    2.511789e-01 +j  5.810123e-01
x(1)=-1.623413e-01 +j -7.612936e-01,    4.024521e-01 +j -1.436012e-01
x(2)= 5.985239e-01 +j -4.371312e-01,    3.356590e-01 +j  1.034377e-01
x(3)= 2.464562e-01 +j  1.139959e-01,   -5.755388e-02 +j  2.079959e-01



*/
/*********** Result  End **********/


  #include "stdlib.h"
  #include "math.h"
  #include "stdio.h"
  int agaus(a,b,n)
  int n;
  double a[],b[];
  { int *js,l,k,i,j,is,p,q;
    double d,t;
    js=malloc(n*sizeof(int));
    l=1;
    for (k=0;k<=n-2;k++)
      { d=0.0;
        for (i=k;i<=n-1;i++)
          for (j=k;j<=n-1;j++)
            { t=fabs(a[i*n+j]);
              if (t>d) { d=t; js[k]=j; is=i;}
            }
        if (d+1.0==1.0) l=0;
        else
          { if (js[k]!=k)
              for (i=0;i<=n-1;i++)
                { p=i*n+k; q=i*n+js[k];
                  t=a[p]; a[p]=a[q]; a[q]=t;
                }
            if (is!=k)
              { for (j=k;j<=n-1;j++)
                  { p=k*n+j; q=is*n+j;
                    t=a[p]; a[p]=a[q]; a[q]=t;
                  }
                t=b[k]; b[k]=b[is]; b[is]=t;
              }
          }
        if (l==0)
          { free(js); printf("fail\n");
            return(0);
          }
        d=a[k*n+k];
        for (j=k+1;j<=n-1;j++)
          { p=k*n+j; a[p]=a[p]/d;}
        b[k]=b[k]/d;
        for (i=k+1;i<=n-1;i++)
          { for (j=k+1;j<=n-1;j++)
              { p=i*n+j;
                a[p]=a[p]-a[i*n+k]*a[k*n+j];
              }
            b[i]=b[i]-a[i*n+k]*b[k];
          }
      }
    d=a[(n-1)*n+n-1];
    if (fabs(d)+1.0==1.0)
      { free(js); printf("fail\n");
        return(0);
      }
    b[n-1]=b[n-1]/d;
    for (i=n-2;i>=0;i--)
      { t=0.0;
        for (j=i+1;j<=n-1;j++)
          t=t+a[i*n+j]*b[j];
        b[i]=b[i]-t;
      }
    js[n-1]=n-1;
    for (k=n-1;k>=0;k--)
      if (js[k]!=k)
        { t=b[k]; b[k]=b[js[k]]; b[js[k]]=t;}
    free(js);
    return(1);
  }


/*********** Example Start **********/
/*

  #include "stdio.h"
  #include "agaus.c"
  main()
  { int i;
    static double a[4][4]=
           { {0.2368,0.2471,0.2568,1.2671},
             {0.1968,0.2071,1.2168,0.2271},
             {0.1581,1.1675,0.1768,0.1871},
             {1.1161,0.1254,0.1397,0.1490} };
    static double b[4]={1.8471,1.7471,1.6471,1.5471};
    if (agaus(a,b,4)!=0)
      for (i=0;i<=3;i++)
        printf("x(%d)=%e\n",i,b[i]);
  }




*/
/*********** Example  End **********/

/*********** Result  Start **********/
/*
x(0)=1.04058e+00
x(1)=9.87051e-01
x(2)=9.35040e-01
x(3)=8.81282e-01



*/
/*********** Result  End **********/


  #include "stdlib.h"
  #include "math.h"
  #include "stdio.h"
  int aggje(a,n,b)
  int n;
  double a[],b[];
  { int *js,i,j,k,is,u,v;
    double d,t;
    js=malloc(n*sizeof(int));
    for (k=0; k<=n-1; k++)
      { d=0.0;
        for (i=k; i<=n-1; i++)
        for (j=k; j<=n-1; j++)
          { t=fabs(a[i*n+j]);
            if (t>d) {d=t; js[k]=j; is=i;}
          }
        if (d+1.0==1.0)
          { free(js); printf("fail\n"); return(0);}
        if (is!=k)
          { for (j=k; j<=n-1; j++)
              { u=k*n+j; v=is*n+j;
                t=a[u]; a[u]=a[v]; a[v]=t;
              }
            t=b[k]; b[k]=b[is]; b[is]=t;
          }
        if (js[k]!=k)
          for (i=0; i<=n-1; i++)
            { u=i*n+k; v=i*n+js[k];
              t=a[u]; a[u]=a[v]; a[v]=t;
            }
        t=a[k*n+k];
        for (j=k+1; j<=n-1; j++)
          { u=k*n+j;
            if (a[u]!=0.0) a[u]=a[u]/t;
          }
        b[k]=b[k]/t;
        for (j=k+1; j<=n-1; j++)
          { u=k*n+j;
            if (a[u]!=0.0)
              { for (i=0; i<=n-1; i++)
                  { v=i*n+k;
                    if ((i!=k)&&(a[v]!=0.0))
                      { is=i*n+j;
                        a[is]=a[is]-a[v]*a[u];
                      }
                  }
              }
          }
        for (i=0; i<=n-1; i++)
          { u=i*n+k;
            if ((i!=k)&&(a[u]!=0.0))
              b[i]=b[i]-a[u]*b[k];
          }
      }
    for (k=n-1; k>=0; k--)
      if (k!=js[k])
        { t=b[k]; b[k]=b[js[k]]; b[js[k]]=t;}
    free(js);
    return(1);
  }



/*********** Example Start **********/
/*

  #include "stdio.h"
  #include "aggje.c"
  main()
  { int i;
    static double a[8][8]={ {0.0,0.0,-1.0,0.0,0.0,0.0,2.0,0.0},
                         {0.0,6.0,0.0,0.0,0.0,-6.0,0.0,0.0},
                         {0.0,0.0,0.0,2.0,0.0,0.0,0.0,-4.0},
                         {3.0,0.0,0.0,0.0,-2.0,0.0,1.0,0.0},
                         {0.0,0.0,6.0,0.0,0.0,0.0,5.0,0.0},
                         {1.0,0.0,0.0,0.0,-3.0,0.0,0.0,2.0},
                         {0.0,4.0,0.0,-1.0,0.0,0.0,0.0,0.0},
                         {0.0,0.0,1.0,0.0,-1.0,0.0,0.0,-2.0}};
    static double b[8]={4.0,6.0,-8.0,-2.0,27.0,-9.0,2.0,-4.0};
    if (aggje(a,8,b)!=0)
      for (i=0; i<=7; i++)
        printf("x(%d)=%13.7e\n",i,b[i]);
  }




*/
/*********** Example  End **********/

/*********** Result  Start **********/
/*
x(0)= 1.000000e+00
x(1)= 0.000000e+00
x(2)= 2.000000e+00
x(3)=-2.000000e+00
x(4)= 4.000000e+00
x(5)=-1.000000e+00
x(6)= 3.000000e+00
x(7)= 1.000000e+00



*/
/*********** Result  End **********/


  #include "stdlib.h"
  #include "math.h"
  #include "stdio.h"
  int agjdn(a,b,n,m)
  int n,m;
  double a[],b[];
  { int *js,l,k,i,j,is,p,q;
    double d,t;
    js=malloc(n*sizeof(int));
    l=1;
    for (k=0;k<=n-1;k++)
      { d=0.0;
        for (i=k;i<=n-1;i++)
          for (j=k;j<=n-1;j++)
            { t=fabs(a[i*n+j]);
              if (t>d) { d=t; js[k]=j; is=i;}
            }
        if (d+1.0==1.0) l=0;
        else
          { if (js[k]!=k)
              for (i=0;i<=n-1;i++)
                { p=i*n+k; q=i*n+js[k];
                  t=a[p]; a[p]=a[q]; a[q]=t;
                }
            if (is!=k)
              { for (j=k;j<=n-1;j++)
                  { p=k*n+j; q=is*n+j;
                    t=a[p]; a[p]=a[q]; a[q]=t;
                  }
                for (j=0;j<=m-1;j++)
                  { p=k*m+j; q=is*m+j;
                    t=b[p]; b[p]=b[q]; b[q]=t;
                  }
              }
          }
        if (l==0)
          { free(js); printf("fail\n");
            return(0);
          }
        d=a[k*n+k];
        for (j=k+1;j<=n-1;j++)
          { p=k*n+j; a[p]=a[p]/d;}
        for (j=0;j<=m-1;j++)
          { p=k*m+j; b[p]=b[p]/d;}
        for (j=k+1;j<=n-1;j++)
          for (i=0;i<=n-1;i++)
            { p=i*n+j;
              if (i!=k)
                a[p]=a[p]-a[i*n+k]*a[k*n+j];
            }
        for (j=0;j<=m-1;j++)
        for (i=0;i<=n-1;i++)
          { p=i*m+j;
            if (i!=k)
              b[p]=b[p]-a[i*n+k]*b[k*m+j];
          }
      }
    for (k=n-1;k>=0;k--)
      if (js[k]!=k)
        for (j=0;j<=m-1;j++)
          { p=k*m+j; q=js[k]*m+j;
            t=b[p]; b[p]=b[q]; b[q]=t;
          }
    free(js);
    return(1);
  }



/*********** Example Start **********/
/*

  #include "stdio.h"
  #include "agjdn.c"
  main()
  { int i;
    static double a[4][4]={ {1.0,3.0,2.0,13.0},
                            {7.0,2.0,1.0,-2.0},
                            {9.0,15.0,3.0,-2.0},
                            {-2.0,-2.0,11.0,5.0}};
    static double b[4][2]={ {9.0,0.0},{6.0,4.0},
                            {11.0,7.0},{-2.0,-1.0}};
    if (agjdn(a,b,4,2)!=0)
      for (i=0;i<=3;i++)
        printf("x(%d)=%13.7e,  %13.7e\n",i,b[i][0],b[i][1]);
  }




*/
/*********** Example  End **********/

/*********** Result  Start **********/
/*
x(0)= 9.807447e-01,   4.979313e-01
x(1)= 2.679822e-01,   1.444940e-01
x(2)=-2.226289e-01,   6.285805e-02
x(3)= 5.892743e-01,  -8.131763e-02



*/
/*********** Result  End **********/

  
  int agmiv(a,m,n,b,x,aa,eps,u,v,ka)
  int m,n,ka;
  double a[],b[],x[],aa[],u[],v[],eps;
  { int i,j;
    extern int bginv();
    i=bginv(a,m,n,aa,eps,u,v,ka);
    if (i<0) return(-1);
    for (i=0; i<=n-1; i++)
      { x[i]=0.0;
        for (j=0; j<=m-1; j++)
          x[i]=x[i]+aa[i*m+j]*b[j];
      }
    return(1);
  }



/*********** Example Start **********/
/*

  #include "stdio.h"
  #include "agmiv.c"
  #include "bginv.c"
  #include "bmuav.c"
  main()
  { int i,m,n,ka;
    static double x[3],aa[3][4],u[4][4],v[3][3];
    static double a[4][3]={ {1.0,1.0,-1.0},{2.0,1.0,0.0},
                            {1.0,-1.0,0.0},{-1.0,2.0,1.0}};
    static double b[4]={2.0,-3.0,1.0,4.0};
    double eps;
    m=4; n=3; ka=5; eps=0.000001;
    i=agmiv(a,m,n,b,x,aa,eps,u,v,ka);
    if (i>0)
      { for (i=0; i<=2; i++)
          printf("x(%d)=%13.7e\n",i,x[i]);
        printf("\n");
        printf("MAT A+ :\n");
        for (i=0; i<=2; i++)
          printf("%13.7e %13.7e %13.7e %13.7e\n",
                  aa[i][0],aa[i][1],aa[i][2],aa[i][3]);
        printf("\n");
      }
  }




*/
/*********** Example  End **********/

/*********** Result  Start **********/
/*
x(0)=-1.190476e+00
x(1)= 9.523810e-01
x(2)=-6.666667e-01

MAT A+ :
-4.761905e-02  3.809524e-01  2.380952e-01 -4.761905e-02
 2.380952e-01  9.523810e-02 -1.904762e-01  2.380952e-01
-6.666667e-01  3.333333e-01  3.333333e-01  3.333333e-01




*/
/*********** Result  End **********/


  #include "stdlib.h"
  int agmqr(a,m,n,b,q)
  int m,n;
  double a[],b[],q[];
  { int i,j;
    double d,*c;
    extern int bmaqr();
    c=malloc(n*sizeof(double));
    i=bmaqr(a,m,n,q);
    if (i==0) { free(c); return(0);}
    for (i=0; i<=n-1; i++)
      { d=0.0;
        for (j=0; j<=m-1; j++)
          d=d+q[j*m+i]*b[j];
        c[i]=d;
      }
    b[n-1]=c[n-1]/a[n*n-1];
    for (i=n-2; i>=0; i--)
      { d=0.0;
        for (j=i+1; j<=n-1; j++)
          d=d+a[i*n+j]*b[j];
        b[i]=(c[i]-d)/a[i*n+i];
      }
    free(c); return(1);
  }



/*********** Example Start **********/
/*

  #include "bmaqr.c"
  #include "stdio.h"
  #include "agmqr.c"
  main()
  { int i,m,n;
    static double a[4][3]={ {1.0,1.0,-1.0},{2.0,1.0,0.0},
                            {1.0,-1.0,0.0},{-1.0,2.0,1.0}};
    static double b[4]={2.0,-3.0,1.0,4.0};
    static double q[4][4];
    m=4; n=3;
    i=agmqr(a,m,n,b,q);
    if (i!=0)
      { for (i=0; i<=2; i++)
          printf("x(%d)=%13.7e\n",i,b[i]);
        printf("\n");
        printf("MAT Q IS:\n");
        for (i=0; i<=3; i++)
          printf("%13.7e %13.7e %13.7e %13.7e\n",
                 q[i][0],q[i][1],q[i][2],q[i][3]);
        printf("\n");
        printf("MAT R IS:\n");
        for (i=0; i<=3; i++)
          printf("%13.7e %13.7e %13.7e\n",
                 a[i][0],a[i][1],a[i][2]);
      }
  }




*/
/*********** Example  End **********/

/*********** Result  Start **********/
/*
x(0)=-1.190476e+00
x(1)= 9.523810e-01
x(2)=-6.666667e-01

⌨️ 快捷键说明

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