Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> решение диффуравнение методом эйлера [java] 
:(
    Опции темы
ArniLand
Дата 5.12.2010, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 227
Регистрация: 17.8.2008

Репутация: нет
Всего: нет



Написать программу на языке Java2, которая вычисляет общее решение линейного однородного дифференциального уравнения n-го порядка методом численного интегрирования по варианту (найти корни уравнения и вычислить значение функции при заданных начальных условиях и на заданном интервале изменения значения х).
Решение дифференциального уравнения методом Эйлера.
Уравнение:
user posted image

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

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)
PM MAIL   Вверх
nc30
Дата 5.12.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Интересующийся :)
*


Профиль
Группа: Участник
Сообщений: 140
Регистрация: 24.6.2010
Где: Санкт-Петербург

Репутация: 5
Всего: 8



Все эти массивы
Код

          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];
имеют длину равную 1. 

А тело этого цикла
Код

          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);
вы собираетесь выполнить аж десять раз.

Естественно, что при первом же обращении ко второму элементу массива DX единичной длины, вы вылетаете за его границу. До остальных массивов (а с ними та же история) JVM даже не доходит.

ArniLand, думаю, вам имеет смысл почитать книгу по основам Java (первый том Хорстманна/Корнелла, например). Сэкономите себе массу времени  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.