- #include <iostream>
- #include <cstdlib>
- #include <cmath>
- #include <iomanip>
- using namespace std;
- const double eps = 1e-12;
- boolosobliwa=false;
- class point
- {
- public:
- double temp;
- int x;
- intwarunek;
- };
- class element
- {
- public:
- point nop1;
- point nop2;
- };
- class grid
- {
- int points;
- int elements;
- point *punkt;
- element * elem;
- };
- boolfgauss(int n, double **A, double *&X)
- {
- inti,j,k;
- double m,s;
- for(i = 0; i < n - 1; i++){
- for(j = i + 1; j < n; j++){
- if(fabs(A[i][i]) <eps) return false;
- m = -A[j][i] / A[i][i];
- for(k = i + 1; k <= n; k++) A[j][k] += m * A[i][k];
- }
- }
- for(i = n - 1; i >= 0; i--){
- s = A[i][n];
- for(j = n - 1; j >= i + 1; j--) s -= A[i][j] * X[j];
- if(fabs(A[i][i]) <eps) return false;
- X[i] = s/A[i][i];
- }
- return true;
- }
- int main()
- {
- grid *siatka;
- double S=1;
- double k=75;
- double L=10;
- double alpha=10;
- double q=-150;
- double Lelem;
- double tempo=40;
- intilosc_elementow=10;
- intilosc_punktow;
- Lelem=L/ilosc_elementow;
- ilosc_punktow = ilosc_elementow+1;
- double **GlobalH= new double *[ilosc_punktow];
- for(int i=0; i<ilosc_punktow; i++)
- {
- GlobalH[i] = new double [ilosc_punktow+1];
- }
- for(int i=0; i<ilosc_punktow; i++)
- {
- for(int j=0; j<ilosc_punktow+1; j++)
- {
- GlobalH[i][j] = 0;
- }
- }
- element *tabElem=new element [ilosc_elementow];
- point *tabPkt = new point [ilosc_punktow];
- for(int i=0; i<ilosc_elementow; i++)
- {
- tabElem[i].nop1.x= i;
- tabElem[i].nop2.x= i+1;
- }
- for(int i=0; i<ilosc_punktow; i++)
- {
- if(i==0)
- {
- tabElem[i].nop1.warunek=1;
- }
- elseif (i==ilosc_elementow)
- tabElem[i].nop2.warunek=2;
- else
- {
- tabElem[i].nop1.warunek=0;
- tabElem[i].nop2.warunek=0;
- }
- }
- for(int i=0; i<ilosc_elementow; i++)
- {
- if(tabElem[i].nop1.warunek==1)
- GlobalH[tabElem[i].nop1.x][ilosc_punktow]=-(q*S);
- /*elseif (tabElem[i].nop2.warunek==2)
- {
- GlobalH[tabElem[i].nop2.x][ilosc_punktow+1]= alpha*S*tempo;
- GlobalH[tabElem[i].nop2.x][tabElem[i].nop2.x] +=alpha*S;
- }*/
- GlobalH[tabElem[i].nop1.x][tabElem[i].nop1.x]+= (S*k)/Lelem;
- GlobalH[tabElem[i].nop1.x][tabElem[i].nop2.x]+= -((S*k)/Lelem);
- GlobalH[tabElem[i].nop2.x][tabElem[i].nop1.x]+= -((S*k)/Lelem);
- GlobalH[tabElem[i].nop2.x][tabElem[i].nop2.x]+= (S*k)/Lelem;
- }
- GlobalH[ilosc_elementow][ilosc_elementow] +=alpha*S;
- GlobalH[ilosc_elementow][ilosc_punktow]= alpha*S*tempo;
- for(int i=0; i<ilosc_punktow; i++)
- {
- for(int j=0; j< ilosc_punktow+1; j++)
- cout<<GlobalH[i][j]<<" ";
- cout<<endl;
- cout<<endl;
- }
- double *GlobalT = new double [ilosc_punktow];
- for(int i=0; i<ilosc_punktow; i++)
- {
- GlobalT[i]=0;
- }
- double **Gauss = new double *[ilosc_elementow];
- for(int i=0; i<ilosc_elementow;i++)
- {
- *Gauss= new double [ilosc_elementow+1];
- }
- fgauss(ilosc_punktow,GlobalH,GlobalT);
- for(int i=0; i<ilosc_punktow; i++)
- {
- cout<<"t"<<i<<" = "<<GlobalT[i]<<endl;;
- }
- cout<<endl;
- system("PAUSE");
- return 0;
- }