qr_algorithm::operator<<;
29 inti, j, tmp, lim2 =
LIMS>> 1;
35 for(i = 0; i < N; i++) {
36A[0][i][i] = (std::rand() %
LIMS) - lim2;
37 for(j = i + 1; j < N; j++) {
38tmp = (std::rand() %
LIMS) - lim2;
54void mat_mul(
conststd::valarray<std::valarray<double>> &A,
55 conststd::valarray<std::valarray<double>> &B,
56std::valarray<std::valarray<double>> *OUT) {
62perror(
"Matrix dimensions mismatch!");
66 for(
inti = 0; i < R1; i++) {
67 for(
intj = 0; j < C2; j++) {
69 for(
intk = 0; k < C1; k++) {
70OUT[0][i][j] += A[i][k] * B[k][j];
98std::valarray<double>
eigen_values(std::valarray<std::valarray<double>> *A,
99 boolprint_intermediates =
false) {
100 introws = A->size();
102 intcounter = 0, num_eigs = rows - 1;
105std::valarray<std::valarray<double>> Q(rows);
106std::valarray<std::valarray<double>> R(columns);
109std::valarray<double> eigen_vals(rows);
110 for(
inti = 0; i < rows; i++) {
111Q[i] = std::valarray<double>(columns);
112R[i] = std::valarray<double>(columns);
116 while(num_eigs > 0) {
118 while(std::abs(A[0][num_eigs][num_eigs - 1]) >
119std::numeric_limits<double>::epsilon()) {
121last_eig = A[0][num_eigs][num_eigs];
122 for(
inti = 0; i < rows; i++) {
123A[0][i][i] -= last_eig;
128 if(print_intermediates) {
129std::cout << *A <<
"\n";
130std::cout << Q <<
"\n";
131std::cout << R <<
"\n";
132printf(
"-------------------- %d ---------------------\n",
139 for(
inti = 0; i < rows; i++) {
140A[0][i][i] += last_eig;
145eigen_vals[num_eigs] = last_eig;
147 if(print_intermediates) {
148std::cout <<
"========================\n";
149std::cout <<
"Eigen value: "<< last_eig <<
",\n";
150std::cout <<
"========================\n";
157eigen_vals[0] = A[0][0][0];
159 if(print_intermediates) {
160std::cout << Q <<
"\n";
161std::cout << R <<
"\n";
178std::valarray<std::valarray<double>> X = {{5, 7}, {7, 11}};
179 doubley[] = {15.56158, 0.384227};
181std::cout <<
"------- Test 1 -------"<< std::endl;
184 for(
inti = 0; i < 2; i++) {
185std::cout << i + 1 <<
"/2 Checking for "<< y[i] <<
" --> ";
186 boolresult =
false;
187 for(
intj = 0; j < 2 && !result; j++) {
188 if(std::abs(y[i] - eig_vals[j]) < 0.1) {
190std::cout <<
"("<< eig_vals[j] <<
") ";
194std::cout <<
"found\n";
196std::cout <<
"Test 1 Passed\n\n";
211std::valarray<std::valarray<double>> X = {{-4, 4, 2, 0, -3},
215{-3, -1, -3, -3, 0}};
216 doubley[] = {9.27648, -9.26948, 2.0181, -1.03516,
219std::cout <<
"------- Test 2 -------"<< std::endl;
222std::cout << X <<
"\n" 223<<
"Eigen values: "<< eig_vals <<
"\n";
225 for(
inti = 0; i < 5; i++) {
226std::cout << i + 1 <<
"/5 Checking for "<< y[i] <<
" --> ";
227 boolresult =
false;
228 for(
intj = 0; j < 5 && !result; j++) {
229 if(std::abs(y[i] - eig_vals[j]) < 0.1) {
231std::cout <<
"("<< eig_vals[j] <<
") ";
235std::cout <<
"found\n";
237std::cout <<
"Test 2 Passed\n\n";
243int main(
intargc,
char**argv) {
250std::cout <<
"Usage: ./qr_eigen_values [mat_size]\n";
255fprintf(stderr,
"Matrix size should be > 2\n");
260std::srand(std::time(
nullptr));
264std::valarray<std::valarray<double>> A(rows);
266 for(
inti = 0; i < rows; i++) {
267A[i] = std::valarray<double>(columns);
273std::cout << A <<
"\n";
275clock_t t1 = clock();
277 doubledtime =
static_cast<double>(clock() - t1) / CLOCKS_PER_SEC;
279std::cout <<
"Eigen vals: ";
280 for(i = 0; i <
mat_size; i++) std::cout << eigen_vals[i] <<
"\t";
281std::cout <<
"\nTime taken to compute: "<< dtime <<
" sec\n";
int main()
Main function.
Functions to compute QR decomposition of any rectangular matrix.
std::valarray< double > eigen_values(std::valarray< std::valarray< double > > *A, bool print_intermediates=false)
void qr_decompose(const std::valarray< std::valarray< T > > &A, std::valarray< std::valarray< T > > *Q, std::valarray< std::valarray< T > > *R)
Library functions to compute QR decomposition of a given matrix.
void create_matrix(std::valarray< std::valarray< double > > *A)
void mat_mul(const std::valarray< std::valarray< double > > &A, const std::valarray< std::valarray< double > > &B, std::valarray< std::valarray< double > > *OUT)
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4