2_results (732181), страница 4

Файл №732181 2_results (Решение обратной задачи вихретокового контроля) 4 страница2_results (732181) страница 42016-08-01СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 4)

writeln('***********************************************************');

end;

procedure done; {final message}

begin

Sound(222); Delay(111); Sound(444); Delay(111); NoSound; {beep}

write('* Task processing time '); clock; saveTime;

writeln('* Status: Inverse problem has been successfully evaluated.');

end;

Begin

about;

loadData;

initParameters;

directTask;

for m:=1 to mLast do

begin

if fMulti then

begin

mCur:=m;

clockMessage;

end;

doMinimization; {main part of work}

setApproximationData( Rg, mCur ); {set new approx. data}

resultMessage;

if(( fMulti )AND( m < nPoints ))then reduceSILimits;

end;

done;

End.

П1.5 Модуль глобальных данных EData

Unit EData;

Interface

Uses DOS;

Const

maxPAR = 40; {nodes of approximation max number}

maxFUN = 20; {excitation frequencies max number}

maxSPC = 4; {support approximation values number}

iterImax = 50; {max number of internal iterations}

Const

apSpline = 1; {approximation type identifiers}

apHypTg = 3;

apExp = 2;

apPWCon = 4;

apPWLin = 8;

Type

Parameters = array[ 1..maxPAR ] of real; {Si,Mu data}

Functionals = array[ 1..maxFUN ] of real; {Voltage data}

SpecialPar = array[ 1..maxSPC ] of real; {Special data}

Var

hThick : real; {thickness of slab}

nPoints : integer; {nodes of approximation number within [ 0,H ]}

nLayers : integer; {number of piecewise constant SI layers within[ 0,H ]}

nFreqs : integer; {number of excitation frequencies}

nStab : integer; {required number of true digits in SI estimation}

epsU : real; {relative error of measurement Uvn*}

nApprox : byte; {approximation type identifier}

incVal : real; {step for numerical differ.}

parMaxH : integer; {max number of integration steps}

parMaxX : real; {upper bound of integration}

parEps : real; {error of integration}

derivType: byte; {1 for right; 2 for central}

Var

freqs : Functionals; {frequencies of excitment Uvn*}

Umr, Umi : Functionals; { Re(Uvn*),Im(Uvn*) for "measured" data}

Uer, Uei : Functionals; { Re(Uvn*),Im(Uvn*) for estimated data}

mu : Parameters; {relative permeability nodal values}

si, si0 : Parameters; {conductivity approximation nodal values}

siMin, siMax : Parameters; {conductivity nodal values restrictions}

par0 : SpecialPar; {alfa,si2,beta,gamma - for exp&HypTg}

parMin,parMax: SpecialPar; {-||- min/max}

zLayer : Parameters; {relative borders of slab layers [0,1]}

Var

aG : real; {scale factor for SImin/max}

Ft : real; {current discrepancy functional value}

