// nacteni standardnich knihoven #include #include #include // nastaveni numericke >nuly< #define TINY 1.0e-20 // deklarace pouzitych funkci int printm(float **,int); int printv(float *,int); float *vector(long); float **matrix(long); void ludcmp(float **,int,int *,float *); void lubksb(float **,int,int *,float []); void mprove(float **,float **,int,int [],float [],float []); // hlavni program int main() { int n,ii,jj,*indx; float **a,**alu,*d,*b,*x; printf("zadej stupen ctvercove matice >A<\n"); printf("n="); scanf("%d",&n); d=(float *)malloc((size_t)sizeof(float)); indx=(int *)malloc((size_t)n*sizeof(float)); a=matrix(n); alu=matrix(n); b=vector(n); x=vector(n); printf("zadej prvky matice >A<\n"); for (ii=0;iib<\n"); for (ii=0;iiA<"); printm(a,n); printf("vektor >b<"); printv(b,n); ludcmp(alu,n,indx,d); lubksb(alu,n,indx,x); printf("LU rozklad matice >A<"); printm(alu,n); printf("reseni >x< soustavy rovnic >Ax=b<"); printv(x,n); printf("zpresnene reseni >x< soustavy rovnic >Ax=b<"); mprove(a,alu,n,indx,b,x); printv(x,n); free(a); free(alu); free(b); free(x); free(indx); free(d); return 0; } // funkce vypisujici matici int printm(float **a,int n) { int ii,jj; for (ii=0;iibig) { big=temp; } } if (big==0.0) printf("Singular matrix in routine ludcmp\n"); vv[i]=1.0/big; } for (j=0;j=big) { big=dum; imax=i; } } if (j!=imax) { for (k=0;k-1) for (j=ii;j<=i-1;j++) sum-=a[i][j]*b[j]; else if (sum) ii=i; b[i]=sum; } for (i=n-1;i>=0;i--) { sum=b[i]; for (j=i+1;j