四阶龙格库塔法-常微分方程数值计算

9 篇文章 0 订阅
7 篇文章 0 订阅

龙格-库塔法是数值求解常微分方程经典方法,
下面是百度百科的四阶龙格库塔法的公式截图
在这里插入图片描述
h是t的步长
设n为0时,t0=0.0,y0也已知,可以计算k1,k2,k3,k4,然后y1=y0+h*(k1+2.0* k2+2.0 *k3+k4)/6.0,t1=t0+h
这样由t0算出了t1,y1,
然后再带公式推算出t2,y2
写成程序就是

double f(t, y)
{
    2.0*t;
}
double step_rk4(double tn,double yn, double h)
{
   double h2=0.5*h;
   double h6=h/6.0;
   double k1=f(tn,fn);
   double k2=f(tn+h2,yn+h2*k1);
   double k3=f(tn+h2,yn+h2*k2);
   double k4=f(tn+h,yn+h*k3);
   double y_nadd1=yn+h6*(k1+2.0* k2+2.0 *k3+k4);
   return y_nadd1;
}

这样可以从t0开始一步步推算

#include<iostream>

double f(t, y)
{
    2.0*t;
}
double step_rk4(double tn,double yn, double h)
{
   double h2=0.5*h;
   double h6=h/6.0;
   double k1=f(tn,fn);
   double k2=f(tn+h2,yn+h2*k1);
   double k3=f(tn+h2,yn+h2*k2);
   double k4=f(tn+h,yn+h*k3);
   double y_nadd1=yn+h6*(k1+2.0* k2+2.0 *k3+k4);
   return y_nadd1;
}

int main()
{
    double t=0.0;
    double y=0.0;
    double y_next=0.0;
    double h=0.1;
    
    for(int i=0;i<1000;i++)
    {
       std::cout << "(" << t << ", " << y << ")\n";
       
       y_next=step_rk4(t,y,h);
       t+=h;
       y=y_next;
    }
    return 0;
}
  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值