gghhjj 发表于 2006-9-18 07:16

龙格库塔法的c++编程

#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=a;
y=y0;
switch(style)
{
case 2:
for(i=0;i<n;i++)
{
x=x+h;
k1=function(x,y);
k2=function(x+h/2,y+h*k1/2);
y=y+h*k2;
}
break;
case 3:
for(i=0;i<n;i++)
{
x=x+h;
k1=function(x,y);
k2=function(x+h/2,y+h*k1/2);
k3=function(x+h,y-h*k1+2*h*k2);
y=y+h*(k1+4*k2+k3)/6;
}
break;
case 4:
for(i=0;i<n;i++)
{
x=x+h;
k1=function(x,y);
k2=function(x+h/2,y+h*k1/2);
k3=function(x+h/2,y+h*k2/2);
k4=function(x+h,y+h*k3);
y=y+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,y;
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,y);
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,y);
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,y);
return 1;

assist 发表于 2007-1-14 20:06

谢谢!

lzh316 发表于 2007-1-22 19:40

呵呵

还可以,简单点,如果中间加一个迭代

风花雪月 发表于 2007-1-27 07:49

原帖由 lzh316 于 2007-1-22 19:40 发表
还可以,简单点,如果中间加一个迭代

你说的中间加一个迭代是什么意思?

风花雪月 发表于 2007-1-29 12:37

原帖由 lzh316 于 2007-1-22 19:40 发表
还可以,简单点,如果中间加一个迭代

一般这类算法已经很少自己写程序了,大部分在算法库中都能够找到

insects 发表于 2007-5-16 10:25

这个什么龙格库塔法不怎么会用

有没有谁会编个二阶用龙格库塔法解非线性微分方程的程序给我看看,用matlab语言的,方程是


d2θe(t)/dt2+(1/τ1+K*(τ2/τ1)*cosθe(t))* dθe(t)/dt+k/τ1*sinθe(t)-△ω0/τ1=0

风花雪月 发表于 2007-5-17 15:19

原帖由 insects 于 2007-5-16 10:25 发表
有没有谁会编个二阶用龙格库塔法解非线性微分方程的程序给我看看,用matlab语言的,方程是


d2θe(t)/dt2+(1/τ1+K*(τ2/τ1)*cosθe(t))* dθe(t)/dt+k/τ1*sinθe(t)-△ω0/τ1=0
把你的方程转换到状态空间就可以了

注意版规:Matlab问题请到Matlab讨论区发帖询问

sssssxxxxx921 发表于 2007-7-10 21:13

有没有谁会用VC编的啊

风花雪月 发表于 2007-7-23 15:43

原帖由 sssssxxxxx921 于 2007-7-10 21:13 发表
有没有谁会用VC编的啊
什么意思?上面的代码稍加修改就能在VC下运行

佩刀 发表于 2015-12-29 22:14

(用C/C++)用龙格库塔法如何编程微分方程组dx/dt=-10x+10y      dy/dt=30x-y-xz   dz/dt=(-8/3)z+xy求大神帮忙

佩刀 发表于 2015-12-29 22:15

dx/dt=-10x+10y dy/dt=30x-y-xz         dz/dt=(-8/3)z+xy
页: [1]
查看完整版本: 龙格库塔法的c++编程