fMulti : boolean; {TRUE if it isn't an EXP-approximation}

fHypTg : boolean; {TRUE for Hyperbolic tg approximation}

parEqlB : boolean; {TRUE if b[i]=const}

mCur : integer; {current number of approximation nodes}

inFileName : string; {data file name}

outFileName : string; {results file name}

Var

Rg : Parameters; {current SI estimation}

RgS : Parameters; {previous SI estimation}

Gr : array [ 1..2 ,1..maxPAR ] of real; {SI max/min}

Fh : array [ 1..maxPAR , 1..maxFUN ] of real; {current discrepancies}

Type

TTime=record

H, M, S, S100 : word; {hour,min,sec,sec/100}

end;

Var

clk1, clk2 : TTime; {start&finish time}

procedure loadData; {load all user-defined data from file}

Implementation

procedure loadData;

var

i,eqlB : integer;

FF : text;

begin

assign( FF, outFileName ); {clear output file}

rewrite( FF );

close( FF );

assign( FF, inFileName ); {read input file}

reset( FF );

readln( FF );

readln( FF );

readln( FF, hThick, nPoints, nLayers, nFreqs, nStab, epsU, aG, nApprox );

readln( FF );

for i:=1 to nFreqs do read( FF, freqs[i] );

readln( FF );

readln( FF );

readln( FF );

for i:=1 to nPoints do readln( FF, si[i], siMin[i], siMax[i] );

readln( FF );

readln( FF );

readln( FF , incVal, parMaxH, parMaxX, parEps, derivType, eqlB );

readln( FF );

readln( FF );

for i:=1 to maxSPC do readln( FF, par0[i] , parMin[i] , parMax[i] );

readln( FF );

if ( eqlB=0 )then

begin

for i:=1 to nLayers+1 do read( FF, zLayer[i] );

parEqlB:=false;

end

else parEqlB:=true;

close( FF );

for i:=1 to maxPAR do mu[i]:=1;

end;

Var

str : string;

Begin

if( ParamCount = 1 )then str:=ParamStr(1)

else

begin

write('Enter I/O file name, please: ');

readln( str );

end;

inFileName :=str+'.txt';

outFileName:=str+'.lst';

End.

П1.6 Модуль работы с файлами EFile

Unit EFile;

Interface

Uses

DOS, EData;

function isStable( ns : integer; var RG1,RG2 ) : boolean;

function saveResults( ns,iter : integer ) : boolean;

procedure saveExpResults;

procedure saveHypTgResults;

procedure clock;

procedure saveTime;

Implementation

Var

FF : text;

i : byte;

function decimalDegree( n:integer ) : real;{10^n}

var

s:real; i:byte;

begin

s:=1;

for i:=1 to n do s:=s*10;

decimalDegree:=s;

end;

function isStable( ns:integer ; var RG1,RG2 ) : boolean;

var

m : real;

R1 : Parameters absolute RG1;

R2 : Parameters absolute RG2;

begin

isStable:=TRUE;

m:=decimalDegree( ns-1 );

for i:=1 to mCur do

begin

if NOT(( ABS( R2[i]-R1[i] )*m )<=ABS( R2[i]) ) then isStable:=FALSE;

RgS[i]:=Rg[i];

end;

end;

function saveResults( ns , iter : integer ) : boolean;

var

sum : real;

begin

sum:=0;

for i:=1 to nFreqs do sum:=sum + Fh[1,i];

sum:=SQRT( sum/nFreqs );

assign( FF , outFileName );

append( FF );

write( iter:2, ' ', sum:10:7, ' Rg=' );

write( FF , iter:2, ' ', sum:10:7, ' Rg=');

for i:=1 to mCur do

begin

write( Rg[i]:6:3, ' ');

write( FF , Rg[i]:6:3, ' ');

end;

writeln;

writeln( FF );

close( FF );

saveResults:=isStable( ns , Rgs , Rg );

end;

procedure saveExpResults;

begin

assign( FF , outFileName );

append( FF );

writeln( ' siE=',Rg[2]:6:3,' siI=',Rg[1]:6:3,' alfa=',Rg[3]:6:3);

writeln( FF , ' siE=',Rg[2]:6:3,' siI=',Rg[1]:6:3,' alfa=',Rg[3]:6:3);

write( ' SI: ');

write( FF , ' SI: ');

for i:=1 to nPoints do

begin

write( si[i]:6:3,' ');

write( FF , si[i]:6:3,' ');

end;

writeln;

writeln( FF );

close( FF );

end;

procedure saveHypTgResults;

begin

assign( FF , outFileName );

append( FF );

writeln( ' si1=',Rg[2]:6:3,' si2=',Rg[1]:6:3,' beta=',Rg[3]:6:3,' gamma=',Rg[4]:6:3);

writeln( FF , ' si1=',Rg[2]:6:3,' si2=',Rg[1]:6:3,' beta=',Rg[3]:6:3,' gamma=',Rg[4]:6:3);

write( ' SI: ');

write( FF , ' SI: ');

for i:=1 to nPoints do

begin

write( si[i]:6:3,' ');

write( FF , si[i]:6:3,' ');

end;

writeln;

writeln( FF );

close( FF );

end;

procedure clock; {t2 = t2-t1}

var

H1,M1,S1,H2,M2,S2,sec1,sec2 : longint;

begin

GetTime( clk2.H, clk2.M, clk2.S, clk2.S100 ); {current time}

H2:=clk2.H; M2:=clk2.M; S2:=clk2.S; H1:=clk1.H; M1:=clk1.M; S1:=clk1.S;

sec2:= ( H2*60 + M2 )*60 + S2;

sec1:= ( H1*60 + M1 )*60 + S1;

if( sec2 < sec1 )then sec2:=sec2 + 85020; {+23.59.59}

sec2:=sec2 - sec1;

clk2.H := sec2 div 3600; sec2:=sec2 - clk2.H*3600;

clk2.M := sec2 div 60; sec2:=sec2 - clk2.M*60;

clk2.S := sec2;

writeln( clk2.H:2, ':', clk2.M:2, ':', clk2.S:2 );

end;

procedure saveTime;

begin

assign( FF , outFileName );

append( FF );

write( FF ,'* Processing time ',clk2.H:2, ':', clk2.M:2, ':', clk2.S:2 );

close( FF );

end;

End.

П1.7 Модуль решения прямой задачи ВТК для НВТП EDirect

{****************************************************************************}

{ ERIN submodule : EDirect , 15.02.99, (C) 1999 by Nikita U.Dolgov }

{****************************************************************************}

{ Estimates Uvn* for Eddy current testing of inhomogeneous multilayer slab }

{ with surface( flat ) probe. }

{ It can do it using one of five types of conductivity approximation : }

{Spline, Exponential, Piecewise constant, Piecewise linear,Hyperbolic tangent}

{****************************************************************************}

{$F+}

Unit EDirect;

Interface

Uses EData, EMath;

Type

siFunc = function( x:real ) : real;

Var

getSiFunction : siFunc; {for external getting SI estimate}

procedure initConst( par1,par2:integer; par3,par4:real; par5:boolean );

procedure getVoltage( freq : real ; var ur,ui : real ); { Uvn* = ur + j*ui }

procedure setApproximationType( approx : byte ); { type of approx. }

procedure setApproximationItem( SIG:real ; N : byte ); { set SIGMA[ N ]}

procedure setApproximationData( var SIG; nVal : byte ); { SIGMA[1..nVal] }

procedure getApproximationData( var SIG ; var N : byte ); { get SIGMA[ N ]}

Implementation

Const

PI23 = 2000*pi; {2*pi*KHz}

mu0 = 4*pi*1E-7; {magnetic const}

Var

appSigma : Parameters; {conductivity approximation data buffer}

appCount : byte; {size of conductivity approximation data buffer}

appType : byte; {conductivity approximation type identifier}

Type

commonInfo=record

w : real; {cyclical excitation frecuency}

R : real; {equivalent radius of probe}

H : real; {generalized lift-off of probe}

Kr : real; {parameter of probe}

eps : real; {error of integration}

xMax : real; {upper bound of integration}

steps : integer; {current number of integration steps}

maxsteps: integer; {max number of integration steps}

Nlay : integer; {number of layers in slab}

sigma : Parameters; {conductivity of layers}

m : Parameters; {relative permeability of layers}

b : Parameters; {thickness of layers}

zCentre : Parameters; {centre of layer}

end;

procFunc = procedure( x:real; var result:complex);

Var

siB, siC, siD : Parameters; {support for Spline approx.}

cInfo : commonInfo; {one-way access low level info}

function siSpline( x:real ) : real;{Spline approximation}

begin

if( appCount = 1 )then

siSpline := appSigma[ 1 ]

else

siSpline:=Seval( appCount, x, appSigma, siB, siC, siD);

end;

function siExp( x:real ) : real;{Exponential approximation}

begin

siExp:=(appSigma[2]-appSigma[1])*EXP( -appSigma[3]*(1-x) ) + appSigma[1];

end;

function siPWConst( x:real ) : real;{Piecewise constant approximation}

var

dx, dh : real; i : byte;

begin

if( appCount = 1 )then siPWConst := appSigma[ 1 ]

else

begin

dh:=1/( appCount-1 );

dx:=dh/2;

i:=1;

while( x > dx ) do

begin

i:=i + 1;

dx:=dx + dh;

end;

siPWConst:=appSigma[ i ];

end;

end;

function siPWLinear( x:real ) : real;{Piecewise linear approximation}

var

dx, dh : real;

i : byte;

begin

if( appCount = 1 )then siPWLinear := appSigma[ 1 ]

else

begin

dh:=1/( appCount-1 );

dx:=0;

i:=1;

repeat

i:=i + 1;

dx:=dx + dh;

until( x <= dx );

siPWLinear:=appSigma[i-1]+( appSigma[i]-appSigma[i-1] )*( x/dh+2-i);

end;

end;

function siHyperTg( x:real ) : real;{Hyperbolic tangent approximation}

begin

siHyperTg:=appSigma[2]+(appSigma[1]-appSigma[2])*(1+th((appSigma[3]-x)/appSigma[4]))/2;

end;

procedure setApproximationType( approx : byte );

begin

appType := approx;

write('* conductivity approximation type : ');

case approx of

apSpline : begin

writeln('SPLINE');

getSiFunction := siSpline;

end;

apExp : begin

writeln('EXP');

getSiFunction := siExp;

end;

apPWCon : begin

writeln('PIECEWISE CONST');

getSiFunction := siPWConst;

end;

apPWLin : begin

writeln('PIECEWISE LINEAR');

getSiFunction := siPWLinear;

end;

apHypTg : begin

writeln('HYPERBOLIC TANGENT');

getSiFunction := siHyperTg;

end;

end;

end;

procedure setApproximationData( var SIG ; nVal : byte );

var

Sigma : Parameters absolute SIG; i:byte;

begin

appCount := nVal;

for i:=1 to nVal do appSigma[ i ]:=Sigma[ i ];

if( appType = apSpline )then Spline( appCount, appSigma, siB, siC, siD);

end;

procedure getApproximationData( var SIG ; var N : byte );

var

Sigma : Parameters absolute SIG; i:byte;

begin

N := appCount;

for i:=1 to appCount do Sigma[ i ]:=appSigma[ i ];

end;

procedure setApproximationItem( SIG:real ; N : byte );

begin

appSigma[ N ] := SIG;

if( appType = apSpline )then Spline( appCount, appSigma, siB, siC, siD);

end;

procedure functionFi( x:real ; var result:complex );{get boundary conditions function value}

var

beta : array[ 1..maxPAR ]of real;

q : array[ 1..maxPAR ]of complex;

fi : array[ 0..maxPAR ]of complex;

th , z1 , z2 , z3 , z4 , z5 , z6 , z7 : complex;

i : byte;

begin

mkComp( 0, 0, fi[0] );

with cInfo do

for i:=1 to Nlay do

begin

beta[i]:=R*sqrt( w*mu0*sigma[i] ); {calculation of beta}

mkComp( sqr(x), sqr(beta[i])*m[i], z7 ); {calculation of q, z7=q^2}

SqrtC( z7, q[i] );

mulComp( q[i], b[i], z6 ); {calculation of th,z6=q*b}

tanH( z6, th ); {th=tanH(q*b)}

mkComp( sqr(m[i])*sqr(x), 0, z6 ); {z6=m2x2}

SubC( z6, z7, z5); {z5=m2x2-q2}

AddC( z6, z7, z4); {z4=m2x2+q2}

MulC( z5, th, z1); {z1=z5*th}

MulC( z4, th, z2); {z2=z4*th}

mulComp( q[i], 2*x*m[i], z3 ); {z3=2xmq}

SubC( z2, z3, z4 );

MulC( z4, fi[i-1], z5 );

SubC( z1, z5, z6 ); {z6=high}

AddC( z2, z3, z4 );

MulC( z1, fi[i-1], z5 );

SubC( z4, z5, th ); {th=low}

DivC( z6, th, fi[i] );

end;

eqlComp( result, fi[ cInfo.Nlay ] );

end;

procedure funcSimple( x:real; var result:complex );{intergrand function value}

var

z : complex;

begin

with cInfo do

begin

functionFi( x, result );

mulComp( result, exp( -x*H ), z );

mulComp( z, J1( x*Kr ), result );

mulComp( result, J1( x/Kr ), z );

eqlComp( result, z );

end;

end;

procedure funcMax( x:real; var result:complex );{max value; When Fi[Nlay]=1}

var

z1, z2 : complex;

begin

with cInfo do

begin

mkComp( 1,0,z1 );

mulComp( z1, exp(-x*H), z2 );

mulComp( z2, J1( x*Kr ), z1 );

mulComp( z1, J1( x/Kr ), result );

end;

end;

procedure integralBS( func:procFunc ; var result:complex );{integral by Simpson}

var

z , y , tmp : complex;

hh : real;

i, iLast : word;

begin

with cInfo do

begin

hh:=xMax/steps;

iLast:=steps div 2;

nullComp(tmp);

func( 0, z );

eqlComp( y, z );

for i:=1 to iLast do

begin

func( ( 2*i-1 )*hh , z );

deltaComp( tmp, z );

end;

mulComp( tmp, 4, z );

deltaComp( y, z );

nullComp( tmp );

iLast:=iLast-1;

for i:=1 to iLast do

begin

func( 2*i*hh ,z );

deltaComp( tmp, z );

end;

mulComp( tmp, 2, z );

deltaComp( y, z );

func( xmax, z );

deltaComp(y,z);

mulComp( y, hh/3, z );

eqlComp( result, z );

end;

end;{I = h/3 * [ F0 + 4*sum(F2k-1) + 2*sum(F2k) + Fn ]}

procedure integral( F:procFunc; var result:complex );{integral with given error}

var

e , e15 : real;

flag : boolean;

delta , integ1H , integ2H : complex;

begin

with cInfo do

begin

e15 :=eps*15;{ | I2h-I1h |/(2^k -1 )< Eps ; k=4 for Simpson method}

steps:=20;

flag :=false;

integralBS( F, integ2H );

repeat

eqlComp( integ1H, integ2H );

steps:=steps*2;

integralBS( F, integ2H );

SubC( integ2H, integ1H, delta );

e:=Leng( delta );

if( e

until( ( flag ) OR (steps>maxsteps) );

if( flag )then

begin

eqlComp( result, integ2H );

end

else

begin

writeln('Error: Too big number of integration steps.');

halt(1);

end;

end;

end;

procedure initConst( par1, par2 : integer; par3, par4 : real; par5:boolean );

var

i : byte;

bThick, dl, x : real;

const

Ri=0.02; hi=0.005; { radius and lift-off of excitation coil}

Rm=0.02; hm=0.005; { radius and lift-off of measuring coil}

begin

with cInfo do

begin

Nlay :=par1;

xMax :=par3;

maxsteps:=par2;

R :=sqrt( Ri*Rm );

H :=( hi+hm )/R;

Kr :=sqrt( Ri/Rm );

eps :=par4;

bThick :=hThick*0.002/R; {2*b/R [m]}

for i:=1 to Nlay do m[i]:= mu[i];

if par5 then

begin

bThick:=bThick/NLay;

for i:=1 to Nlay do b[i]:=bThick;

dl:=1/NLay;

x:=dl/2; {x grows up from bottom of slab to the top}

for i:=1 to Nlay do

begin

zCentre[i]:=x;

x:=x + dl;

end;

end

else

for i:=1 to Nlay do

begin

b[i]:=( zLayer[i+1]-zLayer[i] )*bThick;

zCentre[i]:=( zLayer[i+1]+zLayer[i] )/2;

end;

end;

end;

procedure init( f:real );{get current approach of conductivity values}

var

i : byte;

begin

with cInfo do

begin

w:=PI23*f;

for i:=1 to Nlay do sigma[i]:=getSiFunction( zCentre[i] )*1E6;

end;

end;

procedure getVoltage( freq : real ; var ur,ui : real );

var

U, U0, Uvn, tmp : complex;

begin

init( freq );

integral( funcSimple, U ); { U =Uvn }

integral( funcMax , U0 ); { U0=Uvn max }

divComp( U, Leng(U0), Uvn ); { Uvn=U/|U0| }

mkComp( 0, 1, tmp ); { tmp=( 0+j1 ) }

MulC( tmp, Uvn, U ); { U= j*Uvn = Uvn* }

ur := U.re;

ui := U.im;

end;

END.

П1.8 Модуль решения обратной задачи ВТК для НВТП EMinimum

Unit EMinimum;

INTERFACE

Uses EData, Crt, EFile, EDirect;

procedure doMinimization;

IMPLEMENTATION

procedure getFunctional( Reg : byte );

var

ur, ui, dur, dui, Rgt : real;

ur2, ui2: Functionals;

i, j, k : byte;

begin

getApproximationData( si , k );

setApproximationData( Rg, mCur );

case Reg of

0 : for i:=1 to nFreqs do {get functional F value}

begin

getVoltage( freqs[i], ur, ui );

Uer[ i ]:=ur; {we need it for dU}

Uei[ i ]:=ui;

Fh[1,i] := SQR( ur-Umr[i] ) + SQR( ui-Umi[i] );

end;

{Right:U'(i)= (U(i+1)-U(i))/h}

1 : for i:=1 to mCur do {get dF/dSI[i] value}

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

begin {get dUr/dSI,dUi/dSI}

getVoltage( freqs[ j ], ur, ui );

dur:=( ur-Uer[j] )/( Rg[i]*incVal );

dui:=( ui-Uei[j] )/( 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;

{Central:U'(i)= (U(i+1)-U(i-1))/2h}

2 : for i:=1 to mCur do {get dF/dSI[i] value}

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]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

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

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.



56


Характеристики

Тип файла
Документ
Размер
148 Kb
Тип материала
Предмет
Учебное заведение
Неизвестно

Список файлов реферата

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6763
Авторов
на СтудИзбе
282
Средний доход
с одного платного файла
Обучение Подробнее