{"id":16256446,"url":"https://github.com/masyagin1998/divide-and-conquer-eigenvalues","last_synced_at":"2025-03-19T21:30:59.841Z","repository":{"id":97698161,"uuid":"209280175","full_name":"masyagin1998/divide-and-conquer-eigenvalues","owner":"masyagin1998","description":"divide-and-conquer eigenvalues algorithm for symmetric tridiagonal matrix, designed by Cuppen","archived":false,"fork":false,"pushed_at":"2020-03-01T13:01:12.000Z","size":666,"stargazers_count":15,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-28T23:25:37.695Z","etag":null,"topics":["cuppen","divide-and-conquer","linear-algebra","matrix","symmetric","tridiagonal"],"latest_commit_sha":null,"homepage":null,"language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/masyagin1998.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-09-18T10:22:38.000Z","updated_at":"2024-11-07T09:52:05.000Z","dependencies_parsed_at":"2023-06-02T19:15:40.395Z","dependency_job_id":null,"html_url":"https://github.com/masyagin1998/divide-and-conquer-eigenvalues","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masyagin1998%2Fdivide-and-conquer-eigenvalues","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masyagin1998%2Fdivide-and-conquer-eigenvalues/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masyagin1998%2Fdivide-and-conquer-eigenvalues/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/masyagin1998%2Fdivide-and-conquer-eigenvalues/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/masyagin1998","download_url":"https://codeload.github.com/masyagin1998/divide-and-conquer-eigenvalues/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244056425,"owners_count":20390719,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cuppen","divide-and-conquer","linear-algebra","matrix","symmetric","tridiagonal"],"created_at":"2024-10-10T15:45:14.545Z","updated_at":"2025-03-19T21:30:59.836Z","avatar_url":"https://github.com/masyagin1998.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"# divide-and-conquer-eigenvalues\n\nThis is realization of divide-and-conquer eigenvalues algorithm for symmetric tridiagonal matrix, designed by Cuppen in 1982.\n\n## Tech\n\nAlgorithm is coded in pure `C99`. You can compile it with `C89` compiler easily, if You change `long double` to `doule`, `sqrtl` and `fabsl` to `sqrt` and `abs`, or declare Your own `sqrtl` and `fabsl` (`C89` doesn't have them) and change C version in Makefile.\n\n## Installation\n\n`divide-and-conquer-eigenvalues` requires only `C99`-compatible compiler and `make` utility.\n\n```sh\n$ cd divide-and-conquer-eigenvalues\n$ make\n$ ./bin/test data/in.mat\n```\n\n## Short description\n\n`divide-and-conquer-eigenvalues` finds for given symmetric tridiagonal matrix `T` matrices of eigenvectors `Q` and eigenvalues `L`, such `T = Q * L * Q_t`, partitioning large `T` matrix into two half-sized matrices `T1` and `T2` (they are also partitioned, so we use `divide-and-conquer` strategy).\n\n### Optimization\n\nYou can add thread-pool to this algorithm:\n- recursive `divide-and-conquer` steps can be processed in parallel. You can divide recursive calls to current thread and additional thread;\n- `secular equation` can be solved in parallel too, because its routine doesn't modify any input matrices;\n- matrix inversion step can be simplified (because matrix should be tridiagonal);\n\n## Usefull articles\n\nIn english:\n- [Arbenz P. Lecture Notes on Solving Large Scale Eigenvalue Problems](https://yadi.sk/i/7Ry-GgZ_vYoDvw)\n- [Arbenz P. - his website with lectures, presentations, etc](http://people.inf.ethz.ch/arbenz/ewp/index.html)\n- [Demmel J. W. Applied Numerical Linear Algebra](https://yadi.sk/i/CAk-jcKLxsj85Q)\n- [Rutter J. A Serial Implementation of Cuppen's Divide and Conquer Algorithm for the Symmetric Eigenvalue Problem](https://yadi.sk/i/_UFPGDnKvpdfqA)\n\nIn russian:\n- [Golubkov A. Yu. Lecture notes on computational methods of linear algebra.](https://yadi.sk/i/SQ0BW2aAu0m-LQ)\n- [AlgoWiki Divide-and-Conquer](https://algowiki-project.org/ru/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%C2%AB%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D1%8F%D0%B9_%D0%B8_%D0%B2%D0%BB%D0%B0%D1%81%D1%82%D0%B2%D1%83%D0%B9%C2%BB_%D0%B2%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B8_%D0%B2%D0%B5%D0%BA%D1%82%D0%BE%D1%80%D0%BE%D0%B2_%D1%81%D0%B8%D0%BC%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D0%BE%D0%B9_%D1%82%D1%80%D0%B5%D1%85%D0%B4%D0%B8%D0%B0%D0%B3%D0%BE%D0%BD%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86%D1%8B)\n\n## TODOs:\n- Change all `long long double` to `complex`, to not to fail on some matricies.\n\n## Many thanks to:\n- Golubkov A. Yu. - BMSTU algebra, Galois theory, Rings theory and NMLA teacher;\n\n## Referenced or mentioned by:\n- [Shrey Dabhi, Manojkumar Parmar. Eigenvector Component Calculation Speedup over NumPy for High-Performance Computing](https://arxiv.org/pdf/2002.04989.pdf)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasyagin1998%2Fdivide-and-conquer-eigenvalues","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmasyagin1998%2Fdivide-and-conquer-eigenvalues","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmasyagin1998%2Fdivide-and-conquer-eigenvalues/lists"}