国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

實用算法(基礎算法-遞推法-02)

2019-11-17 05:32:41
字體:
來源:轉載
供稿:網友



順推法
    倒推法的逆過程就是順推法,即由邊界條件出發,通過遞推關系式推出后項值,再由后項值按遞推關系式推出再后項值......,依次遞推,直至從問題初始陳述向前推進到這個問題的解為止。
    實數數列:一個實數數列共有N項,已知
            ai=(ai-1-ai+1)/2+d,   (1<i<N)(N<60)
    鍵盤輸入N,d,a1,an,m,輸出am
    輸入數據均不需判錯。
算法分析:
    分析該題,對公式:
        Ai=(Ai-1-Ai+1)/2+d         (1<i<N)     (n<60)
    作一翻推敲,探討其數字變換規律。不然的話會無從下手。
    令 X=A2   s2[i]=(pi,Qi,Ri)表示Ai=PiX+QiD+RiA1
    我們可以根據
        Ai=Ai-2-2Ai-1+2D
          =PiX+QiD+RiA1
    推出公式
        PiX+QiD+RiA1=(Pi-2-2Pi-1)X+(Qi-2-2Qi-1+2)D+(Ri-2-2Ri-1)A1
    比較等號兩端X,D和A1的系數項,可得
        Pi=Pi-2-2Pi-1
        Qi=Qi-2-2Qi-1+2
        Ri=Ri-2-2Ri-1
    加上兩個邊界條件
        P1=0    Q1=0    R1=1    (A1=A1)
        P2=1    Q2=0    R2=0    (A2=A2)
    根據Pi、Qi、Ri的遞推式,可以計算出
        S2[1]=(0,0,1);
        S2[3]=(-2,2,1);
        S2[4]=(5,-2,-2);
        S2[5]=(-12,8,5);
        ...................
        S2[i]=(Pi,Qi,Ri);
        ...................
        S2[N]=(PN,QN,RN);
    有了上述基礎,AM便不難求得。有兩種方法:
    1、由于AN、A1和PN、QN、RN已知,因此可以先根據公式:
        A2=AN-QND-RNA1/PN
    求出A2。然后將A2代入公式
        A3=A1-2A2+2D
    求出A3。然后將A3代入公式
        A4=A2-2A3+2D
    求出A4。然后將A4代入公式
    ............................
    求出Ai-1。然后將Ai-1代入公式
        Ai=Ai-2-2Ai-1+2D
    求出Ai。依此類推,直至遞推至AM為止。
    上述算法的缺陷是由于A2是兩數相除的結果,而除數PN遞增,因此精度誤差在所難免,以后的遞推過程又不斷地將誤差擴大,以至當M超過40時,求出的AM明顯徧離正確值。顯然這種方法簡單但不可靠。
    2、我們令A2=A2,A3=X,由S3[i]=(Pi,Qi,Ri)表示Ai=PiX+QiD+RiA2  (i>=2) 可計算出:
        S3[2]=(0,0,1)=S2[1];
        S3[3]=(1,0,0)=S2[2];
        S3[4]=(-2,2,1)=S2[3];
        S3[5]=(5,-2-2)=S2[4];
        ......................
        S3[i]=(..........)=S2[i-1];
        .....................
        S3[N]=(..........)=S2[N-1];
    再令A3=A3,A4=X,由S4[i]=(pi,Qi,Ri)表示Ai=PiX+QiD+RiA3   (i>=3) 可計算得出:
        S4[3]=(0,0,1)=S3[2]=S2[1];
        S4[4]=(1,0,0)=S3[3]=S2[2];
        S4[5]=(-22,1)=S3[4]=S2[3];
        ..........................
        S4[i]=(...........)=S3[i-1]=S2[i-2];
        .......................
        S4[N]=(...........)=S3[N-1]=S2[N-2];
     依此類推,我們可以發現一個有趣的式子:
        AN=PN-i+2*Ai+QN-i+2*D+RN-i+2*Ai-1,  即
        Ai=(AN-QN-i+2*D-RN-i+2*Ai-1)/PN-i+2
    我們從已知量A1和AN出發,依據上述公式順序遞推A2、A3、...、AM.由于PN-i+2遞減,因此最后得出的AM要比第一種算法趨于精確。
程序代碼如下:
PRogram ND1P4;
const
    maxn    =60;
var
    n,m,i    :integer;
    d        :real;
    list     :array[1..maxn] of real;        {list[i]-------對應ai}
    s        :array[1..maxn,1..3] of real;   {s[i,1]--------對應Pi}
                                             {s[i,2]--------對應Qi}
                                             {s[i,3]--------對應Ri}
procedure init;
    begin
        write('n m d =');
     


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松潘县| 西华县| 延安市| 合作市| 江口县| 诏安县| 常州市| 江都市| 陆川县| 集安市| 开远市| 六枝特区| 大新县| 嘉峪关市| 达孜县| 巴东县| 上蔡县| 伊金霍洛旗| 怀化市| 固镇县| 丘北县| 台南市| 建阳市| 顺义区| 琼中| 紫阳县| 商丘市| 临漳县| 余姚市| 扬州市| 灵武市| 彭阳县| 江门市| 山东| 扎囊县| 黄山市| 黄山市| 南通市| 太白县| 沈丘县| 汾西县|