ГОУ ВПО «Сургутский государственный университет
Ханты-Мансийского автономного округа — Югры»
Кафедра прикладной математики
Курсовая работа по предмету «Численные методы» на тему
Расчёт распространения тепла вдоль многослойного цилиндра
Выполнил студент группы 11 – 71
факультета Информационных технологий
Илинбаев Николай Геннадьевич
Проверил к.ф.-м.н., доцент кафедры ПМ
Моргун Дмитрий Алексеевич
« »
Сургут — 2010
Содержание
1 Введение
К уравнениям в частных производных приводят задачи газодинамики, теплопроводности, переноса излучения, распротранения нейтронов, теории упругости, электромагнитных полей, процессов переноса в газах, квантовой механики и многие другие.
Уравнения математической физики используются для расчётов распространения тепла, концентрации, волн. Для просмотра изменений температуры в различных точках заданной области применимы формулы теплопроводности. В данной работе рассматривается однородное уравнение теплопроводности и его решение интегро-интерполяционным методом.
Интегро-интерполяционный метод особенно полезен для уравнений с негладкими или разрывными коэффициентами, поскольку именно интегральная запись законов сохранения выделяет из всех математически допустимых решений таких уравнений физически правильное обобщённое решение.
2 Решение задачи
2.1 Интегро-интерполяционный метод
Интегро-интерполяционный метод, один из вариантов которого называется методом баланса
, наиболее надёжен и применим во всех случаях. В этом методе после выбора шаблона область G(r,t) разбивают на ячейки, определённым образом связанные с шаблоном. Дифференциальное уравнение интегрируют по ячейке и по формулам векторного анализа приводят к интегральной форме, соответствующей физическому закону сохранения. Приближенно вычисляя полученные интегралы по каким-либо квадратурным формулам, составляют разностную схему.
Например, для установления теплопроводности с переменным коэфициентом u t
= ( ku x
) x
выберем шаблон и сопосавим ему ячейку. Обозначая средние точки интервалов сетки полуцелыми индексами, выполним интегрирование по ячееке:
Это соотношение является точным. В правой части приближенно вычислим первый интеграл по формуле правых прямоугольников. Получим следущиее выражение:
( y
ˆ n
− y
n
)( x
n
+1 /
2 − x
n
−1 /
2 ) = τ
[( k
ˆ y
ˆ x
) n
+1 /
2 − ( k
ˆ y
ˆ x
) n
−1 /
2 ] (2)
Заменяя в правой части производные разностями и учитывая, что на равномерной сетке x n
+1 /
2
− x n
−1 /
2
= h
, получим разностную схему
(3)
Если k
= const
, то схема совпадает с неявной схемой.
Интегро-интерполяционный метод особенно полезен для уравнений с негладкими или разрывными коэффициентами, поскольку именно интегральная запись законов сохранения выделяет из всех математически допустимых решений таких уравнений физически правильное обобщённое решение.
3 Тестовые расчеты
Решим тестовую задачу. Зададим начальные значения: начальная температура по всему цилиндру = 1; температура на левом конце стержня = 10; температура на правом конце стержня = 15; коэфициенты теплопроводности K1=7, K2=35, K3=7.
Тогда расчеты изменений температуры дадут следущие результаты. Полученные графики:
Рис.1. График распределения температуры при t
1
.
Рис.2. График распределения температуры при t
2
.
Рис.3. График распределения температуры при t
3
.
Рис.4. График распределения температуры при t
4
.
Рис.5. График распределения температуры при t
5
.
Из графиков видно, что температура плавно возрастает от краёв цилиндра к его середине.
4 Заключение
Поставленная задача на расчёт распространения тепла вдоль многослойного цилиндра успешно завершена. Начальные данные для решаемой задачи: температура на левом конце цилиндра, температура на правом конце цилиндра, коэфициенты теплопроводности на разных участках цилиндра. При вводе начальных данных в задачу просматриваются изменения температуры, продвигающиеся от концов цилиндра к его середине.
5 Литература
Список литературы
1. Калиткин Н. Н. Численные методы. М: Наука, 1978.
6 Приложение
Код программы: [1]
unit part1; {$mode objfpc}{$H+} interface
uses
Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
Buttons, ExtCtrls, Menus, StdCtrls, ComCtrls, Arrow, CheckLst, ActnList,
TAGraph, TASeries; type
{ TForm1 }
TForm1 = class(TForm)
K1Edit: TLabeledEdit;
K2Edit: TLabeledEdit;
K3Edit: TLabeledEdit; Uslovie: TBitBtn;
BtStart1: TBitBtn;
BtClose: TBitBtn;
Chart1: TChart;
Chart1LineSeries1: TLineSeries;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
RightTemp: TLabeledEdit;
LeftTemp: TLabeledEdit;
Menu1: TMainMenu;
MenuItem1: TMenuItem;
MenuItem2: TMenuItem;
MenuItem3: TMenuItem; MenuItem4:
Page1: TPage;
Page2: TPage;
GoY: TUpDown;
GoX: TUpDown;
MashtabY: TUpDown; MashtabX: TUpDown; procedure stopClick(Sender: TObject); procedure UslovieClick(Sender: TObject); procedure BtStart1Click(Sender: TObject); procedure FormActivate(Sender: TObject); procedure MenuItem3Click(Sender: TObject); procedure MenuItem4Click(Sender: TObject); procedure GoYClick(Sender: TObject; Button: TUDBtnType); procedure GoXClick(Sender: TObject; Button: TUDBtnType); procedure MashtabYClick(Sender: TObject; Button: TUDBtnType); procedure MashtabXClick(Sender: TObject; Button: TUDBtnType); procedure VremenaTimer(Sender: TObject);
private
{ private declarations } public
{ public declarations } end;
const n=31; n1=10;//n1-номер узла до которого сохраняется K1.
Aconst=0; Bconst=10; type mass=array[1..n] of double; var
Form1: TForm1;
stepY,Ymin,Ymax,stepX,Xmin,Xmax,w1,w2:double;
Khigh,Lupa:double;
T1,T2,T4,T3:boolean;
{-----------------------------------------------------------------} K,X,XU,B,Aew,Ap,U:mass; shag,dt:double; j:integer;
K1const,K2const,K3const:double; implementation procedure Delay(millisecond: integer); begin sleep(millisecond);
Form1.chart1.repaint; end;
function fun1(Afun1:double):double; begin fun1:=1; end;
procedure ProcedureInit; var i:integer; begin shag:=(Bconst-Aconst)/(n-1); for i:=1 to n do
begin
X[i]:=Aconst+shag*(i-1); B[i]:=fun1(X[i]); end;
for i:=1 to n-1 do
begin
XU[i]:=(X[i]+X[i+1])/2;
if i>2*n1 then K[i]:=K3const else if i>n1 then K[i]:=K2const else K[i]:=K1const;
Aew[i]:=K[i]/shag/shag; end;
end;
procedure TForm1.BtStart1Click(Sender: TObject); var i,ii:integer; begin dt:=0.1;//(j*dt)-дельта-тэ для времени for ii:=1 to 50 do begin
delay(50);
Chart1LineSeries1.Clear; for i:=2 to n-1 do
begin
Ap[i]:=1/(j*dt)+Aew[i-1]+Aew[i]; end;
Chart1LineSeries1.AddXY(X[1],B[1]); for i:=2 to n-1 do begin
U[i]:=(B[i+1]*Aew[i]+B[i-1]*Aew[i-1]+B[i]/(j*dt))/Ap[i]; Chart1LineSeries1.AddXY(X[i],U[i]); end;
Chart1LineSeries1.AddXY(X[n],B[n]); for i:=2 to n-1 do
begin B[i]:=U[i]; end; inc(j); end; end;
procedure TForm1.UslovieClick(Sender: TObject); begin
Chart1LineSeries1.Clear;
K1const:=StrToInt(K1Edit.text);
K2const:=StrToInt(K2Edit.text);
K3const:=StrToInt(K3Edit.text);
ProcedureInit;
B[1]:=StrToInt(LeftTemp.text); B[n]:=StrToInt(RightTemp.text); j:=1;
Form1.BtStart1.enabled:=true; end;
procedure TForm1.stopClick(Sender: TObject); begin end;
procedure TForm1.FormActivate(Sender: TObject); begin
Khigh:=20;stepX:=2;stepY:=2;Lupa:=1;//все коэффициенты chart1.Extent.Xmax:=chart1.Extent.Xmax+Khigh; Chart1.Extent.useXmax:=true;
chart1.Extent.Ymax:=chart1.Extent.Ymax+Khigh; Chart1.Extent.useYmax:=true;
chart1.Extent.Xmin:=chart1.Extent.Xmin-1; Chart1.Extent.useXmin:=true; chart1.Extent.Ymin:=chart1.Extent.Ymin-1;
Chart1.Extent.useYmin:=true; end;
procedure TForm1.MenuItem3Click(Sender: TObject); begin close;
end;
procedure TForm1.MenuItem4Click(Sender: TObject); begin showmessage (’Сделал Илинбаев Н. Г., группа 1171, подгруппа А ’)
end;
procedure TForm1.GoYClick(Sender: TObject; Button: TUDBtnType); begin
stepY:=2; case button of
btNext: begin chart1.Extent.Ymax:=chart1.Extent.Ymax+stepX; Chart1.Extent.useYmax:=true;
chart1.Extent.Ymin:=chart1.Extent.Ymin+stepX;
Chart1.Extent.useYmin:=true;
end; btPrev: begin chart1.Extent.Ymax:=chart1.Extent.Ymax-stepX; Chart1.Extent.useYmax:=true;
chart1.Extent.Ymin:=chart1.Extent.Ymin-stepX;
Chart1.Extent.useYmin:=true; end; end;
end;
procedure TForm1.GoXClick(Sender: TObject; Button: TUDBtnType); begin
case button of
btNext: begin chart1.Extent.Xmax:=chart1.Extent.Xmax+stepX; Chart1.Extent.useXmax:=true;
chart1.Extent.Xmin:=chart1.Extent.Xmin+stepX;
Chart1.Extent.useXmin:=true;
end; btPrev: begin chart1.Extent.Xmax:=chart1.Extent.Xmax-stepX; Chart1.Extent.useXmax:=true;
chart1.Extent.Xmin:=chart1.Extent.Xmin-stepX;
Chart1.Extent.useXmin:=true; end; end;
end;
procedure TForm1.MashtabYClick(Sender: TObject; Button: TUDBtnType); begin
case button of
btPrev: begin chart1.Extent.Ymax:=chart1.Extent.Ymax+Lupa; Chart1.Extent.useYmax:=true;
chart1.Extent.Ymin:=chart1.Extent.Ymin-Lupa;
Chart1.Extent.useYmin:=true;
end;
btNext: begin
chart1.Extent.Ymax:=chart1.Extent.Ymax-Lupa; Chart1.Extent.useYmax:=true;
chart1.Extent.Ymin:=chart1.Extent.Ymin+Lupa;
Chart1.Extent.useYmin:=true; end; end;
end;
procedure TForm1.MashtabXClick(Sender: TObject; Button: TUDBtnType); begin
case button of
btPrev: begin chart1.Extent.Xmax:=chart1.Extent.Xmax+Lupa; Chart1.Extent.useXmax:=true;
chart1.Extent.Xmin:=chart1.Extent.Xmin-Lupa;
Chart1.Extent.useXmin:=true;
end; btNext: begin chart1.Extent.Xmax:=chart1.Extent.Xmax-Lupa; Chart1.Extent.useXmax:=true;
chart1.Extent.Xmin:=chart1.Extent.Xmin+Lupa;
Chart1.Extent.useXmin:=true; end; end;
end;
procedure TForm1.VremenaTimer(Sender: TObject); begin end;
initialization
{$I part1.lrs} end.
[1]
Код программы, реализующей решение расчёт распределения тепла вдоль многослойного цилиндра