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 + -
显示快捷键?