Численные методы решения задачи нахождения температуры

Автор работы: Пользователь скрыл имя, 08 Сентября 2011 в 00:59, курсовая работа

Описание работы

Ставится задача о нахождении стационарного распределения температуры внутри многоугольника, если задано распределение температуры вдоль его сторон.
Одна из главных трудностей, возникающих при решении этой задачи, обусловлена сложной формой границы расчетной области. Аналитическое решение задачи Дирихле для уравнения (1) удается получить лишь в частных случаях для простейших областей (прямоугольник, круг сектор, шар). Основными методами решения поставленной задачи являются численные методы.

Содержание работы

1. Введение.......................................................................................................
2. Аналитические методы решения уравнений в частных производных...
3. Численные методы решения уравнений матфизики................................
3.1. Метод конечных разностей...............................................................
3.2. Метод конечных элементов..............................................................
4. Дискретизация расчетной области.............................................................
5. Формирование матрицы неизвестных температур системы линейных уравне-ний......................................................................................................................
6. Построение изотерм.....................................................................................
6.1. Нахождение температур в любой точке.............................................
6.2. Алгоритм построения изотерм............................................................
7. Характеристика программы........................................................................
8. Результаты программы................................................................................
9. Список используемой литературы.............................................................
10. Приложение..................................................................................................
10.1. Листинг программы...........................................................................

Файлы: 1 файл

курсовая.doc

— 814.50 Кб (Скачать файл)

tabl[15][2]:=14;tabl[15][3]:=16;tabl[15][4]:=9;tabl[15][5]:=18;

tabl[16][2]:=15;tabl[16][3]:=30;tabl[16][4]:=29;tabl[16][5]:=19;

tabl[17][2]:=36;tabl[17][3]:=18;tabl[17][4]:=14;tabl[17][5]:=35;

tabl[18][2]:=17;tabl[18][3]:=19;tabl[18][4]:=15;tabl[18][5]:=34;

tabl[19][2]:=18;tabl[19][3]:=31;tabl[19][4]:=16;tabl[19][5]:=33; 

for i:=1 to 19 do begin

for j:=1 to 19 do

a[i][j]:=0;

b[i]:=0;

end; 

for i:=1 to 19 do

begin

k:=tabl[i,1];k1:=tabl[i,2];k2:=tabl[i,3];

k3:=tabl[i,4];k4:=tabl[i,5]; 

h1:=abs(x[k]-x[k1]);h2:=abs(x[k]-x[k2]);

h3:=abs(y[k]-y[k3]);h4:=abs(y[k]-y[k4]); 

a[k,k]:=-(1/(h1*h2)+1/(h3*h4)); 

kf1:=1/(h1*(h2+h1));kf2:=1/(h2*(h1+h2));

kf3:=1/(h3*(h4+h3));kf4:=1/(h4*(h3+h4)); 

if k1>19 then

b[k]:=b[k]-kf1*t[k1]

else

a[k,k1]:=kf1; 

if k2>19 then

b[k]:=b[k]-kf2*t[k2]

else

a[k,k2]:=kf2; 

if k3>19 then

b[k]:=b[k]-kf3*t[k3]

else

a[k,k3]:=kf3; 

if k4>19 then

b[k]:=b[k]-kf4*t[k4]

else

a[k,k4]:=kf4; 

end;

for i:=1 to 19 do begin  {+}

for J:=1 to 19 do

write(' ',a[i][j]:1:1);

writeln;end; writeln;

clrscr;

GAUS(19,a,b);

for I:=1 to 19 do t[i]:=b[i];

readkey;

clrscr;

for i:=1 to 19 do

  pogr[i]:=x[i]*x[i]-x[i]*y[i]-y[i]*y[i]+2*x[i]-y[i];

