wangh 发表于 2007-4-26 18:19

求助:用龙格库塔解方程

从来没接触过龙格库塔啊,今天导师居然让我们用这个方法解这个方程,不会啊,谁可以帮助我解下,以前的帖子搜了下,看不懂^^!
y''''=4+x+x*x*x   在x=0时 : y=1 , y'=1 , y''=1 ,y'''=1
谁能给我个完整的程序吗?最好是用C编程.谢谢大虾们咯.

心灯 发表于 2007-4-27 19:14

网上搜索徐世良的 C语言算法程序集? (本论坛不提供讨论下载共享的问题,还请注意)

另外,没有接触过,但是你懂了原理,自己实现也很快的,前提是你有C语言的基础。

风花雪月 发表于 2007-4-27 20:22

/*
/*编程者:刘艮平
/*完成日期:2004.5.29
/*e.g:y'=y-2x/y,x∈
/*  y(0)=1
/*使用经典四阶龙格-库塔算法进行高精度求解 
/* y(i+1)=yi+( K1+ 2*K2 +2*K3+ K4)/6
/* K1=h*f(xi,yi)
/* K2=h*f(xi+h/2,yi+K1/2)
/* K3=h*f(xi+h/2,yi+K2/2)
/* K4=h*f(xi+h,yi+K3)
*/
#include <stdio.h>
#include <math.h>

float f(float den,float p0)//要求解的微分方程的右部的函数 e.g: y-2x/y
{
    float rus;
//   den=w/(W0+sl);
//   rus=k*A*f/Wp*sqrt(RTp)-(k-1)*.....
    rus=p0-2*den/p0;
    return(rus);
}
//float fden()
//{
//}

void main()
{
    float x0; //范围上限
    int x1;   //范围下限
    float h;//步长
    int n;    //计算出的点的个数
   float k1,k2,k3,k4;
    float y; //用于存放计算出的常微分方程数值解
    int i=0;
    int j;

//以下为函数的接口
    printf("intput x0:");
    scanf("%f",&x0);

    printf("input x1:");
    scanf("%f",&x1);

    printf("input y:");
    scanf("%f",&y);

    printf("input h:");
    scanf("%f",&h);

// 以下为核心程序
    n=((x1-x0)/h);
    n=3;
   
    for(j=0;j<n;j++)
    {   
      k1=h*f(x0,y); //求K1
      k2=h*f((x0+h/2),(y+k1/2)); //求K2
      k3=h*f((x0+h/2),(y+k2/2)); //求K3
      k4=h*f((x0+h),(y+k3)); //求K4

      y=y+((k1+2*k2+2*k3+k4)/6); //求yi+1
      x0+=float(0.2);
      printf("y[%f]=%f\n",x0,y);
      ++i;   
    }
}

这种东西网上遍地都是,建议今后自己好好找找
页: [1]
查看完整版本: 求助:用龙格库塔解方程