Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.95 KB | None | 0 0
  1. void Hauseholder(int n, double a[nn][nn], double c[nn], double b[nn], int vec, double v[nn][nn])
  2. {
  3. double r=0, s=0, sigma=0, tau=0, a1=0;
  4. if (vec == 1){
  5. for (int i = 0; i < n; i++){
  6. for (int j = 0; j < n; j++)
  7. if (i == j)
  8. v[i][j] = 1;
  9. else
  10. v[i][j] = 0;
  11. }
  12. }
  13. for (int k = 0; k < n - 2; k++){
  14. r = fabs(a[k + 1][k]);
  15. for (int i = k + 1; i < n; i++){
  16. if (r < fabs(a[i][k])){
  17. r = fabs(a[i][k]);
  18. }
  19. }
  20. if (r == 0){
  21. a1 = 0;
  22. }
  23. else {
  24. for (int i = k; i < n; i++){
  25. a[i][k] = a[i][k] / r;
  26. }
  27. s = 0;
  28. for (int i = k; i < n; i++){
  29. s = s + a[i][k] * a[i][k];
  30. }
  31. sigma = Signf(a[k + 1][k])*pow(s,0.5);
  32. a[k + 1][k] = a[k + 1][k] + sigma;
  33. a1 = a[k + 1][k] * sigma;
  34.  
  35. for (int j = k; j < n; j++){
  36. s = 0;
  37. for (int i = k; i < n; i++){
  38. s = s + a[i][j] * a[i][k];
  39. }
  40. tau = (double)(s / a1);
  41. for (int i = k; i < n; i++)
  42. a[i][j] = a[i][j] - tau * a[i][k];
  43. }
  44.  
  45. a[k][k + 1] = -r * sigma;
  46. for (int j = k + 1; j < n; j++){
  47. a[k][j] = 0;
  48. }
  49. for (int i = k; i < n; i++){
  50. s = 0;
  51. for (int j = k; j < n; j++){
  52. s = s + a[i][j] * a[j][k];
  53. }
  54. tau = s / a1;
  55. for (int j = k; j < n; j++){
  56. a[i][j] = a[i][j] - tau * a[j][k];
  57. }
  58. }
  59. }
  60. if (vec == 1){
  61. for (int i = 0; i < n; i++){
  62. s = 0;
  63. for (int j = k; j < n; j++){
  64. s = s + v[i][j] * a[j][k];
  65. }
  66. tau = s / a1;
  67. for (int j = k; j < n; j++){
  68. v[i][j] = v[i][j] - tau * a[j][k];
  69. }
  70. }
  71. }
  72. }
  73. b[0] = 0;
  74. for (int i = 0; i < n; i++){
  75. c[i] = a[i][i];
  76. if (i <= n - 1)
  77. b[i + 1] = a[i][i + 1];
  78. }
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement