Dobra. Mam inny problem/pytanie.
Otwieram plik pomiarowy (.txt) i wprowadzam go na wykres. Ale jak zrobić żeby potem kolejne linijki pomiarów z pliku tekstowego podstawiał do wzorów fitowania?
unit Pomiarowe;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Styczne, ExtCtrls, TeeProcs, TeEngine, Chart, StdCtrls, Series, Symulacja;
type
Wektor=array[0..1000] of Real;
type
TForm4 = class(TForm)
OpenDialog1: TOpenDialog;
Chart1: TChart;
Button1: TButton;
Series1: TPointSeries;
Series2: TLineSeries;
Button2: TButton;
GroupBox1: TGroupBox;
Panel1: TPanel;
Edit1: TEdit;
Panel2: TPanel;
Edit2: TEdit;
Panel3: TPanel;
Edit3: TEdit;
Panel7: TPanel;
Edit7: TEdit;
GroupBox2: TGroupBox;
Panel5: TPanel;
Edit5: TEdit;
Panel6: TPanel;
Edit6: TEdit;
Button3: TButton;
Label2: TLabel;
Label1: TLabel;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
u,v,w,uStart,vStart,wStart:Real;
n:integer;
x,y:Wektor;
//function funk1(u:Real):Real;
function funk2(v:Real):Real;
function funk3(w:Real):Real;
function f1:Real;
function f2(v:Real):Real;
function f3(w:Real):Real;
function Li(i:integer;u,v,w:Real):Real;
function Lip(i:integer;v,w:Real):Real;
procedure Fit;
end;
var
Form4: TForm4;
implementation
{$R *.DFM}
procedure TForm4.Button1Click(Sender: TObject);
var
Dane: TextFile;
begin
with Form4 do
begin
if OpenDialog1.Execute then
begin
Series1.Clear;
AssignFile(Dane, OpenDialog1.FileName);
try
Reset(Dane);
while not EoF(Dane) do
begin
Readln(Dane, x[n], y[n]);
Form4.Series1.AddXY(x[n], y[n]);
end;
finally
CloseFile(Dane);
end;
end;
end;
end;
function TForm4.Li(i:integer;u,v,w:Real):Real;
begin
Result:=u*w/pi/(sqr(X[n]-v)+sqr(w));
end;
function TForm4.Lip(i:integer;v,w:Real):Real;
begin
Result:=w/pi/(sqr(X[n]-v)+sqr(w));
end;
function TForm4.f1:Real;
var i:integer; licz,mian:Real;
begin
Result:=0;
licz:=0; mian:=0;
for i:=0 to n do
begin
licz:= licz+lip(i,v,w)*Y[n]/abs(Y[n]);
mian:=mian+sqr(Lip(i,v,w))/abs(Y[n]);
Result:=licz/mian;
end;
end;
function TForm4.f2(v:Real):Real;
var i:integer;
begin
Result:=0;
for i:=0 to n do
begin
Result:=Result+(Li(i,u,v,w)-Y[n])
/abs(Y[n])*sqr(Li(i,u,v,w))*(X[n]-v);
end;
end;
function TForm4.f3(w:Real):Real;
var i:integer;
begin
Result:=0;
for i:=0 to n do
begin
Result:=Result+(Li(i,u,v,w)-Y[n])
/abs(Y[n])*sqr(Li(i,u,v,w));
end;
end;
function TForm4.funk2(v:Real):Real;
begin
Result:=0;
if row_stycz(funk3,f3,wStart,w)then //wyznaczenie v -> x0(funk2,u)
Result:=f2(v);
wStart:=w;
end;
function TForm4.funk3(w:Real):Real;
begin
u:=f1;
Result:=f3(w);
uStart:=u;
end;
procedure TForm4.Fit;
var
i:integer; chi2,r1,r2:Real;
begin
if row_stycz(funk2,f2,vStart,v)then
//Rozwiązywanie równania Funk1[u,v(Funk2,u)]
begin
Edit1.text:=FloatToStr(u);
Edit2.text:=FloatToStr(v);
Edit3.text:=FloatToStr(w);
//Series1.Clear;
//Series2.Clear;
chi2:=0;
for i:=0 to n do
begin
r1:=Y[n]; r2:=(2*u/pi)*(w/(4*sqr(X[n]-v)+sqr(w)));
Series1.AddXY(X[n],r1);
Series2.AddXY(X[n],r2);
chi2:=chi2+sqr(r2-r1)/abs(r1);
end;
chi2:=chi2/(n-3);
Edit7.Text:=FloatToStr(chi2);
end else ShowMessage('Brak rozwiązania');
end;
procedure TForm4.Button2Click(Sender: TObject);
begin
vStart:=StrToFloat(Edit5.Text);
wStart:=StrToFloat(Edit6.Text);
Fit;
end;
procedure TForm4.Button3Click(Sender: TObject);
begin
Series1.Clear;
Series2.Clear;
end;
end.