Показать сообщение отдельно
  #2  
Старый 02.04.2013, 17:53
ugicedeath ugicedeath вне форума
Прохожий
 
Регистрация: 14.02.2013
Сообщения: 17
Репутация: 10
По умолчанию

Наверно кто-нибудь потребует листинг всей программы. Это решение уравнения теплопроводности неявным методом, пока что без аналитики. Вот код:
Код:
unit teplo;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Label3: TLabel;
    Edit3: TEdit;
    Label4: TLabel;
    Edit4: TEdit;
    Label5: TLabel;
    Edit5: TEdit;
    Label6: TLabel;
    Edit6: TEdit;
    Label7: TLabel;
    Edit7: TEdit;
    Label8: TLabel;
    Label9: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label17: TLabel;
    Label18: TLabel;
    Button1: TButton;
    Chart1: TChart;
    Series1: TLineSeries;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

i,j,N: integer;
T,alfa,beta: array [1..500] of real;
ai,bi,ci,fi: real;
lamda,ro,c,h,tau: real;
T1,T0,Tr,L,tend,time: real;
f,g: TextFile;
fdir,gdir,tendstr: string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject); // Íåÿâíàÿ ñõåìà
begin  {1}

series1.clear;

//Ñ×ÈÒÛÂÀÍÈÅ ÏÀÐÀÌÅÒÐÎÂ

N:=strtoint(edit1.Text);
tend:=strtofloat(edit2.Text);
L:=strtofloat(edit3.Text);
lamda:=strtofloat(edit4.Text);
ro:=strtofloat(edit5.Text);
T0:=strtofloat(edit6.Text);
T1:=strtofloat(edit7.Text);
Tr:=strtofloat(edit8.Text);

//îïðåäåëÿåì ðàñ÷åòíûé øàã ñåòêè ïî ïðîñòðàíñòâåííîé êîîðäèíàòå

h:=L/(N-1);

//îïðåäåëÿåì ðàñ÷åòíûé øàã ñåòêè ïî âðåìåíè

tau:=tend/100;

//îïðåäåëÿåì ïîëå òåìïåðàòóðû â íà÷àëüíûé ìîìåíò âðåìåíè

for i:=1 to N do    {*}
T[i]:=T0;


//èíòåãðèðîâàíèå íåñòàöèîíàðíîãî óðàâíåíèÿ òåïëïðîâîäíîñòè

time:=0;
while time < tend do begin {2}
time:=time+tau;
{îïðåäåëÿåì íà÷àëüíûå ïðîãîíî÷íûå êîýôôèöèåíòû íà îñíîâå ëåâîãî ãðàíè÷íîãî óñëîâèÿ}
alfa[1]:=0;
beta[1]:=T1;
for i:=2 to N-1 do begin  {3}
{ai,bi,ci,fi - êîýôôèöèåíòû êàíîíè÷åñêîãî ïðåäñòàâëåíèÿ ÑËÀÓ ñ òðåõäèàãîíàëüíîé ìåòðèöåé}
ai:=lamda/sqrt(h);
bi:=(2*lamda)/(sqrt(h))+ro*c/tau;
ci:=lamda/sqrt(h);
fi:=-ro*c*T[i]/tau;
{alfa[i],beta[i] - ïðîãîíî÷íûå êîýôôèöèåíòû}
alfa[i]:=ai/(bi-ci*alfa[i-1]);
beta[i]:=(ci*beta[i-1]-fi)/(bi-ci*alfa[i-1]);
end;  {3}
{îïðåäåëÿåì çíà÷åíèå òåìïåðàòóðû íà ïðàâîé ãðàíèöå}
T[N]:=Tr;
{îïðåäåëÿåì íåèçâåñòíîå ïîëå òåìïåðàòóðû}
for i:=N-1 downto 1 do   {*}
T[i]:=alfa[i]*T[i+1]+beta[i];

end; {2}

//Âûâîä ðåçóëüòàòîâ â ôàéë
fdir:='C:\Users\Ðóñëàí\Desktop\Êîìïüþòåðíàÿ ôèçèêà\ÑÄÀÂÀÒÜ\Óðàâíåíèå òåïëîïðîâîäíîñòè ÄÅËÔÈ\res.txt';
AssignFile(f,fdir);
Rewrite(f);
WriteLn(f,'Òîëùèíà ïëàñòèíû L =',L:6:4);
WriteLn(f,'×èñëî óçëîâ ïî êîîðäèíàòå N =',N);
WriteLn(f,'Êîýôôèöèåíò òåïëîïðîâîäíîñòè ìàòåðèàëà lamda =',lamda:6:4);
WriteLn(f,'Ïëîòíîñòü ìàòåðèàëà ro =',ro:6:4);
WriteLn(f,'Òåïëîåìêîñòü ìàòåðèàëà c =',c:6:4);
WriteLn(f,'Íà÷àëüíàÿ òåìïåðàòóðà T0 =',T0:6:4);
WriteLn(f,'Òåìïåðàòóðà íà ãðàíèöå õ=0, T1 =',T1:6:4);
WriteLn(f,'Òåìïåðàòóðà íà ãðàíèöå õ=L, Tr =',Tr:6:4);
WriteLn(f,'Ðåçóëüòàò ïîëó÷åí ñ øàãîì ïî êîîðäèíàòå h =',h:6:4);
WriteLn(f,'Ðåçóëüòàò ïîëó÷åí ñ øàãîì ïî âðåìåíè tau =',tau:6:4);
WriteLn(f,'Òåìïåðàòóðíîå ïîëå â ìîìåíò âðåìåíè t =',tend:6:4);
close(f);

gdir:='C:\Users\Ðóñëàí\Desktop\Êîìïüþòåðíàÿ ôèçèêà\ÑÄÀÂÀÒÜ\Óðàâíåíèå òåïëîïðîâîäíîñòè ÄÅËÔÈ\tempr.txt';

AssignFile(g,gdir);
Rewrite(g);
for i:=1 to N do
 writeln(g,' ',h*(i-1):6:3,' ',T[i]:8:5);
close(g);


end;{1}



end.
Ответить с цитированием