Автор работы: Пользователь скрыл имя, 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. Листинг программы...........................................................................
j:=j+1;
pr^[j][1]:=tconstx(h1,x[i],y[
pr^[j][2]:=tconsty(h1,x[i],y[
j:=j+1;
pr^[j][1]:=tconstx(h1,x[i],y[
pr^[j][2]:=tconsty(h1,x[i],y[
j:=j+1;
pr^[j][1]:=tconstx(h1,x[i],y[
pr^[j][2]:=tconsty(h1,x[i],y[
end;
for i:=20 to 39 do
begin
j:=j+1;
pr^[j][1]:=tconstx(h1,x[i],y[
pr^[j][2]:=tconsty(h1,x[i],y[
end;
j:=j+1;
pr^[j][1]:=tconstx(h1,x[20],y[
pr^[j][2]:=tconsty(h1,x[20],y[
j:=j+1;
pr^[j][1]:=tconstx(h1,x[20],y[
pr^[j][2]:=tconsty(h1,x[20],y[
for i:=1 to j-1 do begin
for k:=1 to j-1 do begin
IF pr^[k][1]>pr^[k+1][1] then begin
buf1:=pr^[k][1];buf2:=pr^[k][
pr^[k][1]:=pr^[k+1][1];pr^[k][
pr^[k+1][1]:=buf1;pr^[k+1][2]:
end;
end;
end;
New (p);k:=0;
for i:=1 to j do begin
if (pr^[i][1]=-100) then continue
else begin
k:=k+1;p^[K][1]:=pr^[i][1];p^[
end;end;
Dispose(pr);
New (mi);k4:=0;
for i:=1 to k do
if (abs(p^[i][2]-3)<0.01)
or (abs(p^[i][2]+0.25*p^[i][1]+0.
(abs(p^[i][2]-p^[i][1]-3)<0.
or (abs(p^[i][2]+2.5*p^[i][1]-10.
k4:=k4+1;mi^[k4][1]:=p^[i][1];
end
else begin
if (abs(p^[i][1]-trunc(p^[i][1]))
(abs(p^[i][2]-trunc(p^[i][2]))
k4:=k4+1;mi^[K4][1]:=p^[i][1];
end;end;
Dispose(p);
New(m);K5:=0;
for i:=1 to k4 do
if i=1 then goto G2
else
if (abs(mi^[i][2]-3)<0.01)
or (abs(mi^[i][2]+0.25*mi^[i][1]+
(abs(mi^[i][2]-mi^[i][1]-3)<0.
or (abs(mi^[i][2]+2.5*mi^[i][1]-
k5:=k5+1;m^[k5][1]:=mi^[i][1];
end
else begin
if (abs(mi^[i][1]-mi^[i-1][1])<0.
then continue
else begin
g2:
k5:=k5+1;m^[k5][1]:=mi^[i][1];
end;end;
for i:=1 TO K5 DO BEGIN
gotoxy(2,2+i);
write (' x=',m^[i][1]:1:3);
gotoxy(15,2+i);writeln('y=',m^
END;
writeln ('Следующее->любая клава!!!');
Dispose(mi);
readkey;
clrscr;
init_graph;
ris;dizkretizaciya; setcolor(14);
line(100,100,120,100);
Str(h1:1:3,st);setcolor(15);
outtextxy(125,97,'- изотерма T='+st);
setcolor(12);
readkey;
for i:=1 to k5 do
if i=1 then goto g4
else begin
setcolor(14);
if (abs(m^[i][1]-m^[i-1][1])<=
line(gx(m^[i][1],50),gy(m^[i][
g4:
setcolor(14);
circle(gx(m^[i][1],50),gy(m^[
end;end;
dispose(m);
setcolor(9);
line(20,70,50,70);setcolor(15)
outtextxy(55,67,'- точная изотерма T='+st);
readkey;
New(w);New(wx1);
yy:=-2;f:=0;
repeat
xx:=-3;yy:=yy+0.01;
repeat
buf:=sqr(xx)-sqr(yy)-xx*yy+2*
if (yy<=3) and
(yy>=-0.25*xx-0.75) and
(yy<=xx+3) and
(yy<=-2.5*xx+10.5) then begin
if abs(buf-h1)<=0.03 then begin
f:=f+1;w^[f]:=yy;
wx1^[f]:=xx;
end;end;
xx:=xx+0.01;
until (xx>=5.02);
until (yy>=3.005);
for i:=1 to f-1 do begin
for j:=1 to f-1 do begin
IF wx1^[j]>wx1^[j+1] then begin
buf1:=wx1^[j];buf2:=w^[j];
wx1^[j]:=wx1^[j+1];w^[j]:=w^[
wx1^[j+1]:=buf1;w^[j+1]:=buf2;
end;
end;
end;
for i:=1 to f do
putpixel (gx(wx1^[i],50),gy(w^[i],50),
dispose(w);dispose(wx1);
closegraph;
end
else begin
writeln(' Следующее->любая клава!!!');readkey;
end;end;end;end;
procedure menu;
Label M;
var
vibor:char;u,v:integer;
begin
u:=0;v:=0;
M:
clrscr;
writeln ('
Меню:1.Создание рисунков/
writeln (' 2.Нахождение температуры в любой точке области');
writeln ('
3.Семейство изотерм Выход-
write(' Введите действие:');
readln(vibor);
case vibor of
'1':begin
pryamougol(1);u:=1;goto M;
end;
'2':begin
if u=1 then begin
pryamougol(2);v:=1;goto M;end
else begin
writeln(' Ошибка!!!Нажми 1-й пункт');
readkey;goto M;
end;
end;
'3':begin
if u=1 then begiN
if v=1 then begin
pryamougol(3);goto M;end
else begin
writeln(' Ошибка!!!Нажми 2-й пункт'); readkey;goto M;
end;
end
else begin
writeln(' Ошибка!!!Нажми 1-й пункт'); readkey;goto M; end;
end;else exit;end;end;
begin
clrscr;menu;end.
Информация о работе Численные методы решения задачи нахождения температуры