for i:=1 to 19 do

  pogr_2[i]:=b[i]-pogr[i];

     gotoxy(2,2);

     write('Внутренние-внешние  точки');

     gotoxy (2,3);

     write ('--------------------------------------');

     gotoxy (2,4);

     write ('| N  |  x  |   y  |   T   |    P     |');

     gotoxy (2,5);

     write ('--------------------------------------');

     for i:=1 to 19 do begin

     gotoxy(2,i+5);write ('| ',i);

     gotoxy(7,i+5);write('|');

     gotoxy(9,i+5);write (x[i]:1:1);

     gotoxy(13,i+5);write('|');

     gotoxy(16,i+5);write (y[i]:1:1);

     gotoxy(20,i+5);write('|');

     gotoxy(22,i+5);write(b[i]:1:2);

     gotoxy(28,i+5);write('|');

     gotoxy(30,i+5);write(pogr_2[i]:1);

     gotoxy(39,i+5);write('|');

     end;

     gotoxy(2,25);

     write('--------------------------------------');

     gotoxy(41,2);

     writeln(' --------------------------------------');

     gotoxy(41,3);

     writeln(' |   N  |  x   |   y    |  T      | P |');

     gotoxy(41,4);

     writeln(' --------------------------------------');

for i:=20 to 39 do begin

gotoxy(41,i-15);

write(' |  ',i);

gotoxy(49,i-15);write('|');

gotoxy(52,i-15);

write(x[i]:1:1);

gotoxy(56,i-15);write('|');

gotoxy(59,i-15);

write(y[i]:1:1);

gotoxy(65,i-15);write('|');

gotoxy(68,i-15);

write(t[i]:1:1);

gotoxy(75,i-15);write('|');

gotoxy(76,i-15);

write(' 0 |');

end;

gotoxy(41,25);

write(' --------------------------------------');

gotoxy(3,26);

write('                                 Следующее->любая клава!!!');

readkey;clrscr;

writeln(' Создается  Файл!!!');

writeln(' Создается фалй с вычислениями!!');

writeln(' Создана  папка "DATA". Создан в нем  "result.txt"');

 {$I-}

MkDir('data'); 

if IOResult <> 0 then begin

    Writeln('Такая "DATA" директория существует!!!');

    writeln;

    goto G;

  end

else  begin

writeln (' Создана папка "DATA"!!!');

G:

Assign(my,'data/result.txt');

rewrite(my);

writeln (my,' Номера вычислительных шаблонов');

writeln(my);

for i:=1 to 19 do begin

for j:=1 to 5 do write(my,'      ',tabl[i][j]);

writeln(my);end;writeln (my,'Следующее->любая клава!!!');

       writeln (my, ' Формирование системы:');

for i:=1 to 19 do begin  {+}

for J:=1 to 19 do

write(my,'      ',a[i][j]:1:4);

writeln(my);end; writeln(my);

for i:=1 to 19 do

write(my,'  ',b[i]:1:1);writeln(my);

writeln (my,' Следующее->любая клава!!!');

     writeln(my,' Внутренние и внешние точки');

     writeln (my,'--------------------------------------');

     writeln (my,'| N  |  x  |   y  |   T   |    P     |');

     writeln (my,'--------------------------------------');

     for i:=1 to 19 do begin

     write (my,i);     write(my,'   ');

     write (my,x[i]:1:1);     write(my,'   ');

     write (my,y[i]:1:1);     write(my,'   ');

     write(my,b[i]:1:2);     write(my,'   ');

     write(my,pogr_2[i]:1);     write(my,'   ');

     writeln(my);

     end;

     writeln(my,' --------------------------------------');

     writeln(my,' |   N  |  x   |   y    |  T      | P |');

     writeln(my,' --------------------------------------');

for i:=20 to 39 do begin

write(my,'  ',i);

     write(my,'   ');write(my,x[i]:1:1);

write(my,'     ');write(my,y[i]:1:1);

write(my,'     ');write(my,t[i]:1:1);

write(my,'    ');write(my,'  0 ');

