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

📄 jlplq.c

📁 一种很好的潮流编程程序
💻 C
字号:
  
  #include "stdlib.h"
 
  int jlplq(double a[],double b[],double c[],int m,int n,double x[])
//  int m,n;
//  double a[],b[],c[],x[];
  { int i,mn,k,j,l,*js;
    double s,z,dd,y,*p,*d;
    extern int brinv();
    extern void brmul();
    js=(int *)malloc(m*sizeof(int));
    p=(double *)malloc(m*m*sizeof(double));
    d=(double *)malloc(m*(m+n)*sizeof(double));
    for (i=0; i<=m-1; i++) js[i]=n+i;
    mn=m+n; s=0.0;
    while (1==1)
      { for (i=0; i<=m-1; i++)
          for (j=0; j<=m-1; j++)
            p[i*m+j]=a[i*mn+js[j]];
        l=brinv(p,m);
        if (l==0)
          { x[n]=s; free(js); free(p);
            free(d); return(l);
          }
        brmul(p,a,m,m,mn,d);
        for (i=0; i<=mn-1; i++) x[i]=0.0;
        for (i=0; i<=m-1; i++)
          { s=0.0;
            for (j=0; j<=m-1; j++)
              s=s+p[i*m+j]*b[j];
            x[js[i]]=s;
          }
        k=-1; dd=1.0e-35;
        for (j=0; j<=mn-1; j++)
          { z=0.0;
            for (i=0; i<=m-1; i++)
              z=z+c[js[i]]*d[i*mn+j];
            z=z-c[j];
            if (z>dd) { dd=z; k=j;}
          }
        if (k==-1)
          { s=0.0;
            for (j=0; j<=n-1; j++)
              s=s+c[j]*x[j];
	    x[n]=s; free(js); free(p);
            free(d); return(1);
          }
        j=-1;
        dd=1.0e+20;
        for (i=0; i<=m-1; i++)
          if (d[i*mn+k]>=1.0e-20)
            { y=x[js[i]]/d[i*mn+k];
              if (y<dd) { dd=y; j=i;}
            }
        if (j==-1) 
          { x[n]=s; free(js); free(p);
            free(d); return(0);
          }
        js[j]=k;
      }
  }

⌨️ 快捷键说明

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