还是先抄一点介绍:
常微分方程初值问题的数值解是指通过一定的近似方法得出准确解y=y(x)在一列离散点x0,x1,x2,…,xn,…上的近似值y0,y1,y2,…,yn,…。数值解的特征是步进式,即y(x)在xn+1点的近似值yn+1是由xn,xn-1,…等若干点处的近似值yn,yn-1,…的信息给出的递推公式。若yn+1依赖于前面k步的值yn,yn-1,…,yn-k+1,则称为k步法;k=1称为单步法。
// 用改进的欧拉公式求解常微分初值问题
// 参数:
// f: 函数 f(x,y)
// x0: x 的初值
// y0: y 的初值
// h: 步长
// N: 迭代次数
// 返回值:
// 无 ( 迭代时直接输出 )
void eulerMethod (
NA::functionDPDP_DP f,
double x0,
double y0,
double h,
int N
) {
for(int n=0; n<N; ++n) {
double x1=x0+h;
double yp=y0+h*f(x0,y0);
double y1=y0+h*f(x1,yp);
y1=(yp+y1)/2.0;
cout<<"x: "<<x1<<"\t\ty: "<<y1<<endl;
x0=x1;
y0=y1;
}
}
转发至微博
转发至微博
评论