⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitlinearregress.pas

📁 一个多元非线性回归分析源码以及其中的公式列表
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit UnitLinearRegress;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, ValEdit, ExtCtrls, StdCtrls, Menus, math, Clipbrd, jpeg,
  Animate, GIFCtrl;

type
  TfrmLR = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    X1: TMenuItem;
    caozuo1: TMenuItem;
    N5: TMenuItem;
    MuStart: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    N8: TMenuItem;
    S1: TMenuItem;
    N9: TMenuItem;
    Panel4: TPanel;
    Panel2: TPanel;
    Label3: TLabel;
    VLE_Data: TValueListEditor;
    Panel5: TPanel;
    N10: TMenuItem;
    N11: TMenuItem;
    Label5: TLabel;
    Panel7: TPanel;
    Panel8: TPanel;
    RadioButton1: TRadioButton;
    RadioButton2: TRadioButton;
    Label7: TLabel;
    Label8: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    Label9: TLabel;
    Edit2: TEdit;
    Button2: TButton;
    Label10: TLabel;
    Button3: TButton;
    Label11: TLabel;
    Button4: TButton;
    Button5: TButton;
    Label12: TLabel;
    Label13: TLabel;
    Button6: TButton;
    Label14: TLabel;
    Button7: TButton;
    Label15: TLabel;
    Button8: TButton;
    Label16: TLabel;
    Button9: TButton;
    Label17: TLabel;
    Button10: TButton;
    xy1: TMenuItem;
    N12: TMenuItem;
    PopupMenu1: TPopupMenu;
    PopupMenu2: TPopupMenu;
    PopupMenu3: TPopupMenu;
    E1: TMenuItem;
    Edit3: TComboBox;
    Edit4: TComboBox;
    Label18: TLabel;
    Edit5: TComboBox;
    Button12: TButton;
    I1: TMenuItem;
    N13: TMenuItem;
    S2: TMenuItem;
    N14: TMenuItem;
    xy2: TMenuItem;
    E2: TMenuItem;
    P1: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    SaveDialog2: TSaveDialog;
    N15: TMenuItem;
    N16: TMenuItem;
    N17: TMenuItem;
    N18: TMenuItem;
    C1: TMenuItem;
    V1: TMenuItem;
    D1: TMenuItem;
    D2: TMenuItem;
    Panel6: TPanel;
    Panel1: TPanel;
    ImgLine: TImage;
    Label2: TLabel;
    Image2: TImage;
    Image3: TImage;
    Label6: TLabel;
    Panel3: TPanel;
    Label4: TLabel;
    VLE_Value: TValueListEditor;
    Panel9: TPanel;
    Button11: TButton;
    E3: TMenuItem;
    E4: TMenuItem;
    C2: TMenuItem;
    C3: TMenuItem;
    SavePictureDialog: TSaveDialog;
    Rx_To_GIF: TRxGIFAnimator;
    N20: TMenuItem;
    Splitter2: TSplitter;
    Label1: TLabel;
    procedure VLE_DataKeyPress(Sender: TObject; var Key: Char);
    procedure N11Click(Sender: TObject);
    procedure VLE_DataStringsChange(Sender: TObject);
    procedure VLE_ValueKeyPress(Sender: TObject; var Key: Char);
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button10Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button8Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button9Click(Sender: TObject);
    procedure MuStartClick(Sender: TObject);
    procedure xy1Click(Sender: TObject);
    procedure X1Click(Sender: TObject);
    procedure Button12Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure S1Click(Sender: TObject);
    procedure E1Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure C1Click(Sender: TObject);
    procedure V1Click(Sender: TObject);
    procedure D1Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
    procedure E3Click(Sender: TObject);
    procedure C3Click(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frmLR: TfrmLR;


implementation

uses UnitLinearRegressFunction, UnitfrmAboutM, UnitHelp;//, UnitAuto;

{$R *.dfm}

procedure TfrmLR.VLE_DataKeyPress(Sender: TObject; var Key: Char);
begin
    Key:=upcase(Key);
    //showmessage(inttostr(byte(key)));
    case Key of
        '0','1','2','3','4','5','6','7','8','9': Key:=Key;
        'E','.','-','+': Key:=Key;
        #8,#9,#13: Key:=Key;
        else Key:=#0;
    end;
end;

procedure TfrmLR.N11Click(Sender: TObject);
begin
    if  N11.Checked then
        self.FormStyle:=fsNormal
    else
        self.FormStyle:=fsStayOnTop;
    self.N11.Checked:= not(self.N11.Checked);
end;

procedure TfrmLR.VLE_DataStringsChange(Sender: TObject);
begin
    self.RadioButton1.Checked :=false;
    self.RadioButton2.Checked :=false;
    //SetVLEData(VLE_Value);
    VLE_Value.Strings.Text:='';
    self.ImgLine.Visible:=false;
end;

procedure TfrmLR.VLE_ValueKeyPress(Sender: TObject;
  var Key: Char);
begin
    Key:=#0;
end;

procedure TfrmLR.Button1Click(Sender: TObject);
var x,y     :double;
    i       :integer;
    n       :integer;
    DataOld :string;
begin
    n:=1;
    DataOld:=VLE_Data.Strings.Text;
  try
    if self.RadioButton1.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[0,i]);
            y:= strtofloat(self.Edit1.Text);
            x:=x+y;
            self.VLE_Data.Cells[0,i]:=floattostr(x);
        end;
    end
    else if self.RadioButton2.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            x:=strtofloat(self.VLE_Data.Cells[1,i]);
            y:= strtofloat(self.Edit1.Text);
            x:=x+y;
            self.VLE_Data.Cells[1,i]:=floattostr(x);
        end;
    end
    else
    begin
        application.MessageBox('请先选定是针对x轴还是y轴进行计算。','提醒:',MB_ICONINFORMATION);
    end;
  except
    application.MessageBox(Pchar('加法计算在计算第'+inttostr(n)+'行数据时出现错误。'),'出错:',MB_ICONERROR);
    VLE_Data.Strings.Text:=DataOld;
  end;
end;

procedure TfrmLR.Button2Click(Sender: TObject);
var x,y     :double;
    i       :integer;
    n       :integer;
    DataOld :string;
begin         
    n:=1;
    DataOld:=VLE_Data.Strings.Text;
  try
    if self.RadioButton1.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[0,i]);
            y:=strtofloat(self.Edit2.Text);
            x:=x*y;
            self.VLE_Data.Cells[0,i]:=floattostr(x);
        end;
    end
    else if self.RadioButton2.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            x:=strtofloat(self.VLE_Data.Cells[1,i]);
            y:=strtofloat(self.Edit2.Text);
            x:=x*y;
            self.VLE_Data.Cells[1,i]:=floattostr(x);
        end;
    end
    else
    begin
        application.MessageBox('请先选定是针对x轴还是y轴进行计算。','提醒:',MB_ICONINFORMATION);
    end;
  except
    application.MessageBox(Pchar('乘法计算在计算第'+inttostr(n)+'行数据时出现错误。'),'出错:',MB_ICONERROR);
    VLE_Data.Strings.Text:=DataOld;
  end;
end;

procedure TfrmLR.Button3Click(Sender: TObject);
var x,y     :double;
    i       :integer;
    n       :integer;
    DataOld :string;
begin        
    n:=1;
    DataOld:=VLE_Data.Strings.Text;
  try
    if self.RadioButton1.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[0,i]);
            y:=strtofloat(self.Edit3.Text);
            if y-trunc(y)=0 then
            begin
                x:=IntPower(x,trunc(y));
            end
            else
                x:=exp(ln(x)*y);
            self.VLE_Data.Cells[0,i]:=floattostr(x);
        end;
    end
    else if self.RadioButton2.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[1,i]);
            y:=strtofloat(self.Edit3.Text);
            if y-trunc(y)=0 then
            begin
                x:=IntPower(x,trunc(y));
            end
            else
                x:=exp(ln(x)*y);
            self.VLE_Data.Cells[1,i]:=floattostr(x);
        end;
    end
    else
    begin
        application.MessageBox('请先选定是针对x轴还是y轴进行计算。','提醒:',MB_ICONINFORMATION);
    end;
  except
    application.MessageBox(Pchar('次方计算在计算第'+inttostr(n)+'行数据时出现错误。'),'出错:',MB_ICONERROR);
    VLE_Data.Strings.Text:=DataOld;
  end;
