Advertisement
Guest User

Untitled

a guest
Jun 25th, 2019
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. int k = 0;
  2. `MaxLocColumnWise(A,k)`;
  3. std::cout << k <<"n";
  4.  
  5. void MaxLocColumnWise(Matrix A, int &idx){
  6. int n = A.size();
  7. int col = idx;
  8.  
  9. double currentAbsMax = abs(A[col][col]);
  10.  
  11. for (int i=(col+1); i<n; i++){
  12. double currentVal = abs(A[i][col]);
  13. if (currentVal > currentAbsMax){
  14. currentAbsMax = currentVal;
  15. idx = i;
  16. }
  17. }
  18. }
  19.  
  20. void GaussElimPartialPivot(Matrix& A, Vector& b){
  21. int n = A.size();
  22.  
  23. for (int j=0; j<(n-1); j++){
  24. int index = j;
  25. MaxLocColumnWise(A, index);
  26. SwapMatrixRows(A, j, index);
  27. SwapVector(b, j, index);
  28.  
  29. // main loop
  30. for (int i=(j+1); i<n; i++){
  31. double m = A[i][j]/A[j][j];
  32. b[i] -= m*b[j];
  33. for(int k=j; k<n; k++){
  34. A[i][k] -= m*A[j][k];
  35. }
  36. }
  37. }
  38. }
  39.  
  40. int MaxLocColumnWise(const Matrix &A, int idx);
  41.  
  42. #ifndef GAUSS_H
  43. #define GAUSS_H
  44. #include <vector>
  45. typedef std::vector<double> Vector;
  46. typedef std::vector<Vector> Matrix;
  47. std::size_t MaxLocColumnWise(const Matrix &A, std::size_t idx);
  48. #endif // GAUSS_H
  49.  
  50. #include "Gauss.h"
  51. #include <cmath>
  52.  
  53. std::size_t MaxLocColumnWise(const Matrix &A, std::size_t idx){
  54. auto maxIndex{idx};
  55. const auto col{idx};
  56. for (double maxValue{-1}; idx < A.size(); ++idx) {
  57. auto currentVal{std::abs(A[idx][col])};
  58. if (currentVal > maxValue){
  59. maxValue = currentVal;
  60. maxIndex = idx;
  61. }
  62. }
  63. return maxIndex;
  64. }
  65.  
  66. #include "Gauss.h"
  67. #include <iostream>
  68. #include <numeric>
  69.  
  70. int main() {
  71. constexpr size_t n{1000};
  72. Matrix m;
  73. m.reserve(n);
  74. int startval{1};
  75. for (size_t i{0}; i < n; ++i) {
  76. Vector v(n);
  77. std::iota(v.begin(), v.end(), startval);
  78. m.push_back(v);
  79. startval += n;
  80. }
  81. for (int i=0; i < n; ++i) {
  82. auto max{MaxLocColumnWise(m, i)};
  83. if (max != n-1) {
  84. std::cout << "Error:" << i << ", " << MaxLocColumnWise(m, i) << 'n';
  85. }
  86. }
  87. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement