Thomas algorithm and counting of operations (floating point and memory)

We have in specific case the following operations with the floating operations

  • Memory Reads: \( 14(N-2) \);
  • Memory Writes: \( 4(N-2) \);
  • Subtractions: \( 3(N-2) \);
  • Multiplications: \( 3(N-2) \);
  • Divisions: \( 4(N-2) \).
// Forward substitution    
// Note that we can simplify by precalculating a[i-1]/b[i-1]
  for (int i=1; i < n; i++) {
     b[i] = b[i] - (a[i-1]*c[i-1])/b[i-1];
     f[i] = g[i] - (a[i-1]*f[i-1])/b[i-1];
  }
  x[n-1] = f[n-1] / b[n-1];
  // Backwards substitution                                                           
  for (int i = n-2; i >= 0; i--) {
     f[i] = f[i] - c[i]*f[i+1]/b[i+1];
     x[i] = f[i]/b[i];
  }