вот прога, разлагает матрицу в произведение верхнетреугольной и нижнетреугольной, плюс регуляризация. тут же и детерминант, если надо. не обессудбте что на старом СИ. давно писал.
кстати, еще одна ошибка на СИ- поставить запятую вместо десятичной точки. компилятор сьест, но..
#include <conio.h>
#include <iostream.h>
#include <math.h>
#include <complex.h>
#include <dos.h>
#include <stdio.h>
#include <float.h>
#include <alloc.h>
#include <stdlib.h>
#define mu 11
/*extern unsigned _stklen=10000;*/
void main(void) { int i,j,k,m=10;double xp0,rm[mu];double tmp,
aa[mu][mu],bb[mu][mu],x[mu],am[mu]={0,0.0105,0.0253,0.085,0.24,0.34,
0.781,1.428,2.25,3.36,4.62},rc[mu]={0,0.2,0.237,0.316,0.42,0.56,0.75,
1.,1.33,1.78,2.37};for (i=1;i<=m;i++) {rm[i]=rc[i];aa[i][1]=1;
for(j=2;j<=m;j++) aa[i][j]=pow(am[i],(double)(j-1));aa[i][i]+=0.00000001;}
for(i=1;i<=m;i++) {rc[0]=0;for(k=1;k<i;k++) rc[0]+=bb[i][k]*bb[k][i];
bb[i][i]=aa[i][i]-rc[0];if (fabs(bb[i][i])<1.e-300){exit(0);}
for(j=i+1;j<=m;j++) {x[0]=0;xp0=0;for(k=1;k<i;k++){xp0+=bb[i][k]*bb[k][j];
x[0]+=bb[k][i]*bb[j][k];} bb[i][j]=(aa[i][j]-xp0)/bb[i][i];bb[j][i]=
aa[j][i]-x[0];}} for(i=1;i<=m;i++) {rc[0]=0;for(j=1;j<i;j++)
rc[0]+=bb[i][j]*x[j];x[i]=(rc[i]-rc[0])/bb[i][i];}xp0=rc[m];for(i=1;i<=m;i++) {
printf ("%e %e %d\n",x[i],rc[i],i);getch();
tmp=x[i];x[i]=rc[i];rc[i]=tmp;} for(i=m;i>0;i--){rc[0]=0;for(j=i+1;j<=m;j++)
rc[0]+=bb[i][j]*x[j];x[i]=rc[i]-rc[0];} for(i=1;i<=m;i++) {rc[0]=0;
for(j=1;j<=m;j++) {rc[0]+=aa[i][j]*x[j];}
printf ("%lf %lf %lf \n",rc[0],rm[i],x[i]);getch();
}
getch();
}
|