C實(shí)例編程(用牛頓插值第一步為求差商)

字號(hào):

我們把 0 階差商到 n 階差商都放在一個(gè)一維數(shù)組里面就會(huì)發(fā)現(xiàn)其中的規(guī)律,也可以根據(jù)這些規(guī)律來指導(dǎo)我們編程。
    0 階差商 n 個(gè),一階差商 n-1個(gè) .... 直到 n 階差商 1個(gè)。
    求差商代碼為:
    bool CShuzhijisuanDlg::Diff()
    {
    int cur;
    cur=m_length*(m_length+1)/2+1;
    m_diff=new double[cur];
    for(int i=0;i    m_diff[i]=parmy[i];
    m_diff[i];
    }
    //存放二階以上差商
    cur=m_length;
    int temp;
    for(int internal=1;internal    for(i=internal;i    temp=cur-m_length+internal-1;
    m_diff[cur++]=(m_diff[temp]-m_diff[temp+1])/(parmx[i-internal]-parmx[i]);
    }
    }
    m_isdiff=true;
    return true;
    }
    差商求完我們開始求牛頓插值了:
    double CShuzhijisuanDlg::Newton(double xx)
    {
    if(m_isdiff==false)
    Diff();
    short int cur=m_length;
    double y,z=parmy[0];
    for(int i=1;i    y=1;
    for(int j=0;j    y=y*(xx-parmx[j]);
    }
    z+=m_diff[cur]*y;
    cur=cur+m_length-i;
    }
    return z;
    }