我們把 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;
}
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];
}
//存放二階以上差商
cur=m_length;
int temp;
for(int internal=1;internal
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
for(int j=0;j y=y*(xx-parmx[j]);
}
z+=m_diff[cur]*y;
cur=cur+m_length-i;
}
return z;
}