龙格-库塔方法

原创 2004年04月05日 23:51:00

#include<stdlib.h>
#include<stdio.h>
/*n表示几等分,n+1表示他输出的个数*/
int RungeKutta(double y0,double a,double b,int n,double *x,double *y,int style,double (*function)(double,double))
{
 double h=(b-a)/n,k1,k2,k3,k4;
 int i;
// x=(double*)malloc((n+1)*sizeof(double));
// y=(double*)malloc((n+1)*sizeof(double));
 x[0]=a;
 y[0]=y0;
 switch(style)
 {
 case 2:
  for(i=0;i<n;i++)
  {
   x[i+1]=x[i]+h;
   k1=function(x[i],y[i]);
   k2=function(x[i]+h/2,y[i]+h*k1/2);
   y[i+1]=y[i]+h*k2;
  }
  break;
 case 3:
  for(i=0;i<n;i++)
  {
   x[i+1]=x[i]+h;
   k1=function(x[i],y[i]);
   k2=function(x[i]+h/2,y[i]+h*k1/2);
   k3=function(x[i]+h,y[i]-h*k1+2*h*k2);
   y[i+1]=y[i]+h*(k1+4*k2+k3)/6;
  }
  break;

 case 4:
  for(i=0;i<n;i++)
  {
   x[i+1]=x[i]+h;
      k1=function(x[i],y[i]);
   k2=function(x[i]+h/2,y[i]+h*k1/2);
   k3=function(x[i]+h/2,y[i]+h*k2/2);
   k4=function(x[i]+h,y[i]+h*k3);
   y[i+1]=y[i]+h*(k1+2*k2+2*k3+k4)/6;
  }
   break;
 default:
  return 0;
 }
 return 1;
}
double function(double x,double y)
{
 return y-2*x/y;
}
//例子求y'=y-2*x/y(0<x<1);y0=1;
/*
int  main()
{
 double x[6],y[6];
 printf("用二阶龙格-库塔方法/n");
 RungeKutta(1,0,1,5,x,y,2,function);
 for(int i=0;i<6;i++)
  printf("x[%d]=%f,y[%d]=%f/n",i,x[i],i,y[i]);
 printf("用三阶龙格-库塔方法/n");
 RungeKutta(1,0,1,5,x,y,3,function);
 for(i=0;i<6;i++)
  printf("x[%d]=%f,y[%d]=%f/n",i,x[i],i,y[i]);
 printf("用四阶龙格-库塔方法/n");
 RungeKutta(1,0,1,5,x,y,4,function);
 for(i=0;i<6;i++)
  printf("x[%d]=%f,y[%d]=%f/n",i,x[i],i,y[i]);
 return 1;
}

龙格-库塔(Runge-Kutta)方法数学原理及实现

龙格-库塔(Runge-Kutta)方法龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行抑制,所以其实现原理也较复杂。该算法是构建在...
  • u013007900
  • u013007900
  • 2015年05月22日 22:57
  • 20678

龙格-库塔法 wiki

龙格-库塔法 维基百科,自由的百科全书 跳转至: 导航、 搜索 数值分析中,龙格-库塔法(Runge-Kutta)是用于模拟常微分方程的解的重要的一类隐式或显式迭代法。这些技术由...
  • BPSSY
  • BPSSY
  • 2013年12月08日 11:15
  • 1666

经典四阶龙格库塔法

龙格库塔法 分类: GSL-GNU scientific Library 2013-08-14 17:22 178人阅读 评论(0) 收藏 举报 目录(?)[+] ...
  • BPSSY
  • BPSSY
  • 2013年12月08日 11:15
  • 4113

4阶经典龙格库塔公式求解微分方程

本次求解微分方程,用4阶龙格库塔方法,该方法的代数精度高,比欧拉法,三阶龙格库塔都高,本次的实现很粗糙,由于本人没有熟练掌握函数指针的方式,对于不同微分方程,并不能做到一个普适的输入版本,所以本算法只...
  • qq_26025363
  • qq_26025363
  • 2016年12月02日 12:43
  • 1537

四阶龙格库塔法

四阶龙格库塔法公式   对微分方程dy/dx=f(x, y) 有初值条件y(x(i))=φ(x(i))   龙格库塔法公式: y(i+1)=y(i)+h*( K1+ 2*K2 +2*K3+ K4)/6...
  • youhong19930102
  • youhong19930102
  • 2013年10月27日 02:37
  • 18450

upadte四元数(1)-----一阶龙格库塔法

已知一四元数,对时间微分得(其中,): 令,则有: 由一阶龙格库塔法,其中,可得微分方程的解: ,进而可推导出: 可得出更新四元数的程序代码为: q0=q0+(-wx*q1-wy*q...
  • AASDSADAD
  • AASDSADAD
  • 2017年06月12日 00:42
  • 1008

四阶龙格-库塔法求解常微分方程的初值问题

算法原理和程序框图 龙格—库塔法是一种求其准确解y(x)在一系列点xi处y(xi)的近似值yi的方法,yi称为数值解。经典的四阶龙格库塔法方程如下: y'=f(t,y),y(t0)=y0输出按如下...
  • lijiaxu_1
  • lijiaxu_1
  • 2017年04月09日 20:25
  • 1252

Matlab中龙格-库塔(Runge-Kutta)方法原理及实现

本文为转载ilovematlab中hyowinner大神的文章,向前辈致敬。 龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。由于此算法精度高,采取措施对误差进行...
  • xiaokun19870825
  • xiaokun19870825
  • 2017年12月10日 11:27
  • 156

龙格库塔C 语言编程实现

最新一直在学一门很苦逼的课程《数值分析》,哎,高等数学没学好现在后悔了呀,哎回来再恶补,现在说正事。 龙格库塔很牛掰的名字,是两个国外数学家的名字的合并,应该又是两个大牛。 这个方法主要是用来解决...
  • on_way_
  • on_way_
  • 2013年04月22日 21:39
  • 2742

梯形法、龙格库塔法求解微分方程 数值解 笔记

首此发表与misskissC博客:http://blog.csdn.net/misskissc/article/details/8913941       根据积分表达式,微分方程的数值解关键在于微...
  • MS_KS_1217
  • MS_KS_1217
  • 2013年07月22日 23:46
  • 848
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:龙格-库塔方法
举报原因:
原因补充:

(最多只允许输入30个字)