writeln(my);

end;

writeln(my,' --------------------------------------');

writeln (my,'Следующее->любая  клава!!!');

close(my);writeln;writeln;

writeln (' Файл "Result.txt" создан в папке "DATA"');

writeln (' Следующее->любая  клава!!!');

readkey;

end;

{$I+}

end

else

   begin

   if vib=2 then begin

   clrscr;

   writeln('Нахождение температуры в любой точке области');

   for i:=1 to 19 do

   for j:=1 to 5 do r[i][j]:=tabl[i][j];

   writeln;

   write('Введите x:');readln(xx);writeln;

   write('Введите y:');readln(yy); 

if (yy<=3) and

   (yy>=-0.25*xx-0.75) and

          (yy<=xx+3) and

                    (yy<=-2.5*xx+10.5) then begin

if (xx=0) then begin

kvadrat(t[1],t[2],t[24],t[23],x[1],y[1],x[2],y[2],x[24],y[24],x[23],y[23],xx,yy);

kvadrat(t[6],t[7],t[1],t[2],x[6],y[6],x[7],y[7],x[1],y[1],x[2],y[2],xx,yy);

kvadrat(t[12],t[13],t[7],t[6],x[12],y[12],x[13],y[13],x[7],y[7],x[6],y[6],xx,yy);

isk_k(t[37],t[13],t[12],x[37],y[37],x[13],y[13],x[12],y[12],xx,yy);

end

else begin

treygol(t[1],t[22],t[23],x[1],y[1],x[22],y[22],x[23],y[23],xx,yy);

kvadrat(t[1],t[2],t[24],t[23],x[1],y[1],x[2],y[2],x[24],y[24],x[23],y[23],xx,yy);

kvadrat(t[2],t[3],t[25],t[24],x[2],y[2],x[3],y[3],x[25],y[25],x[24],y[24],xx,yy);

kvadrat(t[3],t[4],t[26],t[25],x[3],y[3],x[4],y[4],x[26],y[26],x[25],y[25],xx,yy);

treygol(t[4],t[26],t[27],x[4],y[4],x[26],y[26],x[27],y[27],xx,yy); 

treygol(t[22],t[21],t[5],x[22],y[22],x[21],y[21],x[5],y[5],xx,yy);{+}

kvadrat(t[5],t[6],t[1],t[22],x[5],y[5],x[6],y[6],x[1],y[1],x[22],y[22],xx,yy);

kvadrat(t[6],t[7],t[2],t[1],x[6],y[6],x[7],y[7],x[2],y[2],x[1],y[1],xx,yy);

kvadrat(t[7],t[8],t[3],t[2],x[7],y[7],x[8],y[8],x[3],y[3],x[2],y[2],xx,yy);

kvadrat(t[8],t[9],t[4],t[3],x[8],y[8],x[9],y[9],x[4],y[4],x[3],y[3],xx,yy);

treygol(t[9],t[28],t[4],x[9],y[9],x[28],y[28],x[4],y[4],xx,yy);

treygol(t[27],t[4],t[28],x[27],y[27],x[4],y[4],x[28],y[28],xx,yy); 

treygol(t[21],t[20],t[10],x[21],y[21],x[20],y[20],x[10],y[10],xx,yy);{+}

kvadrat(t[10],t[11],t[5],t[21],x[10],y[10],x[11],y[11],x[5],y[5],x[21],y[21],xx,yy);

kvadrat(t[11],t[12],t[6],t[5],x[11],y[11],x[12],y[12],x[6],y[6],x[5],y[5],xx,yy);

kvadrat(t[12],t[13],t[7],t[6],x[12],y[12],x[13],y[13],x[7],y[7],x[6],y[6],xx,yy);

kvadrat(t[13],t[14],t[8],t[7],x[13],y[13],x[14],y[14],x[8],y[8],x[7],y[7],xx,yy);

