Exemplo n.º 1
0
double spectral_game(int n)
{
    double *A;
    double u[n] __attribute__ ((aligned (16)));
    double v[n] __attribute__ ((aligned (16)));
    int i, j;

    /* Aligned allocation. */
    /* A = (double *)malloc(n*n*sizeof(double)); */
    if ( posix_memalign( (void **)&A , 4*sizeof(double) , sizeof(double) * n * n ) != 0 ) {
        printf( "spectral_game:%i: call to posix_memalign failed.\n" , __LINE__ );
        abort();
        }


    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            A[i*n+j] = Ac(i, j);
        }
    }


    for (i = 0; i < n; i++) {
        u[i] = 1.0;
    }
    for (i = 0; i < 10; i++) {
        AvA(n, A, u, v);
        AvA(n, A, v, u);
    }
    free(A);
    return sqrt(dot_product2(n, u, v) / dot_product2(n, v, v));
}
Exemplo n.º 2
0
Vector<value_type> lin_solve(Matrix<value_type> const & A, Vector<value_type> const & bin) {
	
	//Create A=QR 
	
	if(A.dimension().first > A.dimension().second)
		return lin_solve(A.trans()*A,A.trans()*bin);
	Matrix<value_type> Ac(std::max(A.dimension().first,A.dimension().second),A.dimension().second);
	Ac = A;
	QR_Givens<value_type> qr(Ac);
	/*std::cout << "A:\n " << A << " b: " << bin << "\n\n" ;
	std::cout << "Q: " << qr.get_q() << " R: " << qr.get_r() << "\n";
	std::cout << "a=QR: " << qr.get_q() * qr.get_r() << "\n";*/

	// calc b=QT*bin
	Vector<value_type> b = qr.get_q().trans()*bin;

	//std::cout << "Qb: \n" << b << "\n\n";

	// backtrack Rx=b
	Vector<value_type> x(A.dimension().second);
		// If check if zerolines for overdefined
	size_type dim1 = A.dimension().first, dim2 = A.dimension().second;
			
	for(size_type i=dim1-1;i!=0;--i)
		if(qr.get_r().is_zero(i))
		{
			x[i] = 1.0;
			//std::cout << "found zeroline\n";
		}
		else
		{
			dim1 = i+1;
			break;
		}
	

	if(dim1 < dim2)
	{
		//=> extend R to nxn and set k xs to 1 and beging at n-k line in backtracking
		for(size_type i = dim1; i<dim2;++i)
		{
			x[i] = 1.0;
		}
	}

	// real backtracking:
	for(size_type i = dim1-1;;--i)
	{
		x[i] = b[i];
		for(size_type j = i+1;j<dim2;++j)
		{
			x[i] -= qr.get_r()[i][j]*x[j];
		}
		x[i]/= qr.get_r()[i][i];
		if(i==0)
			break;
	}
	//std::cout << "x: \n" << x << "\n";
	return x;
}
Exemplo n.º 3
0
long sprGetCol()
{
	long j, i;
	sparse_int_t *ir = new sparse_int_t[10];
	sparse_int_t *jc = new sparse_int_t[4];
	real_t *val = new real_t[10];
	real_t *col = new real_t[4];

	/* Test matrix:
	 *
	 *  [  0  3  6 ]
	 *  [  1  0  7 ]
	 *  [  2  0  8 ]
	 *  [  0  4  9 ]
	 *  [  0  5 10 ]
	 */

	jc[0] = 0; jc[1] = 2; jc[2] = 5; jc[3] = 10;
	ir[0] = 1; ir[1] = 2;
	ir[2] = 0; ir[3] = 3; ir[4] = 4;
	ir[5] = 0; ir[6] = 1; ir[7] = 2; ir[8] = 3; ir[9] = 4;
	for (i = 0; i < 10; i++) val[i] = 1.0+i;

	SparseMatrix Ac(5, 3, ir, jc, val);
	real_t *Acv = Ac.full(); // row major format
	SparseMatrixRow A(5, 3, 3, Acv);
	delete[] Acv;
	Ac.free ();	// or delete[] val,jc,ir;

	Indexlist rows(4);

	rows.addNumber(2);
	rows.addNumber(4);
	rows.addNumber(3);
	rows.addNumber(0);

	/* Indexed matrix:
	 *
	 *  [  2  0  8 ]
	 *  [  0  5 10 ]
	 *  [  0  4  9 ]
	 *  [  0  3  6 ]
	 */

	for (j = 0; j < 3; j++)
	{
		fprintf(stdFile, "Column %ld:\n", j);
		A.getCol(j, &rows, 1.0, col);
		for (i = 0; i < 4; i++)
			fprintf(stdFile, " %3.0f\n", col[i]);
	}
				
	delete[] col;
	A.free ();	// or delete[] val,jc,ir;

	return 0;
}
Exemplo n.º 4
0
long sprTimes()
{
	long i;
	sparse_int_t *ir = new sparse_int_t[10];
	sparse_int_t *jc = new sparse_int_t[6];
	real_t *val = new real_t[10];

	real_t *x = new real_t[5*2];
	real_t *y = new real_t[3*2];

	real_t Ax[] = {-23, -11, -26, 42, 74, 99};
	real_t ATy[] = {-63, -69, -222, -423, -359, 272, 126, 663, 1562, 1656};
	real_t err = 0.0;

	for (i = 0; i < 10; i++) x[i] = -4.0+i;

	/* Test matrix:
	 *
	 *  [  0  3  4  6  0 ]
	 *  [  1  0  0  7  9 ]
	 *  [  2  0  5  8 10 ]
	 */

	jc[0] = 0; jc[1] = 2; jc[2] = 3; jc[3] = 5; jc[4] = 8; jc[5] = 10;
	ir[0] = 1; ir[1] = 2;
	ir[2] = 0; 
	ir[3] = 0; ir[4] = 2;
	ir[5] = 0; ir[6] = 1; ir[7] = 2; 
	ir[8] = 1; ir[9] = 2;
	for (i = 0; i < 10; i++) val[i] = 1.0+i;

	SparseMatrix Ac(3, 5, ir, jc, val);	// reference to ir, jc, val
	real_t *Acv = Ac.full(); // row major format
	SparseMatrixRow A(3, 5, 5, Acv);
	delete[] Acv;
	Ac.free ();	// or delete[] val,jc,ir;

	A.times(2, 1.0, x, 5, 0.0, y, 3);
	
	for (i = 0; i < 6; i++)
		if (fabs(y[i] - Ax[i]) > err) err = fabs(y[i] - Ax[i]);
	fprintf(stdFile, "Error in sparse A*x: %9.2e\n", err);

	A.transTimes(2, 1.0, y, 3, 0.0, x, 5);

	err = 0.0;
	for (i = 0; i < 10; i++)
		if (fabs(x[i] - ATy[i]) > err) err = fabs(x[i] - ATy[i]);
	fprintf(stdFile, "Error in sparse A'*x: %9.2e\n", err);

	A.free ();	// or delete[] val,ir,jc
	delete[] y;
	delete[] x;

	return 0;
}
Exemplo n.º 5
0
long sprGetRow()
{
	long j, i;
	sparse_int_t *ir = new sparse_int_t[10];
	sparse_int_t *jc = new sparse_int_t[6];
	real_t *val = new real_t[10];
	real_t *row = new real_t[4];

	/* Test matrix:
	 *
	 *  [  0  3  4  6  0 ]
	 *  [  1  0  0  7  9 ]
	 *  [  2  0  5  8 10 ]
	 */

	jc[0] = 0; jc[1] = 2; jc[2] = 3; jc[3] = 5; jc[4] = 8; jc[5] = 10;
	ir[0] = 1; ir[1] = 2;
	ir[2] = 0; 
	ir[3] = 0; ir[4] = 2;
	ir[5] = 0; ir[6] = 1; ir[7] = 2; 
	ir[8] = 1; ir[9] = 2;
	for (i = 0; i < 10; i++) val[i] = 1.0+i;

	SparseMatrix Ac(3, 5, ir, jc, val);
	real_t *Acv = Ac.full(); // row major format
	SparseMatrixRow A(3, 5, 5, Acv);
	delete[] Acv;
	Ac.free ();	// or delete[] val,jc,ir;

	Indexlist cols(4);

	cols.addNumber(2);
	cols.addNumber(4);
	cols.addNumber(3);
	cols.addNumber(1);

	/* Indexed matrix:
	 *
	 * [  4  0  6  3 ]
	 * [  0  9  7  0 ]
	 * [  5 10  8  0 ]
	 */

	for (j = 0; j < 3; j++)
	{
		A.getRow(j, &cols, 1.0, row);
		for (i = 0; i < 4; i++)
			fprintf(stdFile, " %3.0f", row[i]);
		fprintf(stdFile, "\n");
	}
				
	delete[] row;
	A.free ();

	return 0;
}
Exemplo n.º 6
0
int main()
{
  const int sz=7;
    CArray A(sz);
    A(0) = complex<float>(1,2);
    A(1) = complex<float>(3,4);

    Array<float,1> Ar = real(A);
    BZTEST(int(Ar(0)) == 1 && int(Ar(1)) == 3);

    Array<float,1> Ai = imag(A);
    BZTEST(int(Ai(0)) == 2 && int(Ai(1)) == 4);

    CArray Ac(sz);
    Ac = conj(A);

    BZTEST(Ac(0) == complex<float>(1,-2));
    BZTEST(Ac(1) == complex<float>(3,-4));

    Array<float,1> Ab(sz);
    Ab = abs(A);
    BZTEST(fabs(Ab(0) - 2.236068) < eps);
    BZTEST(fabs(Ab(1) - 5.0) < eps);

    Ab = arg(A);
    BZTEST(fabs(Ab(0) - atan(2.0)) < eps);
    BZTEST(fabs(Ab(1) - atan(4.0/3.0)) < eps);

    Array<float,1> r(sz), theta(sz);
    r(0) = 4.0f;
    r(1) = 15.0f;
    theta(0) = float(3.141592/3.0);
    theta(1) = float(3.0*3.141592/2.0);
    Ac = blitz::polar(r,theta);
    BZTEST(fabs(real(Ac(0)) - 2) < eps);
    BZTEST(fabs(imag(Ac(0)) - 3.4641012) < eps);
    BZTEST(fabs(real(Ac(1)) - 0.0) < eps);
    BZTEST(fabs(imag(Ac(1)) + 15.0) < eps);

    Array<complex<long double>,1> A11(5),B11(5),C11(5);
    A11=1,2,3,4,5;
    B11=1,2,3,4,5;
    C11=A11+B11;
    BZTEST(fabs(real(C11(0)) - 2.) < eps);
    C11=A11/B11;
    BZTEST(fabs(real(C11(1)) - 1.) < eps);
    C11=1.0l/A11;
    BZTEST(fabs(real(C11(2)) - 1/3.) < eps);
    C11=A11/1.0l;
    BZTEST(fabs(real(C11(3)) - 4.) < eps);
    C11=complex<long double>(0,1)/A11;
    BZTEST(fabs(imag(C11(4)) - 1/5.) < eps);
    C11=A11/complex<long double>(0,1);
    BZTEST(fabs(imag(C11(0)) - -1.) < eps);

    return 0;
}
Exemplo n.º 7
0
long sprIndTimes()
{
	const long N = 4;
	long i, j;
	long nRows = 2 * N + 1;
	long nCols = N;
	long nnz = 3 * N;
	sparse_int_t *ir = new sparse_int_t[nnz];
	sparse_int_t *jc = new sparse_int_t[nCols+1];
	real_t *val = new real_t[nnz];
	real_t *xc = new real_t[3*2];
	real_t *yc = new real_t[4*2];
	real_t Ax[] = {0.31, 0.05, 0.06, 0.30, 0.76, 0.20, 0.24, 0.60};
	real_t ATy[] = {0.278, 0.000, 0.548, 0.776, 0.000, 1.208};

	Indexlist rows(4), cols(3), allcols(nCols);

	rows.addNumber(2);
	rows.addNumber(4);
	rows.addNumber(3);
	rows.addNumber(0);

	cols.addNumber(1);
	cols.addNumber(3);
	cols.addNumber(0);

	for (i = 0; i < nCols; i++) 
		allcols.addNumber(i);

	// build test matrix
	for (i = 0; i <= N; i++) jc[i] = 3*i;
	for (j = 0; j < N; j++) 
		for (i = 0; i < 3; i++)
		{
			ir[j*3+i] = 2*j + i;
			val[j*3+i] = 1.0 - 0.1 * (j*3+i);
		}
	SparseMatrix Ac(nRows, nCols, ir, jc, val);
	real_t *Acv = Ac.full(); // row major format
	SparseMatrixRow A(nRows, nCols, nCols, Acv);
	delete[] Acv;
	Ac.free ();	// or delete[] val,jc,ir;

	fprintf(stdFile, "Test matrix A =\n");
	for (j = 0; j < nRows; j++)
	{
		A.getRow(j, &allcols, 1.0, xc);
		for (i = 0; i < nCols; i++)
			fprintf(stdFile, "%6.2f", xc[i]);
		fprintf(stdFile, "\n");
	}

	for (i = 0; i < 6; i++)
		xc[i] = (1.0 + i) * 0.1;

	A.times(&rows, &cols, 2, 1.0, xc, 3, 0.0, yc, 4, BT_TRUE);

	real_t err = 0.0;
	for (i = 0; i < 8; i++)
		if (fabs(yc[i] - Ax[i]) > err)
			err = fabs(yc[i] - Ax[i]);
	fprintf(stdFile, "Error in sparse indexed A*x: %9.2e\n", err);

	A.transTimes(&rows, &cols, 2, 1.0, yc, 4, 0.0, xc, 3);
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 2; j++)
			fprintf(stdFile, "%6.2f", ATy[i + j*3]);
		fprintf(stdFile, "\n");
	}
	for (i = 0; i < 3; i++)
	{
		for (j = 0; j < 2; j++)
			fprintf(stdFile, "%6.2f", xc[i + j*3]);
		fprintf(stdFile, "\n");
	}
	err = 0.0;
	for (i = 0; i < 6; i++)
		if (fabs(xc[i] - ATy[i]) > err)
			err = fabs(xc[i] - ATy[i]);
	fprintf(stdFile, "Error in sparse indexed A'*y: %9.2e\n", err);

	delete[] xc;
	delete[] yc;
	A.free ();

	return 0;
}