Смекни!
smekni.com

Расчёт распространения тепла вдоль многослойного цилиндра

ГОУ ВПО «Сургутский государственный университет

Ханты-Мансийского автономного округа — Югры»

Кафедра прикладной математики

Курсовая работа по предмету «Численные методы» на тему

Расчёт распространения тепла вдоль многослойного цилиндра

Выполнил студент группы 11 – 71 факультета Информационных технологий

Илинбаев Николай Геннадьевич

Проверил к.ф.-м.н., доцент кафедры ПМ

Моргун Дмитрий Алексеевич

« »

Сургут — 2010

Содержание

1 Введение

К уравнениям в частных производных приводят задачи газодинамики, теплопроводности, переноса излучения, распротранения нейтронов, теории упругости, электромагнитных полей, процессов переноса в газах, квантовой механики и многие другие.

Уравнения математической физики используются для расчётов распространения тепла, концентрации, волн. Для просмотра изменений температуры в различных точках заданной области применимы формулы теплопроводности. В данной работе рассматривается однородное уравнение теплопроводности и его решение интегро-интерполяционным методом.

Интегро-интерполяционный метод особенно полезен для уравнений с негладкими или разрывными коэффициентами, поскольку именно интегральная запись законов сохранения выделяет из всех математически допустимых решений таких уравнений физически правильное обобщённое решение.

2 Решение задачи

2.1 Интегро-интерполяционный метод

Интегро-интерполяционный метод, один из вариантов которого называется методом баланса, наиболее надёжен и применим во всех случаях. В этом методе после выбора шаблона область G(r,t) разбивают на ячейки, определённым образом связанные с шаблоном. Дифференциальное уравнение интегрируют по ячейке и по формулам векторного анализа приводят к интегральной форме, соответствующей физическому закону сохранения. Приближенно вычисляя полученные интегралы по каким-либо квадратурным формулам, составляют разностную схему.

Например, для установления теплопроводности с переменным коэфициентом u t = ( ku x) x выберем шаблон и сопосавим ему ячейку. Обозначая средние точки интервалов сетки полуцелыми индексами, выполним интегрирование по ячееке:

Это соотношение является точным. В правой части приближенно вычислим первый интеграл по формуле правых прямоугольников. Получим следущиее выражение:

( yˆ n yn)( xn+1 /2 − xn−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. График распределения температуры при t1.

Рис.2. График распределения температуры при t2.

Рис.3. График распределения температуры при t3.

Рис.4. График распределения температуры при t4.

Рис.5. График распределения температуры при t5.

Из графиков видно, что температура плавно возрастает от краёв цилиндра к его середине.

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: TMenuItem; redaktor: TNotebook;

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] Код программы, реализующей решение расчёт распределения тепла вдоль многослойного цилиндра