Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ÐÎÇÐÀÕÓÍÎÊ ÏÀÐÀÌÅÒв ԲËÜÒÐÀ
- procedure TForm1.Button1Click(Sender: TObject);
- label labl,l1;
- var Current,Count,i,j,k: Integer;
- lmin,lmax,l0,dl,l,T,dT,ns,np,nn,nv,nu,ne,nk,nk1,nk2: Real;
- F1: TextFile;
- ll,TT,zapis: String;
- Ms,M,m1,m2: array[1..2,1..2] of Real;
- s,str: String;
- a,b,u,e: array[0..100] of Real;
- begin
- Series1.Clear;
- Series2.Clear;
- Series3.Clear;
- lmin:=StrToFloat(Edit1.Text);
- lmax:=StrToFloat(Edit2.Text);
- l0:=StrToFloat(Edit3.Text);
- dl:=StrToFloat(Edit4.Text);
- ns:=StrToFloat(Edit8.Text);
- np:=StrToFloat(Edit9.Text);
- nn:=StrToFloat(Edit10.Text);
- nv:=StrToFloat(Edit11.Text);
- nu:=StrToFloat(Edit13.Text);
- ne:=StrToFloat(Edit14.Text);
- //ÏÎÁÓÄÎÂÀ ÇÐÀÇÊÎÂί ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ
- l:=lmin; T:=0; dT:=5;
- While (lmin<=l)and(l<=l0-10*dl) do
- begin
- Series1.AddXY(l,0,'',clRed); l:=l+dl;
- end;
- While (l0-10*dl<l)and(l<=l0+10*dl) do
- begin
- Series1.AddXY(l,T,'',clBlue); l:=l+dl; T:=T+dT;
- end;
- While (l0+10*dl<l)and(l<=lmax) do
- begin
- Series1.AddXY(l,100,'',clRed); l:=l+dl;
- end;
- //ÏÎÁÓÄÎÂÀ ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ Ç MATLAB
- {AssignFile(F1,'Data1.txt');
- Reset(F1);
- repeat
- Readln(F1,zapis);
- ll:=Copy(zapis,1,5); Delete(zapis,1,10); TT:=Copy(zapis,1,5);
- Series2.AddXY(StrToFloat(ll),100*StrToFloat(TT),'',clGreen);
- until EOF(F1);
- CloseFile(F1); }
- //*****ÏÎÁÓÄÎÂÀ ÍÎÂί ÕÀÐÀÊÒÅÐÈÑÒÈÊÈ***** aHbB...
- s:=Edit12.Text; i:=1; j:=1;
- repeat //âèçíà÷åííÿ ñòðóêòóðè ô³ëüòðà
- if (s[i]='0')or(s[i]='1')or(s[i]='2')or(s[i]='3')or(s[i]='4')
- or(s[i]='5')or(s[i]='6')or(s[i]='7')or(s[i]='8')or(s[i]='9') then
- begin
- str:='';
- if s[i+1]='H' then begin a[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
- if s[i+1]='B' then begin b[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
- if s[i+1]='A' then begin u[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
- if s[i+1]='E' then begin e[j]:=StrToFloat(s[i]); i:=i+2; goto l1; end;
- if s[i+1]=',' then
- begin
- str:=s[i]+','+s[i+2];
- if s[i+3]='H' then begin a[j]:=StrToFloat(str); i:=i+4; goto l1; end;
- if s[i+3]='B' then begin b[j]:=StrToFloat(str); i:=i+4; goto l1; end;
- if s[i+3]='A' then begin u[j]:=StrToFloat(str); i:=i+4; goto l1; end;
- if s[i+3]='E' then begin e[j]:=StrToFloat(str); i:=i+4; goto l1; end;
- end;
- end;
- if s[i]='H' then a[j]:=1;
- if s[i]='B' then b[j]:=1;
- if s[i]='A' then u[j]:=1;
- if s[i]='E' then e[j]:=1;
- i:=i+1;
- l1: j:=j+1;
- until s[i]='';
- //ðîçðàõóíîê õàðàêòåðèñòè÷íî¿ ìàòðèö³ ³ ïîáóäîâà ãðàô³êà ñïåêòð. õàðàêòåðèñòèêè
- l:=lmin;
- repeat
- if a[1]<>0 then begin nk:=nn*a[1]; nk1:=1/nn; nk2:=nn; end;
- if b[1]<>0 then begin nk:=nv*b[1]; nk1:=1/nv; nk2:=nv; end;
- if u[1]<>0 then begin nk:=nu*u[1]; nk1:=1/nu; nk2:=nu; end;
- m1[1,1]:=cos((2*Pi*nk*(l0/4))/l);
- m1[1,2]:=nk1*sin((2*Pi*nk*(l0/4))/l);
- m1[2,1]:=nk2*sin((2*Pi*nk*(l0/4))/l);
- m1[2,2]:=cos((2*Pi*nk*(l0/4))/l);
- if a[2]<>0 then begin nk:=nn*a[2]; nk1:=1/nn; nk2:=nn; end;
- if b[2]<>0 then begin nk:=nv*b[2]; nk1:=1/nv; nk2:=nv; end;
- if u[2]<>0 then begin nk:=nu*u[2]; nk1:=1/nu; nk2:=nu; end;
- m2[1,1]:=cos((2*Pi*nk*(l0/4))/l);
- m2[1,2]:=nk1*sin((2*Pi*nk*(l0/4))/l);
- m2[2,1]:=nk2*sin((2*Pi*nk*(l0/4))/l);
- m2[2,2]:=cos((2*Pi*nk*(l0/4))/l);
- Ms[1,1]:=m1[1,1]*m2[1,1]-m1[1,2]*m2[2,1];
- Ms[1,2]:=m1[1,1]*m2[1,2]+m1[1,2]*m2[2,2];
- Ms[2,1]:=m1[2,1]*m2[1,1]+m1[2,2]*m2[2,1];
- Ms[2,2]:=-m1[2,1]*m2[1,2]+m1[2,2]*m2[2,2];
- for k:=3 to j-1 do
- begin
- if a[k]<>0 then begin nk:=nn*a[k]; nk1:=1/nn; nk2:=nn; end;
- if b[k]<>0 then begin nk:=nv*b[k]; nk1:=1/nv; nk2:=nv; end;
- if u[k]<>0 then begin nk:=nu*u[k]; nk1:=1/nu; nk2:=nu; end;
- if e[k]<>0 then begin nk:=ne*e[k]; nk1:=1/ne; nk2:=ne; end;
- m2[1,1]:=cos((2*Pi*nk*(l0/4))/l);
- m2[1,2]:=nk1*sin((2*Pi*nk*(l0/4))/l);
- m2[2,1]:=nk2*sin((2*Pi*nk*(l0/4))/l);
- m2[2,2]:=cos((2*Pi*nk*(l0/4))/l);
- M[1,1]:=Ms[1,1]*m2[1,1]-Ms[1,2]*m2[2,1];
- M[1,2]:=Ms[1,1]*m2[1,2]+Ms[1,2]*m2[2,2];
- M[2,1]:=Ms[2,1]*m2[1,1]+Ms[2,2]*m2[2,1];
- M[2,2]:=-Ms[2,1]*m2[1,2]+Ms[2,2]*m2[2,2];
- Ms[1,1]:=M[1,1];
- Ms[1,2]:=M[1,2];
- Ms[2,1]:=M[2,1];
- Ms[2,2]:=M[2,2];
- end;
- 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));
- //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));
- //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]));
- //T:=(4*ns*np)/(Sqr((M[1,1]+np*M[1,2])*ns+M[2,1]+M[2,2]*np));
- if T>1 then goto labl;
- Series3.AddXY(l,100*T,'',clRed);
- labl: l:=l+dl;
- until l>=lmax;
- //ProgressBar1.Position:=100*Current div Count;
- Form4.ShowModal;
- end;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement