Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cmath>
- #include<fstream>
- using namespace std;
- const double deltat=0.0001;
- const double h=0.01;
- const int K=2.0/deltat;
- const int N=18.0/h;
- const double lambda=deltat/(h*h);
- ofstream plik("Rozwiazanie.txt");
- void ThomasEliminacja1(double l[], double d[], double u[], double eta[], const int N)
- {
- eta[0]=d[0];
- for (int i=1; i<N; i++)
- {
- eta[i]=d[i]-(l[i-1]*u[i-1]/eta[i-1]);
- }
- }
- void ThomasEliminacja2(double l[], double u[], double eta[], double b[], double r[], double x[], const int N)
- {
- r[0]=b[0];
- for (int i=1; i<N; i++)
- r[i]=b[i]-(l[i-1]*r[i-1]/eta[i-1]);
- x[N-1]=(1.0/eta[N-1])*r[N-1];
- for (int i=N-2; i>=0; i--)
- x[i]=(r[i]-u[i]*x[i+1])/eta[i];
- }
- void Laasonen()
- {
- double *l=new double[K];
- double *d=new double[K+1];
- double *upp=new double[K];
- double *eta=new double[K+1];
- double *b=new double[K+1];
- double *r=new double[K+1];
- // double **U=new double[K+1][N+1];
- double **U=new double*[K+1];
- for (int i=0; i<K+1; i++)
- U[i]=new double[N+1];
- for (int i=0; i<K-1; i++)
- l[i]=lambda;
- l[N-1]=0.0;
- d[0]=1.0;
- for (int i=1; i<K; i++)
- d[i]=-(1.0+2.0*lambda);
- d[K]=1.0;
- upp[0]=0.0;
- for (int i=1; i<K; i++)
- upp[i]=lambda;
- //zastepujemy przedzial nieskonczony przedzialem [-9, 9]
- for (int n=0; n<=N; n++)
- if (n<N/2)
- U[0][n]=1.0;
- else
- U[0][n]=0.0;
- for (int k=0; k<=K; k++)
- U[k][0]=1.0;
- U[K][N]=0.0;
- b[0]=-1.0;
- b[K]=0.0;
- ThomasEliminacja1(l, d, upp, eta, K);
- for (int k=1; k<=K; k++)
- {
- for (int n=1; n<N; n++)
- b[n]=-U[k][n];
- ThomasEliminacja2(l, upp, eta, b, r, U[k], K);
- }
- for (int k=0; k<=K; k++)
- {
- for (int n=0; n<=N; n++)
- plik<<U[k][n]<<" ";
- plik<<endl;
- }
- }
- int main()
- {
- Laasonen();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement