|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Нарисовать линию по коэффициентам
Доброго времени суток, уважаемые программисты!
Такая проблема - не могу найти в делфи функцию, которая бы рисовала прямую по коэффициентам. У меня задача состоит в построении прямой по методу наименьших квадратов. Все работает, кроем построения самой прямой(( Подскажите как решить.... Вот код Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Series, TeEngine, TeeProcs, Chart, ExtCtrls, StdCtrls, Math; type TForm1 = class(TForm) Panel1: TPanel; Chart1: TChart; Series1: TPointSeries; Series2: TLineSeries; LabeledEdit1: TLabeledEdit; Button1: TButton; Label1: TLabel; Button2: TButton; Button3: TButton; Button4: TButton; OpenDialog1: TOpenDialog; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation var D: array of real; ReadOk: boolean; ff: textfile; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin if Form1.OpenDialog1.Execute then Form1.LabeledEdit1.Text := Form1.OpenDialog1.FileName; end; procedure TForm1.Button2Click(Sender: TObject); var i, n: LongWord; a,b,sx,sxx,sxy: real; begin ReadOk := true; SetLength(D, 0); Try AssignFile(ff, Form1.LabeledEdit1.Text); Reset(ff); Try while not(EOF(ff)) do begin SetLength(D, Length(D)+1); readln(ff, D[Length(D)-1]); end; finally CloseFile(ff); end; except ReadOk := false; end; if ReadOk then begin sx := 0; sxx := 0; sxy := 0; n := Length(D); for i := 1 to n do begin sx := sx + D[i]; sxx := sxx + D[i]*D[i]; sxy := sxy + D[i]*i; end; a := (sxy - 1)/(sxx - sx*sx/n); b := 1 - sx/n*a; Form1.Label1.Caption := 'y = '+floattostr(RoundTo(a,-2))+' x + '+floattostr(RoundTo(b,-2)); end else Form1.Label1.Caption := 'Ошибка загрузки данных'; end; procedure TForm1.Button3Click(Sender: TObject); var i, n: LongWord; begin n := Length(D); for i:=0 to (n div 2) - 1 do begin Form1.Chart1.Series[0].AddXY(D[i*2],D[i*2+1]); end; end; procedure TForm1.Button4Click(Sender: TObject); //это пробный вариант, ну и похоже бредовый var a,b : Real; m : Integer; begin for m:= -20 to 20 do begin Chart1.Series[2].AddXY(m,m*a+b); end; end; end. |