Advertisement
Guest User

Untitled

a guest
Oct 22nd, 2016
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Delphi 4.80 KB | None | 0 0
  1. // ÐÎÇÐÀÕÓÍÎÊ ÏÀÐÀÌÅÒв ԲËÜÒÐÀ
  2.  
  3. procedure TForm1.Button1Click(Sender: TObject);
  4. label labl,l1;
  5. var Current,Count,i,j,k: Integer;
  6.     lmin,lmax,l0,dl,l,T,dT,ns,np,nn,nv,nu,ne,nk,nk1,nk2: Real;
  7.     F1: TextFile;
  8.     ll,TT,zapis: String;
  9.     Ms,M,m1,m2: array[1..2,1..2] of Real;
  10.     s,str: String;
  11.     a,b,u,e: array[0..100] of Real;
  12. begin
  13. Series1.Clear;
  14. Series2.Clear;
  15. Series3.Clear;
  16. lmin:=StrToFloat(Edit1.Text);
  17. lmax:=StrToFloat(Edit2.Text);
  18. l0:=StrToFloat(Edit3.Text);
  19. dl:=StrToFloat(Edit4.Text);
  20. ns:=StrToFloat(Edit8.Text);
  21. np:=StrToFloat(Edit9.Text);
  22. nn:=StrToFloat(Edit10.Text);
  23. nv:=StrToFloat(Edit11.Text);
  24. nu:=StrToFloat(Edit13.Text);
  25. ne:=StrToFloat(Edit14.Text);
  26. //ÏÎÁÓÄÎÂÀ ÇÐÀÇÊÎÂί ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ
  27. l:=lmin; T:=0; dT:=5;
  28. While (lmin<=l)and(l<=l0-10*dl) do
  29. begin
  30. Series1.AddXY(l,0,'',clRed); l:=l+dl;
  31. end;
  32. While (l0-10*dl<l)and(l<=l0+10*dl) do
  33. begin
  34. Series1.AddXY(l,T,'',clBlue); l:=l+dl; T:=T+dT;
  35. end;
  36. While (l0+10*dl<l)and(l<=lmax) do
  37. begin
  38. Series1.AddXY(l,100,'',clRed); l:=l+dl;
  39. end;
  40. //ÏÎÁÓÄÎÂÀ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ Ç MATLAB
  41. {AssignFile(F1,'Data1.txt');
  42. Reset(F1);
  43. repeat
  44. Readln(F1,zapis);
  45. ll:=Copy(zapis,1,5); Delete(zapis,1,10); TT:=Copy(zapis,1,5);
  46. Series2.AddXY(StrToFloat(ll),100*StrToFloat(TT),'',clGreen);
  47. until EOF(F1);
  48. CloseFile(F1); }
  49.  
  50. //*****ÏÎÁÓÄÎÂÀ ÍÎÂί ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ*****  aHbB...
  51. s:=Edit12.Text; i:=1; j:=1;
  52. repeat  //âèçíà÷åííÿ ñòðóêòóðè ô³ëüòðà
  53. if (s[i]='0')or(s[i]='1')or(s[i]='2')or(s[i]='3')or(s[i]='4')
  54.     or(s[i]='5')or(s[i]='6')or(s[i]='7')or(s[i]='8')or(s[i]='9') then
  55.     begin
  56.     str:='';
  57.     if s[i+1]='H' then begin a[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
  58.     if s[i+1]='B' then begin b[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
  59.     if s[i+1]='A' then begin u[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
  60.     if s[i+1]='E' then begin e[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
  61.     if s[i+1]=',' then
  62.         begin
  63.         str:=s[i]+','+s[i+2];
  64.         if s[i+3]='H' then begin a[j]:=StrToFloat(str); i:=i+4; goto l1; end;
  65.         if s[i+3]='B' then begin b[j]:=StrToFloat(str); i:=i+4; goto l1; end;
  66.         if s[i+3]='A' then begin u[j]:=StrToFloat(str); i:=i+4; goto l1; end;
  67.         if s[i+3]='E' then begin e[j]:=StrToFloat(str); i:=i+4; goto l1; end;
  68.         end;
  69.     end;
  70. if s[i]='H' then a[j]:=1;
  71. if s[i]='B' then b[j]:=1;
  72. if s[i]='A' then u[j]:=1;
  73. if s[i]='E' then e[j]:=1;
  74. i:=i+1;
  75. l1: j:=j+1;
  76. until s[i]='';
  77. //ðîçðàõóíîê õàðàêòåðèñòè÷íî¿ ìàòðèö³ ³ ïîáóäîâà ãðàô³êà ñïåêòð. õàðàêòåðèñòèêè
  78. l:=lmin;
  79. repeat
  80. if a[1]<>0 then begin  nk:=nn*a[1]; nk1:=1/nn; nk2:=nn; end;
  81. if b[1]<>0 then begin  nk:=nv*b[1]; nk1:=1/nv; nk2:=nv; end;
  82. if u[1]<>0 then begin  nk:=nu*u[1]; nk1:=1/nu; nk2:=nu; end;
  83.               m1[1,1]:=cos((2*Pi*nk*(l0/4))/l);
  84.               m1[1,2]:=nk1*sin((2*Pi*nk*(l0/4))/l);
  85.               m1[2,1]:=nk2*sin((2*Pi*nk*(l0/4))/l);
  86.               m1[2,2]:=cos((2*Pi*nk*(l0/4))/l);
  87. if a[2]<>0 then begin  nk:=nn*a[2]; nk1:=1/nn; nk2:=nn; end;
  88. if b[2]<>0 then begin  nk:=nv*b[2]; nk1:=1/nv; nk2:=nv; end;
  89. if u[2]<>0 then begin  nk:=nu*u[2]; nk1:=1/nu; nk2:=nu; end;
  90.               m2[1,1]:=cos((2*Pi*nk*(l0/4))/l);
  91.               m2[1,2]:=nk1*sin((2*Pi*nk*(l0/4))/l);
  92.               m2[2,1]:=nk2*sin((2*Pi*nk*(l0/4))/l);
  93.               m2[2,2]:=cos((2*Pi*nk*(l0/4))/l);
  94. Ms[1,1]:=m1[1,1]*m2[1,1]-m1[1,2]*m2[2,1];
  95. Ms[1,2]:=m1[1,1]*m2[1,2]+m1[1,2]*m2[2,2];
  96. Ms[2,1]:=m1[2,1]*m2[1,1]+m1[2,2]*m2[2,1];
  97. Ms[2,2]:=-m1[2,1]*m2[1,2]+m1[2,2]*m2[2,2];
  98. for k:=3 to j-1 do
  99. begin
  100. if a[k]<>0 then begin  nk:=nn*a[k]; nk1:=1/nn; nk2:=nn; end;
  101. if b[k]<>0 then begin  nk:=nv*b[k]; nk1:=1/nv; nk2:=nv; end;
  102. if u[k]<>0 then begin  nk:=nu*u[k]; nk1:=1/nu; nk2:=nu; end;
  103. if e[k]<>0 then begin  nk:=ne*e[k]; nk1:=1/ne; nk2:=ne; end;
  104.               m2[1,1]:=cos((2*Pi*nk*(l0/4))/l);
  105.               m2[1,2]:=nk1*sin((2*Pi*nk*(l0/4))/l);
  106.               m2[2,1]:=nk2*sin((2*Pi*nk*(l0/4))/l);
  107.               m2[2,2]:=cos((2*Pi*nk*(l0/4))/l);
  108. M[1,1]:=Ms[1,1]*m2[1,1]-Ms[1,2]*m2[2,1];
  109. M[1,2]:=Ms[1,1]*m2[1,2]+Ms[1,2]*m2[2,2];
  110. M[2,1]:=Ms[2,1]*m2[1,1]+Ms[2,2]*m2[2,1];
  111. M[2,2]:=-Ms[2,1]*m2[1,2]+Ms[2,2]*m2[2,2];
  112. Ms[1,1]:=M[1,1];
  113. Ms[1,2]:=M[1,2];
  114. Ms[2,1]:=M[2,1];
  115. Ms[2,2]:=M[2,2];
  116. end;
  117. T:=4/(2+(ns/np)*Sqr(M[1,1])+(np/ns)*Sqr(M[1,2])+ns*np*Sqr(M[2,1])+Sqr(M[2,2])/(ns*np));
  118. //T:=4/(2+(np/ns)*Sqr(M[1,1])+(ns/np)*Sqr(M[1,2])+ns*np*Sqr(M[2,1])+Sqr(M[2,2])/(ns*np));
  119. //T:=4/(2+(ns/np)*Sqr(M[1,1])+ns*np*Sqr(M[2,2])+Sqr(M[2,1])/(ns*np)+ns*np*Sqr(M[1,2]));
  120. //T:=(4*ns*np)/(Sqr((M[1,1]+np*M[1,2])*ns+M[2,1]+M[2,2]*np));
  121. if T>1 then goto labl;
  122. Series3.AddXY(l,100*T,'',clRed);
  123. labl: l:=l+dl;
  124. until l>=lmax;
  125.  
  126. //ProgressBar1.Position:=100*Current div Count;
  127. Form4.ShowModal;
  128. end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement