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

📄 unit1.~pas

📁 delphi编的电磁场复数运算
💻 ~PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs,  VarCmplx,math,
  //CPUCounter_Hss, CompileComplex_Hss, Complex_Hss,
  StdCtrls, Buttons;
type
  TForm1 = class(TForm)
    BitBtn1: TBitBtn;
    Edit5: TEdit;
    Edit6: TEdit;
    GroupBox1: TGroupBox;
    exre: TEdit;
    eximg: TEdit;
    eyre: TEdit;
    eyimg: TEdit;
    hximg: TEdit;
    hyre: TEdit;
    hyimg: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Label13: TLabel;
    Label14: TLabel;
    Label15: TLabel;
    Label16: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    hxre: TEdit;
    Label7: TLabel;
    BitBtn2: TBitBtn;
    OpenDialog1: TOpenDialog;
    BitBtn3: TBitBtn;
    procedure BitBtn1Click(Sender: TObject);
    procedure BitBtn2Click(Sender: TObject);
    procedure BitBtn3Click(Sender: TObject);
  private
    { Private declarations }
    function powerspectra(const compl1, compl2: Variant):Variant;OverLoad;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
implementation
var
  frq,apl,phs,damp,nt: array of real;              // 原始数据
  dh,pd,kh,px:array of integer;            //
  sxfrq,sxapl,sxphs: array of real;        // 筛选后数据
  sxdh,sxpd,sxkh,sxpx:array of integer;    //
  //cz:array of string;
  changdu,number,length:integer;       //  number:数据行数   changdu:数组最大长度

{$R *.dfm}

function TForm1.powerspectra(const compl1, compl2: Variant): Variant;
var
  compl2Conjug:Variant;
  //i:integer;
begin
  compl2Conjug:=VarComplexConjugate(compl2);
  powerspectra:=compl1*compl2Conjug;
end;

procedure TForm1.BitBtn1Click(Sender: TObject);
var
  Ex,Ey,Hx,Hy: Variant;
  Zxx1,z1,z2,z3,z4,zxx2,Zxx: Variant;
  A,B: Variant;
  //b: double;
  real1,real2,real3,real4:double;
  imag1,imag2,imag3,imag4:double;
begin
  real1:=strtofloat(exre.Text);
  imag1:=strtofloat(eximg.Text);
  real2:=strtofloat(eyre.Text);
  imag2:=strtofloat(eyimg.Text);
  real3:=strtofloat(hxre.Text);
  imag3:=strtofloat(hximg.Text);
  real4:=strtofloat(hyre.Text);
  imag4:=strtofloat(hyimg.Text);
  Ex:= VarComplexCreate(real1,imag1);
  Ey:= VarComplexCreate(real2,imag2);
  Hx:= VarComplexCreate(real3,imag3);
  Hy:= VarComplexCreate(real4,imag4);

  //edit6.Text:=(a1*a2).real;
  //edit6.Text:=(a1*a2).Imaginary;
  //edit6.Text:=(a1*a2).Radius;
  //edit6.Text:=(a1*a2).Theta;
  //edit6.Text:=(a1*a2).FixedTheta;
  A:=Hx;
  B:=Hy;
  z1:=powerspectra(Ex,A);
  z2:=powerspectra(Hy,B);
  z3:=powerspectra(Ex,B);
  z4:=powerspectra(Hy,A);
  Zxx1:=z1*z2;
  Zxx2:=z3*z4;
  Zxx:=(powerspectra(Ex,A)*powerspectra(Hy,B))-(powerspectra(Ex,B )*powerspectra(Hy,A));
      // /(powerspectra(Hx,A)*powerspectra(Hy,B)-powerspectra(Hx,B)*powerspectra(Hy,A));
  edit6.Text:=Zxx.real;
  edit5.Text:=Zxx.Imaginary;
end;



procedure TForm1.BitBtn2Click(Sender: TObject);
var
  ff: Textfile;
  //DaoHang:string[13];
  //ChangZhi:string[2];
  DaoHao,PinDuan,KuaiHao,PinXu:integer;
  frequency,amplitude,phase,damping,ntvalue:real;
  lin1,lin2,lin3,lin4,lin5,lin6,lin7,lin8,lin9:string[1];//临时变量
  i:integer;
  //o:string;
begin
  changdu:=9000;
  setlength(dh,changdu);
  //setlength(cz,changdu);
  setlength(pd,changdu);
  setlength(kh,changdu);
  setlength(px,changdu);
  setlength(frq,changdu);
  setlength(apl,changdu);
  setlength(phs,changdu);
  setlength(damp,changdu);
  setlength(nt,changdu);
  for i := 0 to changdu-1 do dh[i]:=0;
  //for i := 0 to changdu-1 do cz[i]:=o;
  for i := 0 to changdu-1 do pd[i]:=0;
  for i := 0 to changdu-1 do kh[i]:=0;
  for i := 0 to changdu-1 do px[i]:=0;
  for i := 0 to changdu-1 do frq[i]:=0;
  for i := 0 to changdu-1 do apl[i]:=0;
  for i := 0 to changdu-1 do phs[i]:=0;
  for i := 0 to changdu-1 do damp[i]:=0;
  for i := 0 to changdu-1 do nt[i]:=0;
  if OpenDialog1.Execute then
  begin
    //showmessage('数据读取中…………');
    AssignFile(ff, OpenDialog1.FileName);
    reset(ff);
    //readln(ff);
    for i := 0 to changdu-1 do
    begin
     if not Eof(ff) then
     begin
      readln(ff, DaoHao,lin2,KuaiHao,lin3,PinDuan,lin4,PinXu,lin5,frequency,lin6,amplitude,lin7,phase,lin8,damping,lin9,ntvalue);
      dh[i]:=DaoHao;
      //cz[i]:=ChangZhi;
      pd[i]:=PinDuan;
      kh[i]:=KuaiHao;
      px[i]:=PinXu;
      frq[i]:=frequency;
      apl[i]:=amplitude;
      phs[i]:=phase;
      damp[i]:=damping;
      nt[i]:=ntvalue;
     end
     else break;
    end;
  number:=0;
  for i := 0 to changdu-1 do
  if dh[i]=0 then
  begin
     number:=i;
     break;
  end;
  closefile(ff);
  end;
end;

procedure TForm1.BitBtn3Click(Sender: TObject);
var
  i,j,m,start,goal,best:integer;
begin
  //初始化筛选数组
  setlength(sxdh,400);
  setlength(sxpd,400);
  setlength(sxkh,400);
  setlength(sxpx,400);
  setlength(sxfrq,400);
  setlength(sxapl,400);
  setlength(sxphs,400);
  for i := 0 to 399 do sxdh[i]:=0;
  for i := 0 to 399 do sxpd[i]:=0;
  for i := 0 to 399 do sxkh[i]:=0;
  for i := 0 to 399 do sxpx[i]:=0;
  for i := 0 to 399 do sxfrq[i]:=0;
  for i := 0 to 399 do sxapl[i]:=0;
  for i := 0 to 399 do sxphs[i]:=0;

  //筛选数据
  length:=0;
  for i:=0 to 9000 do
    if nT[i]=0 then
      length:=i;

  start:=0;
  goal:=0;
  m:=0;
  for i:=0 to length-1 do
  begin
    if (kh[i]<>kh[start])  then     // and (pd[i]<>pd[start])
    begin
      goal:=i-1;
      best:=goal;
      {for j:=start to goal-1 do
      begin
        if (frq[j]-bbbb)<(frq[start]-bbbb) then
          best:=j;
      end;}
      sxdh[m]:=dh[best];
      sxpd[m]:=pd[best];
      sxkh[m]:=kh[best];
      sxpx[m]:=px[best];
      sxfrq[m]:=frq[best];
      sxapl[m]:=apl[best];
      sxphs[m]:=phs[best];
      m:=m+1;
      start:=goal+1;
    end;
  end;
  {sxdh[m]:=dh[length-1];
  sxpd[m]:=pd[length-1];
  sxkh[m]:=kh[length-1];
  sxpx[m]:=px[length-1];
  sxfrq[m]:=frq[length-1];
  sxapl[m]:=apl[length-1];
  sxphs[m]:=phs[length-1];}


end;

end.

⌨️ 快捷键说明

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