#include<iostream> #include<math.h> #include <fstream> #include "calerf.h" void rozw_analityczne (INT ile_x, INT ile_t, DOUBLE h, DOUBLE dt); void bezp(INT ile_x, INT ile_t); USING namespace std; DOUBLE D = 1; //wspolczynnik ciepla DOUBLE t_max = 2; // max t (na osi y) DOUBLE x_max = 6*sqrt(D*t_max); // max na osi x DOUBLE lambda = 0.4; //lambda dla metody bezposredniej INT main () { CONST INT ile_x = 40; //krok na osi x DOUBLE h = x_max / ile_x; DOUBLE dt = h*h*lambda / D; CONST INT ile_t = static_cast<CONST int> ( (t_max/dt) + 1 ); //cout<<ile_t<<endl; rozw_analityczne(ile_x,ile_t,h,dt); bezp (ile_x, ile_t); SYSTEM ("pause"); } void rozw_analityczne (INT ile_x, INT ile_t, DOUBLE h, DOUBLE dt) { INT ile=0; DOUBLE **analit; analit=new DOUBLE*[ile_t]; FOR (INT i=0;i<ile_t;i++) analit[i]=new DOUBLE[ile_x]; DOUBLE t = 0,x = 0; ofstream file( "analit.txt" ); FOR (INT j = 0; j < ile_t; j++) { file<<"Dla t="<<j<<endl<<endl; FOR (INT i = 0; i < ile_x ; i++) { analit[j][i] = erfc (x / (2*sqrt(D*t))); //cout<<analit[j][i]<<endl; file<<"x["<<i<<"] U(x,t) = "<<analit[j][i]<<endl; ile++; x = x+h; } file<<"\n\n"<<endl; x = 0; t = t+dt; } file.CLOSE(); } void bezp(INT ile_x, INT ile_t) { INT ile = 0; DOUBLE **bezpo; bezpo=new DOUBLE*[ile_t]; FOR (INT i=0;i<ile_t;i++) bezpo[i]=new DOUBLE[ile_x]; ofstream file( "bezpo.txt" ); file<<"Dla t=0"<<endl<<endl; FOR(INT j=0; j<ile_x; j++) //warunek poczatkowy { file<<"x["<<j<<"] U(x,t) = "<<bezpo[0][j]<<endl; } file<<"\n\n"<<endl; FOR( INT i = 0; i < ile_t; i++ ) //warunek brzegowy dla x0 { bezpo[i][0] = 1; } FOR( INT i = 0; i < ile_t; i++ ) //warunek brzegowy dla x ostatniego { bezpo[i][ile_x-1] = 1; } FOR(INT i=1; i<ile_t; i++) { file<<"Dla t="<<i<<endl<<endl; FOR (INT j=1; j<ile_x; j++) { bezpo[i][j] =bezpo[i-1][j] + lambda*(bezpo[i-1][j-1] -2* bezpo[i-1][j] + bezpo[i-1][j+1]); ile++; file<<"x["<<j<<"] U(x,t) = "<<bezpo[i][j]<<endl; } file<<"\n\n"<<endl; } file.CLOSE(); }