unit TEST; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, TeeProcs, TeEngine, Chart, Grids, Series; type TForm1 = class(TForm) Chart1: TChart; Series1: TLineSeries; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; const NN = 2; type TDArrayD = array of Double; TDArrayI = array of Integer; TArrayNND = array [1..NN] of Double; TArrayNNnD = array [0..NN] of Double; TArray1I = array [1..1] of Integer; Todef = procedure ( n: Integer; x: Double; var y: TArrayNND; var f: TArrayNND; var rpar: TArrayNNnD; var ipar: TArray1I ); stdcall; procedure odef( n: Integer; x: Double; var y: TArrayNND; var f: TArrayNND; var rpar: TArrayNNnD; var ipar: TArray1I ); stdcall; procedure radau5solver( neqn: Integer; var t: TArrayNNnD; var y: TArrayNND; odef: Todef; var rtol: TArrayNND; var atol: TArrayNND; h0: Double ); stdcall; implementation {$R *.dfm} procedure odef( n: Integer; x: Double; var y: TArrayNND; var f: TArrayNND; var rpar: TArrayNNnD; var ipar: TArray1I ); stdcall; begin ShowMessage('OoOoo'); ShowMessage(IntToStr(n)); // f[0] := y[1]; // f[1] := ((1-sqr(y[0]))*y[1]-y[0])/0.000001; end; procedure radau5solver( neqn: Integer; var t: TArrayNNnD; var y: TArrayNND; odef: Todef; var rtol: TArrayNND; var atol: TArrayNND; h0: Double ); stdcall; external 'radau5solver.dll' name 'radau5solver'; procedure TForm1.FormCreate(Sender: TObject); var neqn: Integer; h0: Double; t: TArrayNNnD; y, rtol, atol: TArrayNND; Fil: TextFile; K, i: Integer; Outs: array of array of Double; begin neqn := 2; // SetLength(t,neqn+1); // SetLength(y,neqn); // SetLength(rtol,neqn); // SetLength(atol,neqn); h0 := 0.000001; rtol[1] := 0.000001; atol[1] := 0.000000001; t[0] := 0; t[1] := 2; y[1] := 2; y[2] := 0; radau5solver(neqn,t,y,odef,rtol,atol,h0); AssignFile(Fil, 'vdpolRADAU5.txt'); {$I-} // îòêëþ÷åíèå êîíòðîëÿ îøèáîê ââîäà-âûâîäà Reset(Fil); // îòêðûòèå ôàéëà äëÿ ÷òåíèÿ {$I+} // âêëþ÷åíèå êîíòðîëÿ îøèáîê ââîäà-âûâîäà if IOResult <> 0 then // åñëè åñòü îøèáêà îòêðûòèÿ, òî begin ShowMessage('Îøèáêà îòêðûòèÿ ôàéëà'); Exit; // âûõîä èç ïðîöåäóðû ïðè îøèáêå îòêðûòèÿ ôàéëà end; K := 0; while not Eof(Fil) do begin SetLength(Outs,3,K+1); Readln(Fil, Outs[0,K], Outs[1,K], Outs[2,K]); Inc(K); end; CloseFile(Fil); for i := 0 to K-1 do begin Series1.AddXY(Outs[0,i],Outs[1,i]); end; end; end. |