end;

procedure TfrmLR.Button10Click(Sender: TObject);
var x,y     :double;
    i       :integer;
    n       :integer;
    DataOld :string;
begin
    n:=1;
    DataOld:=VLE_Data.Strings.Text;
  try
    if self.RadioButton1.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[0,i]);
            y:=strtofloat(self.Edit4.Text);
            x:=ln(x)/ln(y);
            self.VLE_Data.Cells[0,i]:=floattostr(x);
        end;
    end
    else if self.RadioButton2.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[1,i]);
            y:=strtofloat(self.Edit4.Text);
            x:=ln(x)/ln(y);
            self.VLE_Data.Cells[1,i]:=floattostr(x);
        end;
    end
    else
    begin
        application.MessageBox('请先选定是针对x轴还是y轴进行计算。','提醒:',MB_ICONINFORMATION);
    end;
  except
    application.MessageBox(Pchar('求对数计算在计算第'+inttostr(n)+'行数据时出现错误。'),'出错:',MB_ICONERROR);
    VLE_Data.Strings.Text:=DataOld;
  end;
end;

procedure TfrmLR.Button4Click(Sender: TObject);
var x       :double;
    i       :integer;
    n       :integer;
    DataOld :string;
begin
    n:=1;
    DataOld:=VLE_Data.Strings.Text;
  try
    if self.RadioButton1.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[0,i]);
            x:=sin(x);
            self.VLE_Data.Cells[0,i]:=floattostr(x);
        end;
    end
    else if self.RadioButton2.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            x:=strtofloat(self.VLE_Data.Cells[1,i]);
            x:=sin(x);
            self.VLE_Data.Cells[1,i]:=floattostr(x);
        end;
    end
    else
    begin
        application.MessageBox('请先选定是针对x轴还是y轴进行计算。','提醒:',MB_ICONINFORMATION);
    end;
  except
    application.MessageBox(Pchar('Sin计算在计算第'+inttostr(n)+'行数据时出现错误。'),'出错:',MB_ICONERROR);
    VLE_Data.Strings.Text:=DataOld;
  end;
end;

procedure TfrmLR.Button6Click(Sender: TObject);
var x       :double;
    i       :integer;
    n       :integer;
    DataOld :string;
begin
    n:=1;
    DataOld:=VLE_Data.Strings.Text;
  try
    if self.RadioButton1.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            n:=i;
            x:=strtofloat(self.VLE_Data.Cells[0,i]);
            x:=cos(x);
            self.VLE_Data.Cells[0,i]:=floattostr(x);
        end;
    end
    else if self.RadioButton2.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin
            x:=strtofloat(self.VLE_Data.Cells[1,i]);
            x:=cos(x);
            self.VLE_Data.Cells[1,i]:=floattostr(x);
        end;
    end
    else
    begin
        application.MessageBox('请先选定是针对x轴还是y轴进行计算。','提醒:',MB_ICONINFORMATION);
    end;
  except
    application.MessageBox(Pchar('Cos计算在计算第'+inttostr(n)+'行数据时出现错误。'),'出错:',MB_ICONERROR);
    VLE_Data.Strings.Text:=DataOld;
  end;
end;

procedure TfrmLR.Button8Click(Sender: TObject);
var x       :double;
    i       :integer;
    n       :integer;
    DataOld :string;
begin
    n:=1;
    DataOld:=VLE_Data.Strings.Text;
  try
    if self.RadioButton1.Checked  then
    begin
        for i:=1 to self.VLE_Data.RowCount-1 do
        begin

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -