algo.cpp 395 B

12345678910111213141516
  1. #include "algo.hpp"
  2. void Thomas(size_t n,double* a,double* b,double* c,double* d,double* x){
  3. double last=c[0]=c[0]/b[0];
  4. for(size_t i=1;i<n-1;++i){
  5. last=c[i]=c[i]/(b[i]-a[i-1]*last);
  6. }
  7. last=d[0]=d[0]/b[0];
  8. for(size_t i=1;i<n;++i){
  9. last=d[i]=(d[i]-a[i-1]*last)/(b[i]-a[i-1]*c[i-1]);
  10. }
  11. last=x[n-1]=d[n-1];
  12. for(int i=n-1;i>0;--i){
  13. last=x[i-1]=d[i-1]-c[i-1]*last;
  14. }
  15. }