#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(); }