Computational Physics - Department of Physics

(Axel Boer) #1

162 6 Linear Algebra


returnNULL;
}
i = (rowcolnum_bytes)/sizeof(char);
pointer[0] =new(nothrow)char[i];
if(!pointer[0]){
cout <<"Exception handling: Memory allocation failed";
cout <<" for address to "<< i <<" characters !"<< endl;
returnNULL;
}
ptr = pointer[0];
num = colnum_bytes;
for(i = 0; i < row; i++, ptr += num ){
pointer[i] = ptr;
}
return(void)pointer;
}// end: function void
matrix()
As an alternative, you could write your own allocation and deallocation of matrices. This
can be done rather straightforwardly with the following statements. Recall first that a matrix
is represented by a double pointer that points to a contiguous memory segment holding a
sequence of double
pointers in case our matrix is a double precision variable. Then each
double* pointer points to a row in the matrix. A declaration likedouble**A;means that A[i]
is a pointer to thei+ 1 -th row A[i]and A[i][j]is matrix entry(i,j). The way we would allocate
memory for such a matrix of dimensionalityn×nis for example using the following piece of
code


intn;
double**A;


A =new double*[n]
for( i = 0; i < n; i++)
A[i] =new double[N];


When we declare a matrix (a two-dimensional array) we must first declare an array of double
variables. To each of this variables we assign an allocationof a single-dimensional array. A
conceptual picture on how a matrixAis stored in memory is shown in Fig. 6.2.
Allocated memory should always be deleted when it is no longer needed. We free memory
using the statements


for( i = 0; i < n; i++)
delete[] A[i];
delete[] A;


delete[]A;, which frees an array of pointers to matrix rows.
However, including a library like Blitz++http://www.oonumerics.orgor Armadillo makes
life much easier when dealing with matrices.


6.3.3 Matrix Operations and C++ and Fortran Features of Matrix handling


Many program libraries for scientific computing are writtenin Fortran, often also in older
version such as Fortran 77. When using functions from such program libraries, there are
some differences between C++ and Fortran encoding of matrices and vectors worth noticing.
Here are some simple guidelines in order to avoid some of the most common pitfalls.

Free download pdf