begin
Rgt:=Rg[i]*( 1+incVal ); {si[i]=si[i]+dsi[i]}
setApproximationItem( Rgt, i ); {set new si[i] value}
for j:=1 to nFreqs do getVoltage( freqs[j],ur2[j],ui2[j] );
Rgt:=Rg[i]*( 1-incVal ); {si[i]=si[i]-dsi[i]}
setApproximationItem( Rgt, i ); {set new si[i] value}
for j:=1 to nFreqs do
begin {get dUr/dSI,dUi/dSI}
getVoltage( freqs[ j ], ur, ui );
dur:=( ur2[j]-ur )/( 2*Rg[i]*incVal );
dui:=( ui2[j]-ui )/( 2*Rg[i]*incVal );
Fh[i,j]:=2*(dur*(Uer[j]-Umr[j])+dui*(Uei[j]-Umi[j]));
end;
setApproximationItem( Rg[i], i ); {restore si[i] value}
end;
end;
setApproximationData( si , k );
end;
procedure doMinimization;
const
mp1Max = maxPAR + 1;
mp2Max = maxPAR + 2;
m2Max = 2*( maxPAR + maxFUN );
m21Max = m2Max + 1;
n2Max = 2*maxFUN;
m1Max = maxPAR + n2Max;
n1Max = n2Max + 1;
mm1Max = maxPAR + n1Max;
minDh : real = 0.001; {criterion of an exit from golden section method}
var
A : array [ 1 .. m1Max , 1 .. m21Max ] of real;
B : array [ 1 .. m1Max] of real;
Sx: array [ 1 .. m21Max] of real;
Zt: array [ 1 .. maxPAR] of real;
Nb: array [ 1 .. m1Max] of integer;
N0: array [ 1 .. m21Max] of integer;
a1, a2, dh, r, tt, tp, tl, cv, cv1, cl, cp : real;
n2, n1, mp1, mp2, mm1, m1, m2, m21 : integer;
ain : real;
apn : real;
iq : integer;
k1 : integer;
n11 : integer;
ip : integer;
iterI : integer;
i,j,k : integer;
label
102 ,103 ,104 ,105 ,106 ,107 ,108;
begin
n2:=2*nFreqs; n1:=n2+1; m1:=mCur+n2;
mp1:=mCur+1; mp2:=mCur+2; mm1:=mCur+n1;
m2:=2*( mCur+nFreqs ); m21:=m2+1;
for k:=1 to m1Max do
for i:=1 to m21Max do
A[k,i]:=0;
iterI:=0;
102:
iterI:=iterI+1;
getFunctional( 0 );
for i:=1 to nFreqs do b[i]:= -Fh[1,i];
getFunctional( derivType );
for k:=1 to mCur do
begin
Zt[k]:=Rg[k];
for i:=1 to nFreqs do
begin
A[i,k+1]:=Fh[k,i];
A[i+nFreqs,k+1]:=-A[i,k+1];
end;
for i:=1 to nFreqs do B[i]:=B[i]+Rg[k]*A[i,k+1];
end;
for i:=1 to nFreqs do B[i+nFreqs]:=-B[i];
for i:=n1 to m1 do B[i]:=Gr[1,i-n2]-Gr[2,i-n2];
for i:=1 to m1 do
begin
if i<=n2 then
for k:=2 to mp1 do B[i]:=B[i]-A[i,k]*Gr[2,k-1];
A[i,1]:=-1;
if i>n2 then
begin
A[i,1]:=0;
for k:=2 to mp1 do
if i-n2=k-1 then A[i,k]:=1
else A[i,k]:=0;
end;
for k:=mp2 to m21 do
if k-mp1=i then A[i,k]:=1
else A[i,k]:=0;
end;
k1:=1;
for k:=1 to n2 do
if B[k1]>B[k] then k1:=k;
for k:=1 to mp1 do A[k1,k]:=-A[k1,k];
A[k1,mCur+1+k1]:=0;
B[k1]:=-B[k1];
for i:=1 to n2 do
if i<>k1 then
begin
B[i]:=B[i]+B[k1];
for k:=1 to mm1 do A[i,k]:=A[i,k]+A[k1,k];
end;
for i:=mp2 to m21 do
begin
Sx[i]:=B[i-mp1];
Nb[i-mp1]:=i;
end;
for i:=1 to mp1 do Sx[i]:=0;
Sx[1]:=B[k1];
Sx[mp1+k1]:=0;
Nb[k1]:=1;
103:
for i:=2 to m21 do N0[i]:=0;
104:
for i:=m21 downto 2 do
if N0[i]=0 then n11:=i;
for k:=2 to m21 do
if ((A[k1,n11]<A[k1,k]) AND (k<>N0[k])) then n11:=k;
if A[k1,n11]<=0 then goto 105;
iq:=0;
for i:=1 to m1 do
if i<>k1 then
begin
if A[i,n11]>0 then
begin
iq:=iq+1;
if iq=1 then
begin
Sx[n11]:=B[i]/A[i,n11]; ip:=i;
end
else
begin
if Sx[n11]>B[i]/A[i,n11] then
begin
Sx[n11]:=B[i]/A[i,n11]; ip:=i;
end;
end;
end
else
if iq=0 then
begin
N0[n11]:=n11;
goto 104;
end;
end;
Sx[Nb[ip]]:=0;
Nb[ip]:=n11;
B[ip]:=B[ip]/A[ip,n11];
apn:=A[ip,n11];
for k:=2 to m21 do A[ip,k]:=A[ip,k]/apn;
for i:=1 to m1 do
if i<>ip then
begin
ain:=A[i,n11];
B[i]:=-B[ip]*ain+B[i];
for j:=1 to m21 do A[i,j]:=-ain*A[ip,j]+A[i,j];
end;
for i:=1 to m1 do Sx[Nb[i]]:=B[i];
goto 103;
105:
for k:=1 to mCur do Sx[k+1]:=Sx[k+1]+Gr[2,k];
a1:=0;
a2:=1.;
dh:=a2-a1;
r:=0.618033;
tl:=a1+r*r*dh;
tp:=a1+r*dh;
j:=1;
108:
if j=1 then tt:=tl else tt:=tp;
106:
for i:=1 to mCur do Rg[i]:=Zt[i]+tt*(Sx[i+1]-Zt[i]);
getFunctional( 0 );
cv:=abs(Fh[1,1]);
if nFreqs>1 then
for k:=2 to nFreqs do
begin
cv1:=abs(Fh[1,k]);
if cv<cv1 then cv:=cv1;
end;
if (j=1) or (j=3) then cl:=cv
else cp:=cv;
if j=1 then
begin
j:=2;
goto 108;
end;
if dh<MinDh then goto 107;
if cl>cp then
begin
a1:=tl; dh:=a2-a1; tl:=tp; tp:=a1+r*dh ; tt:=tp; cl:=cp; j:=4;
end
else
begin
a2:=tp; dh:=tp-a1; tp:=tl; tl:=a1+r*r*dh; tt:=tl; cp:=cl; j:=3;
end;
goto 106;
107:
if (iterI < iterImax)AND(NOT saveResults( nStab,iterI )) then goto 102;
end;
End.
Приложение 2 - Удельная электрическая проводимость материалов
Приведем сводку справочных данных согласно[7-9].
Материал
smin ,[МСм/м]
smax ,[МСм/м]
Немагнитные стали
0.4
1.8
Бронзы (БрБ, Бр2, Бр9)
6.8
17
Латуни (ЛС59, ЛС62)
13.5
17.8
Магниевые сплавы (МЛ5-МЛ15)
5.8
18.5
Титановые сплавы (ОТ4, ВТ3-ВТ16)
0.48
2.15
Алюминиевые сплавы (В95, Д16, Д19)
15.1
26.9
Приложение 4 - Abstract
The inverse eddy current problem can be described as the task of reconstructing an unknown distribution of electrical conductivity from eddy-current probe voltage measurements recorded as function of excitation frequency. Conductivity variation may be a result of surface processing with substances like hydrogen and carbon or surface heating.
Mathematical reasons and supporting software for inverse conductivity profiling were developed by us. Inverse problem was solved for layered plane and cylindrical conductors.
Because the inverse problem is nonlinear, we propose using an iterative algorithm which can be formalized as the minimization of an error functional related to the difference between the probe voltages theoretically predicted by the direct problem solving and the measured probe voltages.
Numerical results were obtained for some models of conductivity distribution. It was shown that inverse problem can be solved exactly in case of correct measurements. Good estimation of the true conductivity distribution takes place also for measurement noise about 2 percents but in case of 5 percent error results are worse.
Страницы: 1, 2, 3, 4, 5, 6, 7, 8