Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [java]решение диффуравнение методом эйлера


Автор: ArniLand 5.12.2010, 16:05
Написать программу на языке Java2, которая вычисляет общее решение линейного однородного дифференциального уравнения n-го порядка методом численного интегрирования по варианту (найти корни уравнения и вычислить значение функции при заданных начальных условиях и на заданном интервале изменения значения х).
Решение дифференциального уравнения методом Эйлера.
Уравнение:
http://piccy.info/view3/803142/c27da3553482b3f352c95c3278ee8355/

Вот написал примерный код:
Код

package rgr;
import java.io.*;
public class Main {

    public static void print(double arrX[] , double arrY[]){
        for(int i = 0; i < arrX.length;i++)
        System.out.println("x="+arrX[i]+"\t"+"y="+arrY[i]);
    }

    public static double func(double a0, double a1, double a2, double a3, double a4, double a5, double y0, double dy1, double dy2,
            double dy3, double dy4){
        return ((-a5*y0 - a4*dy1 - a3*dy2 - a2*dy3 - a1*dy4)/a0);
    }

    public static void Euler(double x0, double x1, double n, double a0, double a1, double a2, double a3, double a4, double a5,
          double y0, double Dy1, double Dy2, double Dy3, double Dy4, double Dy5){
          int i = 0;

          double []DX = new double[i+1];
          double []DY = new double[i+1];

          double []DY1 = new double[i+1];
          double []DY2 = new double[i+1];
          double []DY3 = new double[i+1];
          double []DY4 = new double[i+1];
          double []DY5 = new double[i+1];

          double h = (x1 - x0)/n;

          DX[0] = x0;
          DY[0] = y0;
          DY1[0] = Dy1;
          DY2[0] = Dy2;
          DY3[0] = Dy3;
          DY4[0] = Dy4;
          DY5[0] = Dy5;

          i = 1;
          do {
              DX[i] = DX[i-1] + h;

              DY5[i] = DY5[i-1] + h*func(a0, a1, a2, a3, a4, a5, DY[i-1], DY2[i-1], DY3[i-1], DY4[i-1], DY5[i-1]);
              DY4[i] = DY4[i-1] + h*func(a0, a1, a2, a3, a4, a5, DY[i-1], DY2[i-1], DY3[i-1], DY4[i-1], DY5[i-1]);
              DY3[i] = DY3[i-1] + h*func(a0, a1, a2, a3, a4, a5, DY[i-1], DY2[i-1], DY3[i-1], DY4[i-1], DY5[i-1]);
              DY2[i] = DY2[i-1] + h*func(a0, a1, a2, a3, a4, a5, DY[i-1], DY2[i-1], DY3[i-1], DY4[i-1], DY5[i-1]);
              DY1[i] = DY1[i-1] + h*func(a0, a1, a2, a3, a4, a5, DY[i-1], DY2[i-1], DY3[i-1], DY4[i-1], DY5[i-1]);
              DY[i] = DY1[i-1] + h*func(a0, a1, a2, a3, a4, a5, DY[i-1], DY2[i-1], DY3[i-1], DY4[i-1], DY5[i-1]);
              i++;
          }while(i<=n);

          print(DX, DY);
    }

    public static void main(String[] args) {
        Euler(0.0, 4.0, 10.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, -16.0, 16.0, -8.0, 8.0, 1.0, 1.0);
    }

}


Вот результат программы,   не могу понять в чем проблема. И что можете сказать насчет правильности формул в программе.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
        at rgr.Main.Euler(Main.java:45)
        at rgr.Main.main(Main.java:60)
Java Result: 1
BUILD SUCCESSFUL (total time: 0 seconds)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)