ня рівняння (6.1), в іншому випадку алгоритм буде працювати нестабільно, можливо, нескінченне зациклення, або буде знайдена зовсім інша висота z, яка теж є рішенням рівняння (6.1). Щоб уникнути цих неприємностей, потрібно вибирати малий крок руху голки в напрямку осі OX, щоб z1 близько знаходилося до рішення рівняння (6.1). z2 слід вибирати, як
z2=z1 +? , Якщо I1> Iет, 2=z1 -?, Якщо I1 < Iет (8.4)
У цього методу є наступні недоліки:
· малий крок уздовж осі OX означає велику кількість обчислень, а отже програш у швидкості обчислень;
· вимога малого кроку - є необхідною, але недостатньою умовою збіжності методу січних т.к. по мірі просування голки уздовж осі OX все ж можливі великі скачки значень тунельного струму через нерівномірність поверхні. Це може привести до затягування ітераційного процесу, що неминуче спричиняє втрату продуктивності.
7. Лістинг програми та отримання СТМ-профілограми
unit CTM;
, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,, StdCtrls, ExtCtrls, ComCtrls;
N=10000;=0.01;=5.71;=1;=385;=4.5;=array [1 .. 2] of real;=array [0 .. Np] of TPoint;= class (TForm): TButton;: TImage;: TLabel;: TMemo;: TLabel;: TLabel;: TLabel;: TComboBox; Button1Click (Sender: TObject); FormCreate (Sender: TObject); ReadFromFile; jz (x: real; y: real; z: real): real; Integral (xn, xm, yn, ym, z: real): real; GetJ (xp: real; zp: real): real; GetPrfgrm: Tprfgrm; InitPov;
{Public declarations};
: TForm1;: real;: array [1 .. 2] of real;: array [1 .. 2] of real;: array [1 .. 12] of TPoint;: Tprfgrm; : array [1 .. n] of Trndm;: integer;: TPoint;
{$ R *. dfm}
TForm1.jz (x: real; y: real; z:real):real;S1,S2,fi,Zxy:real;:=sqrt(sqr(z)+sqr(x)+sqr(y));:=3/(k*fi0);:=Zxy*(1-23/(3*fi0*k*Zxy+10-2*U*k*Zxy))+S1;:=fi0-U*(S1+S2)/(2*Zxy)- 2.86 / (k * (S2-S1)) * ln (S2 * (Zxy-S1) / (S1 * (Zxy-
S2)));:=1620 * U * Ef * exp ((- 1.025) * Zxy * sqrt (fi));; TForm1.Integral (xn, xm, yn, ym, z : real): real; a: array [1 .. 2] of real;: array [1 .. 2] of real;: real;: real;, j, k: integer;: array [1 .. 2] of real;: boolean; [1]:=xm; a [1]:=xn; [2]:=ym; a [2]:=yn;:=1; sum:=0;:=0; i:=1 to 2 do:=V * (b [i]-a [i]); i:=1 to N doj:=1 to 2 do [j]:= a [j] + (b [j]-a [j]) * M [i, j];:=true; j:=1 to 2 do (x [j] b [j]) then:=false; p then:=sum + jz (x [1], x [2], z);;:=sum * V / N;:=sum;;
TForm1.GetJ (xp: real; zp: real): real; Max=10; xn, xm, yn, ym, z, J: real;: array [1 .. 11] of boolean;: integer;: =-Max; ym:=Max;:=0; i:=1 to 11 do begin [i]:=false; ((abs (pov [i]. x-xp) <= Max) and ((abs (pov [i ]. y)-zp) <= Max)) or
((abs(pov[i+1].x-xp)<=Max)and((abs(pov[i+1].y)-zp)<=Max))then[i]:=true;;vidim[1] thenzp> 0 then:=pov [1]. x-xp; if xn> Max then xn:=Max;:=pov [2]. x-xp; if xm> Max then xm:=Max;:=zp;:=J + Integral (xn, xm, yn, ym, z);; vidim [2] thenzp> xp-pov [2]. x then:=(zp-(xp-pov[2].x))*cos(PI/4);:=(pov[2].x-(xp+z*cos(PI/4)))/cos(PI/4);:=(pov[3].x-(xp+z*cos(PI/4)))/cos(PI/4);xn>Max then xn:=Max; xm> Max then xm:=Max;:=J + Integral (xn, xm, yn, ym, z);; vidim [3] thenzp> pov [3]. y...