📄 unit1.pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
procedure FUNCS(X:real;var AFUNC:array of real; MA:integer);
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
matrx2=array of array of real;
var
Form1: TForm1;
ISET:^integer; gset:^real;
implementation
//PROGRAM D7R2
//Driver for routine LFIT
uses
unit2;
{$R *.DFM}
procedure FUNCS(X:real;var AFUNC:array of real; MA:integer);
var
I:integer;
begin
AFUNC[1]:= 1;
For I:= 2 To MA do
AFUNC[I]:= X * AFUNC[I - 1];
end;
procedure TForm1.Button1Click(Sender: TObject);
const
s1='%14.6f'; s2='.#####0e+00'; s3='#'; s4='.#0e+00'; s5='%9.6f';
NPT = 100; SPREAD = 0.1; NTERM = 3;
var
COVAR:matrx2;
A,X,Y,SIG:array[0..100] of real; LISTA:ARRAY[0..100] of integer;
I,J,MFIT,II:integer; AAA,CHI2,Q,CHISQ:real;
F:TextFile;
begin
SetLength(COVAR,4,4);
New(ISET); New(GSET);
Iset^:=0; GSET^:=0;
Randomize;
For I:=1 To NPT do
begin
X[I]:=0.1 * I;
Y[I]:=NTERM;
For J:=NTERM-1 DownTo 1 do
Y[I]:= J + Y[I]*X[I];
Y[I]:= Y[I]+SPREAD*GASDEV;
SIG[I]:=SPREAD;
end;
MFIT:=NTERM;
For I:= 1 To MFIT do
LISTA[I]:= I;
LFIT(X, Y, SIG, NPT, A, NTERM, LISTA, MFIT, COVAR, NTERM, CHISQ);
//输出计算结果到文件
AssignFile(F, 'd:\delphi_shu\p7\d7r2.dat');
Rewrite(F);
Writeln(F,'Parameter Uncertainty');
For I:= 1 To NTERM do
Writeln(F,'A(',FormatFloat(s3,I), ')= ', Format(s5,[A[I]]),
Format(s1,[Sqrt(COVAR[I, I])]));
Writeln(F);
Writeln(F,'Chi-squared = ', FormatFloat(s2,CHISQ));
Writeln(F);
Writeln(F,'Full covariance matrix');
For I:= 1 To NTERM do
Writeln(F,FormatFloat(s4,COVAR[I, 1]),' ',FormatFloat(s4,COVAR[I, 2]),
' ',FormatFloat(s4,COVAR[I, 3]));
//Now test the LISTA feature
For I:= 1 To NTERM do
LISTA[I]:= NTERM + 1 - I;
LFIT(X, Y, SIG, NPT, A, NTERM, LISTA, MFIT, COVAR, NTERM, CHISQ);
Writeln(F);
Writeln(F,'Parameter Uncertainty');
For I:= 1 To NTERM do
Writeln(F,'A(',FormatFloat(s3,I), ')= ', Format(s5,[A[I]]),
Format(s1,[Sqrt(COVAR[I, I])]));
Writeln(F);
Writeln(F,'Chi-squared = ', FormatFloat(s2,CHISQ));
Writeln(F);
Writeln(F,'Full covariance matrix');
For I:= 1 To NTERM do
Writeln(F,FormatFloat(s4,COVAR[I, 1]),' ',FormatFloat(s4,COVAR[I, 2]),
' ',FormatFloat(s4,COVAR[I, 3]));
//Now check results of restricting fit s
II:= 1;
For I:= 1 To NTERM do
begin
AAA:= I - (I Div 2) * 2;
If AAA = 1 Then
begin
LISTA[II]:= I;
II:= II + 1;
end;
end;
MFIT:= II - 1;
LFIT(X, Y, SIG, NPT, A, NTERM, LISTA, MFIT, COVAR, NTERM, CHISQ);
Writeln(F);
Writeln(F,'Parameter Uncertainty');
For I:= 1 To NTERM do
Writeln(F,'A(',FormatFloat(s3,I), ')= ', Format(s5,[A[I]]),
' ',Format(s1,[Sqrt(COVAR[I, I])]));
Writeln(F);
Writeln(F,'Chi-squared = ', FormatFloat(s2,CHISQ));
Writeln(F);
Writeln(F,'Full covariance matrix');
For I:= 1 To NTERM do
Writeln(F,FormatFloat(s4,COVAR[I, 1]),' ',FormatFloat(s4,COVAR[I, 2]),
' ',FormatFloat(s4,COVAR[I, 3]));
CloseFile(F);
//屏幕显示计算结果
memo1.Lines.LoadFromFile('d:\delphi_shu\p7\d7r2.dat');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -