unit Unit4; { This software has been designed and is CopyLefted by Han de Bruijn: (===) @-O^O-@ #/_\# ### } interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ExtCtrls, Grafisch, Numeriek, Math; type TForm1 = class(TForm) Image1: TImage; procedure Scheppen(Sender: TObject); procedure Toetsdruk(Sender: TObject; var Key: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} const N : integer = 20; p : double = 5; var FEM : Numerical; procedure Rekenen; { Calculations } var i : integer; dx : double; begin SetLength(FEM.nr,2); for i := 1 to N-1 do begin FEM.nr[0] := i; FEM.nr[1] := i+1; FEM.Layout; end; Writeln('Matrix size = ',FEM.nn,' x ',FEM.nb1); FEM.Globaal_nul; FEM.Element_nul(2); dx := 1/(N-1); FEM.e[0][0] := 1/dx + sqr(p)/3*dx; FEM.e[1][1] := FEM.e[0][0]; FEM.e[0][1] := -1/dx + sqr(p)/6*dx; FEM.e[1][0] := FEM.e[0][1]; FEM.r[0] := 0; FEM.r[1] := 0; for i := 1 to N-1 do begin FEM.nr[0] := i; FEM.nr[1] := i+1; FEM.Intellen; { Assembly } end; FEM.E[0][0] := 1; FEM.r[0] := 1; FEM.nr[0] := 1; FEM.Randvoorwaarde; { b.c. } FEM.Oplossen; { Solver } end; procedure Tekenen; { Graphics and Print } var i,j,k : integer; exact : double; begin Form1.Image1.Canvas.Pen.Width := 2; Form1.Image1.Canvas.Pen.Color := clBlack; Form1.Image1.Canvas.Brush.Color := clBlack; Form1.Image1.Canvas.MoveTo(x2i(0),y2j(0)); Form1.Image1.Canvas.LineTo(x2i(1),y2j(0)); for k := 0 to N-1 do begin i := x2i(k/(N-1)); j := y2j(0); Form1.Image1.Canvas.Ellipse(i-4,j-4,i+4,j+4); end; Form1.Image1.Canvas.Pen.Color := clGreen; Form1.Image1.Canvas.MoveTo(x2i(0),y2j(1)); for k := 0 to N-1 do begin exact := cosh(p*(1-k/(N-1)))/cosh(p); i := x2i(k/(N-1)); j := y2j(exact); Form1.Image1.Canvas.LineTo(i,j); Writeln(FEM.b[k],' =',exact); end; Form1.Image1.Canvas.Pen.Color := clRed; Form1.Image1.Canvas.MoveTo(x2i(0),y2j(1)); for k := 1 to N-1 do begin i := x2i(k/(N-1)); j := y2j(FEM.b[k]); Form1.Image1.Canvas.LineTo(i,j); end; end; procedure TForm1.Scheppen(Sender: TObject); { On Create } begin Rekenen; TV(Form1.Image1); ClearDevice; xmin := -0.01; xmax := 1.01; ymin := -0.01; ymax := 1.01; Tekenen; end; procedure TForm1.Toetsdruk(Sender: TObject; var Key: Char); { On KeyPress } begin Exit; end; end.