创建博客 登录  
 加关注
   显示下一条  |  关闭

(((silence)))

#define if(...) if(!(__VA_ARGS__))

 
 
 

日志

 
 

期末实现了一坨C++数值算法[9] 改进的欧拉算法以及四阶龙格-库塔算法  

2009-12-31 15:53:53|  分类: 编程 |  标签: |字号 订阅

还是先抄一点介绍:

常微分方程初值问题wps_clip_image-34的数值解是指通过一定的近似方法得出准确解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称为单步法。

利用y(x)在xn,xn-1,…,xn-k+1的精确解y(xn), y(xn-1),…,y(xn-k+1)借助某种算法计算出yn+1,则称 |y(xn+1)-yn+1| 为该方法的局部截断误差。如果一个算法的局部截断误差是O(hp+1),则称该方法是p阶的;而利用数值解yn,yn-1,…,yn-k+1得到的yn+1与微分方程的精确解之差|y(xn+1)-yn+1| 称为整体截断误差,即是该数值方法的误差。

对于固定的x>x0,取h=(x-x0)/n,用某种算法得到yn,如有wps_clip_image-972=0,则称该方法是收敛的。注意,因x是固定的,随着wps_clip_image-1050,数值解的步数wps_clip_image-1084

 

在实际计算时由于舍入误差不可避免,实际得到数值解是wps_clip_image-50,稳定性即研究wps_clip_image-84是否随着计算步骤n的增加而增加。通常所提的稳定性是通过模型方程wps_clip_image-168来讨论的。若当某一步yn有舍入误差时,在以后的计算中误差不会逐步扩大,则称这种稳定性为绝对稳定性。

 

===== 下面是我的实现 =====

 

// 用改进的欧拉公式求解常微分初值问题
// 参数:
//    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;
    }
}

 

类似的:

wps_clip_image-25

void rungeKuttaMethod(
                      NA::functionDPDP_DP f,
                      double x0,
                      double y0,
                      double h,
                      int N
) {
    double h2=h/2.0;
    for( int n=0; n<N; ++n ) {
        double x1=x0+h;
        double k1=f(x0   , y0);
        double k2=f(x0+h2, y0+h2*k1);
        double k3=f(x0+h2, y0+h2*k2);
        double k4=f(x1   , y0+ h*k3);
        double y1=y0+h*(k1+2*k2+2*k3+k4)/6;
        x0=x1;
        y0=y1;
        cout<<"x: "<<x0<<"\t\ty: "<<y0<<endl;
    }
}

OVER

 

PS, 这个两个算法是如此无趣以至于我都不想放上来了。

  评论这张
转发至微博
转发至微博
0   分享到:        
阅读(507)| 评论(0)| 不可引用 |举报

历史上的今天

相关文章

最近读者

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--相关文章--> <#--历史上的今天--> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2012