fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. void lu_decomposition(const std::vector<std::vector<double> > &vals)
  7. {
  8.  
  9. int i = 0, j = 0, k = 0;
  10. for (i = 0; i < n; i++)
  11. {
  12. for (j = 0; j < n; j++)
  13. {
  14. if (j < i)
  15. l[j][i] = 0;
  16. else
  17. {
  18. l[j][i] = vals[j][i];
  19. for (k = 0; k < i; k++)
  20. {
  21. l[j][i] = l[j][i] - l[j][k] * u[k][i];
  22. }
  23. }
  24. }
  25. for (j = 0; j < n; j++)
  26. {
  27. if (j < i)
  28. u[i][j] = 0;
  29. else if (j == i)
  30. u[i][j] = 1;
  31. else
  32. {
  33. u[i][j] = vals[i][j] / l[i][i];
  34. for (k = 0; k < i; k++)
  35. {
  36. u[i][j] = u[i][j] - ((l[i][k] * u[k][j]) / l[i][i]);
  37. }
  38. }
  39. }
  40. }
  41. }
  42.  
  43. int main() {
  44. // your code goes here
  45.  
  46. std::vector<std::vector<double> > data = {
  47.  
  48. {5, 2, 1, 12, 8},
  49. {1, 4, 3, 4, 5},
  50. {7, 4, 1, 7, 2},
  51. {7, 8, 6, 4, 1},
  52. {8, 1, 2, 3, 5},
  53. };
  54. std::vector<std::vector<double> > l(5, std::vector<double>(5));
  55. std::vector<std::vector<double> > u(5, std::vector<double>(5));
  56.  
  57. int n = 5;
  58.  
  59. lu_decomposition(data, l, u);
  60.  
  61.  
  62. std::cout << "U" << std::endl;
  63. for(unsigned i = 0; (i < n); i++)
  64. {
  65. for(unsigned j=0; (j < n); j++)
  66. {
  67. std::cout << u[i][j] << ' ';
  68. }
  69. std::cout << std::endl;
  70. }
  71. std::cout << std::endl;
  72. std::cout << "L" << std::endl;
  73. for(unsigned i = 0; (i < n); i++)
  74. {
  75. for(unsigned j=0; (j < n); j++)
  76. {
  77. std::cout << l[i][j] << ' ';
  78. }
  79. std::cout << std::endl;
  80. }
  81. }
  82.  
  83.  
Success #stdin #stdout 0s 3276KB
stdin
Standard input is empty
stdout
U
1 0.4 0.2 2.4 1.6 
0 1 0.777778 0.444444 0.944444 
0 0 1 7.75 7.75 
0 0 0 1 1 
0 0 0 0 1 

L
5 0 0 0 0 
1 3.6 0 0 0 
7 1.2 -1.33333 0 0 
7 5.2 0.555556 -19.4167 0 
8 -2.2 2.11111 -31.5833 9.5