kvadrat(t[14],t[15],t[9],t[8],x[14],y[14],x[15],y[15],x[9],y[9],x[8],y[8],xx,yy);

treygol(t[15],t[16],t[9],x[15],y[15],x[16],y[16],x[9],y[9],xx,yy);

treygol(t[9],t[29],t[16],x[9],y[9],x[29],y[29],x[16],y[16],xx,yy);

treygol(t[28],t[29],t[9],x[28],y[28],x[29],y[29],x[9],y[9],xx,yy);

treygol(t[16],t[30],t[29],x[16],y[16],x[30],y[30],x[29],y[29],xx,yy); 

treygol(t[10],t[20],t[39],x[10],y[10],x[20],y[20],x[39],y[39],xx,yy);  {+}

treygol(t[10],t[11],t[39],x[10],y[10],x[11],y[11],x[39],y[39],xx,yy);

treygol(t[38],t[11],t[39],x[38],y[38],x[11],y[11],x[39],y[39],xx,yy);

treygol(t[38],t[11],t[12],x[38],y[38],x[11],y[11],x[12],y[12],xx,yy);

treygol(t[38],t[12],t[37],x[38],y[38],x[12],y[12],x[37],y[37],xx,yy);

treygol(t[13],t[12],t[37],x[13],y[13],x[12],y[12],x[37],y[37],xx,yy);

treygol(t[36],t[13],t[37],x[36],y[36],x[13],y[13],x[37],y[37],xx,yy);

kvadrat(t[36],t[17],t[14],t[13],x[36],y[36],x[17],y[17],x[14],y[14],x[13],y[13],xx,yy);

kvadrat(t[17],t[18],t[15],t[14],x[17],y[17],x[18],y[18],x[15],y[15],x[14],y[14],xx,yy);

kvadrat(t[18],t[19],t[16],t[15],x[18],y[18],x[19],y[19],x[16],y[16],x[15],y[15],xx,yy);

treygol(t[16],t[19],t[31],x[16],y[16],x[19],y[19],x[31],y[31],xx,yy);

treygol(t[16],t[30],t[31],x[16],y[16],x[30],y[30],x[31],y[31],xx,yy); 

treygol(t[36],t[35],t[17],x[36],y[36],x[35],y[35],x[17],y[17],xx,yy);{+}

treygol(t[35],t[18],t[17],x[35],y[35],x[18],y[18],x[17],y[17],xx,yy);

treygol(t[35],t[18],t[34],x[35],y[35],x[18],y[18],x[34],y[34],xx,yy);

treygol(t[34],t[18],t[19],x[34],y[34],x[18],y[18],x[19],y[19],xx,yy);

treygol(t[34],t[33],t[19],x[34],y[34],x[33],y[33],x[19],y[19],xx,yy);

treygol(t[33],t[31],t[19],x[33],y[33],x[31],y[31],x[19],y[19],xx,yy);

treygol(t[33],t[31],t[32],x[33],y[33],x[31],y[31],x[32],y[32],xx,yy);

end;end

else  writeln('Точка  не находится в данной области!!!');

writeln;

writeln ('           Следующее->любая клава!!!');readkey;

end

      else begin

      if (vib=3) then begin

      clrscr;

        writeln(' Семейство изотерм!!!');

        write('t=');readln(h1);

New(pr);j:=0;

for i:=1 to 39 do

if (t[i]=h1) then begin

j:=j+1;pr^[j][1]:=x[i];pr^[j][2]:=y[i];end;

for i:=1 to 19 do begin

j:=j+1;

pr^[j][1]:=tconstx(h1,x[i],y[i],t[i],x[r[i][3]],y[r[i][3]],t[r[i][3]]);

pr^[j][2]:=tconsty(h1,x[i],y[i],t[i],x[r[i][3]],y[r[i][3]],t[r[i][3]]);

Информация о работе Численные методы решения задачи нахождения температуры