int main(void) { float d,**a,**al,*b,*x; unsigned long i,j,*indx; long idum=(-1); a=matrix(1,7,1,4); x=vector(1,7); b=vector(1,7); al=matrix(1,7,1,2); indx=lvector(1,7); for (i=1;i<=7;i++) { x[i]=ran1(&idum); for (j=1;j<=4;j++) { a[i][j]=ran1(&idum); } } banmul(a,7,2,1,x,b); for (i=1;i<=7;i++) printf("%ld %12.6f %12.6f\n",i,b[i],x[i]); bandec(a,7,2,1,al,indx,&d); banbks(a,7,2,1,al,indx,b); for (i=1;i<=7;i++) printf("%ld %12.6f %12.6f\n",i,b[i],x[i]); free_lvector(indx,1,7); free_matrix(al,1,7,1,2); free_vector(b,1,7); free_vector(x,1,7); free_matrix(a,1,7,1,4); return 0; }
int main(void) { unsigned long i,j,k; float **a,**aa,*ax,*b,*x; a=matrix(1,NP,1,MP); aa=matrix(1,NP,1,NP); ax=vector(1,NP); b=vector(1,NP); x=vector(1,NP); for (i=1;i<=M1;i++) for (j=1;j<=NP;j++) a[j][i]=10.0*j+i; /* Lower band */ for (i=1;i<=NP;i++) a[i][M1+1]=i; /* Diagonal */ for (i=1;i<=M2;i++) for (j=1;j<=NP;j++) a[j][M1+1+i]=0.1*j+i; /* Upper band */ for (i=1;i<=NP;i++) { for (j=1;j<=NP;j++) { k=i-M1-1; if (j>=LMAX(1,1+k) && j<=LMIN(M1+M2+1+k,NP)) aa[i][j]=a[i][j-k]; else aa[i][j]=0.0; } } for (i=1;i<=NP;i++) x[i]=i/10.0; banmul(a,NP,M1,M2,x,b); for (i=1;i<=NP;i++) { for (ax[i]=0.0,j=1;j<=NP;j++) ax[i] += aa[i][j]*x[j]; } printf("\tReference vector\tbanmul vector\n"); for (i=1;i<=NP;i++) printf("\t%12.4f\t%12.4f\n",ax[i],b[i]); free_vector(x,1,NP); free_vector(b,1,NP); free_vector(ax,1,NP); free_matrix(aa,1,NP,1,NP); free_matrix(a,1,NP,1,MP); return 0; }
int main() { int i, j; VecDoub x(7), b(7); MatDoub a(7, 4); a[0][0] = 0.0000000; // arbitrary: not used a[0][1] = 0.0000000; // arbitrary: not used a[0][2] = 0.5297000; a[0][3] = 0.9304360; a[1][0] = 0.0000000; // arbitrary: not used a[1][1] = 0.0668422; a[1][2] = 0.7226600; a[1][3] = 0.6711490; a[2][0] = 0.6316350; a[2][1] = 0.8847070; a[2][2] = 0.5194160; a[2][3] = 0.6515190; a[3][0] = 0.2624530; a[3][1] = 0.7621980; a[3][2] = 0.7533560; a[3][3] = 0.9092080; a[4][0] = 0.2727100; a[4][1] = 0.8976560; a[4][2] = 0.2749070; a[4][3] = 0.5162920; a[5][0] = 0.2470390; a[5][1] = 0.4865170; a[5][2] = 0.8461670; a[5][3] = 0.8309650; a[6][0] = 0.9910370; a[6][1] = 0.6792960; a[6][2] = 0.7664950; a[6][3] = 0.0000000; // arbitrary: not used x[0] = 0.4159990; x[1] = 0.3835020; x[2] = 0.3834160; x[3] = 0.2377740; x[4] = 0.0726859; x[5] = 0.3592650; x[6] = 0.0345721; cout << "Banded matrix [a]:" << endl; cout << fixed << setprecision(7); for (i = 0; i < a.nrows(); i++) { for (j = 0; j < a.ncols(); j++) { cout << setw(12) << a[i][j]; } cout << endl; } cout << endl; cout << "Vector [x]:" << endl; for (i = 0; i < x.size(); i++) { cout << setw(18) << x[i] << endl; } cout << endl; // multiply a times x, giving b banmul(a, 2, 1, x, b); cout << "After multiplying [a] times [x] this is [b]:" << endl; for (i = 0; i < b.size(); i++) { cout << setw(18) << b[i] << endl; } cout << endl; // // First, save original value of x // VecDoub xsave(x); // // The constructor does the decomposition // Bandec banded(a, 2, 1); // // Now solve for x // banded.solve(b, x); cout << "After solving [a] times [x] = [b] with bandec.solve():" << endl; cout << " Original Solved" << endl << " x x" << endl; for (i = 0; i < x.size(); i++) { cout << setw(12) << xsave[i] << setw(12) << x[i] << endl; } return 0; }