⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bsstep.txt

📁 《Delphi常用数值算法集》的配书源码
💻 TXT
字号:
procedure BSSTEP(var Y, DYDX:array of real; NV:integer; var X1:real;
                HTRY, EPS:real;YSCAL:array of real; var HDID, HEND:real);
label 1;
const
    IMAX = 11;  NUSE = 7;  ONE = 1;  SHRINK = 0.95;  GROW = 1.2;
var
    I,J:integer;   H,XSAV,XEST,ERRMAX:real;
    YERR,YSAV,DYSAV,YSEQ:array[0..10] of real;
    NSEQ:array[0..11] of integer;
begin
    NSEQ[1]:=2;   NSEQ[2]:=4;   NSEQ[3]:=6;  NSEQ[4]:=8;  NSEQ[5]:=12;
    NSEQ[6]:=16;  NSEQ[7]:=24;  NSEQ[8]:=32; NSEQ[9]:=48;
    NSEQ[10]:=64; NSEQ[11]:=96;
    H:=HTRY;
    XSAV:=X1;
    For I:=1 To NV do
    begin
        YSAV[I]:=Y[I];
        DYSAV[I]:=DYDX[I];
    end;
1:  For I:=1 To IMAX do
    begin
        MMID(YSAV, DYSAV, NV, XSAV, H, NSEQ[I], YSEQ);
        XEST:=Sqr(H / NSEQ[I]);
        RZEXTR(I, XEST, YSEQ, Y, YERR, NV, NUSE);
        ERRMAX:=0;
        For J:=1 To NV do
            If Abs(YERR[J] / YSCAL[J]) > ERRMAX Then
                ERRMAX:=Abs(YERR[J] / YSCAL[J]);
        ERRMAX:=ERRMAX / EPS;
        If ERRMAX < ONE Then
        begin
            X1:=X1 + H;
            HDID:=H;
            If I = NUSE Then
                HEND:=H * SHRINK
            Else
            begin
                If I = NUSE - 1 Then
                    HEND:=H * GROW
                Else
                    HEND:=(H * NSEQ[NUSE - 1]) / NSEQ[I];
            end;
            Exit;
        end;
    end;
    H:=0.25 * H / Exp(((IMAX - NUSE) div 2)*Ln(2));
    if X1 + H = X1  then  ShowMessage(' Step size underflow');
    goto 1;
end;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -