数值微分法用通俗的语言解释一下它的实现方法

求:数值微分法用通俗的语言解释一下它的实现方法
谢谢各位了!
这个是要往课程设计里写的
依旧漂流写的有点太简略了
还能再明白点吗?

迷糊,俺没学过数学分析啊

就是求导了!
作差,求商,求极限呗
参考:http://baike.baidu.com/view/295773.htm
数学分析里面有的
根据函数在一些离散点的函数值,推算它在某点的导数或高阶导数的近似值的方法。通常用差商代替微商,或者用一个能够近似代替该函数的较简单的可微函数(如多项式或样条函数等)的相应导数作为能求导数的近似值。例如一些常用的数值微分公式(如两点公式、三点公式等)就是在等距步长情形下用插值多项式的导数作为近似值的。此外,还可以采用待定系数法建立各阶导数的数值微分公式,并且用外推技术来提高所求近似值的精确度。当函数可微性不太好时,利用样条插值进行数值微分要比多项式插值更适宜。如果离散点上的数据有不容忽视的随机误差,应该用曲线拟合代替函数插值,然后用拟合曲线的导数作为所求导数的近似值,这种做法可以起到减少随机误差的作用。数值微分公式还是微分方程数值解法的重要依据。

另请参考:http://www.fjtu.com.cn/fjnu/courseware/0329/course/_source/web/lesson/char7/j1.htm

下面是一个包含了简单差商的C代码,是我写给别人的,椐说有点错误,但我因为这不影响你理解差商
0 0.5 1.0 1.5 2.0 2.5
0.84147 0.85770 0.89924 0.94898 0.98777 0.99955

要求:
1.根据上表,计算差商表,并打印出来.
2.打印出Newton插值多项式.
3.计算f(1.673),用3次Newton插值多项式.
4.计算f(0.618),用5次Newton插值多项式.
根据以上要求,请用C或C++编写个程序.

#include<math.h>
#include<stdio.h>
#include<stdlib.h>
typedef struct data
{float x;
float y;}Data;
void scan(Data* a)
{float x,y;
scanf("%f%f",&x,&y);
(*a).x=x;
(*a).y=y;}
float f(Data *d,int s,int t)
{
if(t==s+1) return (d[t].y-d[s].y)/(d[t].x-d[s].x);
else return (f(d,s+1,t)-f(d,s,t-1))/(d[t].x-d[s].x);
}
float Newton(Data *d,float x)
{float t=1.0;
float y=d[0].y;
float yt=0;
int j,n;
while(1){
printf("\ninput n:");
scanf("%d",&n);
if(n<20) break;
else system("cls");}
for(j=1;j<=n;j++){
t=(x-d[j-1].x)*t;
yt=f(d,0,j)*t;
printf("%f\n",f(d,0,j));
y=y+yt;}
return y;
}
main(){
Data d[20];
Data *p=d;
int i,n;
float y,x;
printf("\ninput arrey ( <20 ):" );
scanf("%d",&n);
for(i=0;i<n;i++) scan(p+i);
printf("\ninput x:");
scanf("%f",&x);
y=Newton(d,x);
printf("\nji guowei:%f",y);
}
温馨提示:答案为网友推荐,仅供参考
相似回答