求助,用runge-kutta法解微分方程的java程序。谢谢。

解决方案 »

  1.   

    自己去找本书吧:《Java常用数值算法集》
      

  2.   

    这是我前些天刚做的,是计算方法的上机作业。
    public class Runge
    {
    public static void main(String[] args)
    {
    double a,b,h,y0;
    double Y[];
    a=0.0;b=1.0;h=0.1;y0=1.0;
    Y=(new Runge()).runge(a,b,h,y0);
    for(int i=0;i<Y.length;i++)
    System.out.println("X"+i+"="+Y[i]);
    }
    double[] runge(double a,double b,double h,double y0)
    {
    double xi,k1,k2,k3,k4;
    int n=(int)((b-a)/h+1);
    double[] Y=new double[n];
    Y[0]=y0;
    for(int i=0;i<n-1;i++)
    {
    xi=a+i*h;
    k1=h*f(xi,Y[i]);
    k2=h*f(xi+h/2,Y[i]+k1/2);
    k3=h*f(xi+h/2,Y[i]+k2/2);
    k4=h*f(xi+h,Y[i]+k3);
    Y[i+1]=Y[i]+h/6*(k1+2*k2+2*k3+k4);  
    }
    return Y;
    }
    double f(double x,double y)
    {
    return -y;
    }
    }
      

  3.   

    说明:
       将f(x,y)改成你自己需要的,[a,b]是求解区间,h是步长已知y(a)=y0。