12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- #include "algo.hpp"
- void Thomas(size_t n,double* a,double* b,double* c,double* d,double* x){
- double last=c[0]=c[0]/b[0];
- for(size_t i=1;i<n-1;++i){
- last=c[i]=c[i]/(b[i]-a[i-1]*last);
- }
- last=d[0]=d[0]/b[0];
- for(size_t i=1;i<n;++i){
- last=d[i]=(d[i]-a[i-1]*last)/(b[i]-a[i-1]*c[i-1]);
- }
- last=x[n-1]=d[n-1];
- for(int i=n-1;i>0;--i){
- last=x[i-1]=d[i-1]-c[i-1]*last;
- }
- }
- double
- norm2(double* u,size_t n){
- double r=0;
- for(size_t i=0;i<n;++i){
- double t=u[i];
- r+=(t*t);
- }
- return sqrt(r);
- }
- double
- error2(double* u,double* v,size_t n){
- double r=0;
- for(size_t i=0;i<n;++i){
- double t=u[i]-v[i];
- r+=(t*t);
- }
- return sqrt(r);
- }
- void
- clear(double* u,size_t n){
- for(size_t i=0;i<n;++i){
- u[i]=0;
- }
- }
- void
- display(string name,double* u,size_t n){
- cout<<"------| "<<name<<" |------"<<endl;
- for(size_t i=0;i<n;++i){
- cout<<i<<" : "<<u[i]<<endl;
- }
- cout<<"--------------------------"<<endl;
- }
|