不要告诉我用什么方法,give me sample...

解决方案 »

  1.   

      #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);
      }
      

  2.   

     #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);
      }
      

  3.   

    // 以下算法能求解不太复杂的,有且只有唯一解的多元一次方程组
    const n = 6;
    int nLine, nRow, nSubLine;
    double head, subhead;
    double c[n][n+1];
    double hh; for (nLine = 0; nLine < n; nLine++)
    {
    // 如果该系数为0,则将此行与后面的行进行交换
    if ( c[nLine][nLine] == 0 )
    {
    for ( nRow = 0; nRow < n + 1; nRow++ )
    {
    hh = c[nLine][nRow];
    c[nLine][nRow] = c[nLine+1][nRow];
    c[nLine+1][nRow] = hh;
    }
    }
    head = c[nLine][nLine];
    // 1将每一行的c[nLine][nLine]项的系数变为1
    for (nRow = nLine; nRow < n+1; nRow++)
    c[nLine][nRow] = c[nLine][nRow] / head;

    // 2将每一列的c[nLine][nLine]下面的系数变为0
    for (nSubLine = 0; nSubLine < n; nSubLine++)
    {
    if ( nSubLine == nLine )
    continue;
    subhead = c[nSubLine][nLine];
    for (nRow = nLine; nRow < n+1; nRow++)
    c[nSubLine][nRow] -= c[nLine][nRow]*subhead;
    }
    }
      

  4.   

    feelinn(feelinn)兄,没有注释太难看懂了。