Студопедия — Приложение А. Код программы на языке Java SE.
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Приложение А. Код программы на языке Java SE.






package main;

 

import java.awt.Color;

import java.io.BufferedReader;

import java.io.FileReader;

import java.io.IOException;

import static java.lang.Math.exp;

import static java.lang.Math.sqrt;

import java.util.Random;

import org.jfree.chart.ChartFactory;

import org.jfree.chart.ChartFrame;

import org.jfree.chart.JFreeChart;

import org.jfree.chart.plot.PlotOrientation;

import org.jfree.chart.plot.XYPlot;

import org.jfree.chart.renderer.xy.XYLineAndShapeRenderer;

import org.jfree.data.xy.XYDataset;

import org.jfree.data.xy.XYSeries;

import org.jfree.data.xy.XYSeriesCollection;

 

public class Main {

 

private static void plotSP(double[] arr, double MX, double DX) {

 

XYSeries seriesSP = new XYSeries("СП", true, true);

XYSeries seriesMX = new XYSeries("MX", true, true);

XYSeries seriesSKO = new XYSeries("СКО", true, true);

XYSeries series_SKO = new XYSeries("-СКО", true, true);

 

for (int i = 0; i < 200; i++) {

seriesSP.add(i, arr[i]);

}

seriesMX.add(0, MX);

seriesMX.add(200, MX);

 

seriesSKO.add(0, MX + sqrt(DX));

seriesSKO.add(200, MX + sqrt(DX));

 

series_SKO.add(0, MX - sqrt(DX));

series_SKO.add(200, MX - sqrt(DX));

 

XYSeriesCollection collection = new XYSeriesCollection();

collection.addSeries(seriesSP);

collection.addSeries(seriesMX);

collection.addSeries(seriesSKO);

collection.addSeries(series_SKO);

 

XYDataset dataset = collection;

XYLineAndShapeRenderer r1 = new XYLineAndShapeRenderer();

 

r1.setSeriesPaint(0, Color.red);

r1.setSeriesPaint(1, Color.GREEN);

r1.setSeriesPaint(2, Color.BLUE);

r1.setSeriesPaint(3, Color.BLUE);

 

r1.setSeriesShapesVisible(0, false);

r1.setSeriesShapesVisible(1, false);

r1.setSeriesShapesVisible(2, false);

r1.setSeriesShapesVisible(3, false);

 

r1.setSeriesVisibleInLegend(3, false);

 

JFreeChart chart = ChartFactory.createXYLineChart("График СП", "Index", "Value", null);

 

XYPlot plot = (XYPlot) chart.getPlot();

 

plot.setDataset(0, dataset);

plot.setRenderer(0, r1);

 

plot.mapDatasetToRangeAxis(0, 0); //xz

plot.setBackgroundPaint(Color.LIGHT_GRAY);

plot.setDomainGridlinePaint(Color.WHITE);

plot.setRangeGridlinePaint(Color.WHITE);

 

ChartFrame frame = new ChartFrame("График", chart);

frame.pack();

frame.setVisible(true);

}

 

public static void plotR(double[] arr) {

XYSeries series = new XYSeries("r(m)", true, true);

XYSeries series_E = new XYSeries("+1/e,-1/e", true, true);

XYSeries seriesE = new XYSeries("1/e", true, true);

for (int i = 0; i < arr.length; i++) {

series.add(i, arr[i]);

}

series_E.add(0, -exp(-1));

series_E.add(15, -exp(-1));

 

seriesE.add(0, exp(-1));

seriesE.add(15, exp(-1));

 

XYSeriesCollection collection = new XYSeriesCollection();

collection.addSeries(series);

collection.addSeries(series_E);

collection.addSeries(seriesE);

 

JFreeChart chart = ChartFactory.createXYLineChart("Оценка НКФ исходного СП", "m", "r(m)", collection,

PlotOrientation.VERTICAL, true, true, false);

XYDataset dataset = collection;

XYLineAndShapeRenderer r1 = new XYLineAndShapeRenderer();

 

r1.setSeriesPaint(0, Color.red);

r1.setSeriesPaint(1, Color.BLUE);

r1.setSeriesPaint(2, Color.BLUE);

 

r1.setSeriesShapesVisible(0, false);

r1.setSeriesShapesVisible(1, false);

r1.setSeriesShapesVisible(2, false);

 

r1.setSeriesVisibleInLegend(2, false);

 

XYPlot plot = (XYPlot) chart.getPlot();

 

plot.setDataset(0, dataset);

plot.setRenderer(0, r1);

 

plot.mapDatasetToRangeAxis(0, 0); //xz

plot.setBackgroundPaint(Color.LIGHT_GRAY);

plot.setDomainGridlinePaint(Color.WHITE);

plot.setRangeGridlinePaint(Color.WHITE);

 

//Создание окна вывода

ChartFrame frame = new ChartFrame("НКФ", chart);

frame.pack();

frame.setVisible(true);

}

 

/**

* График для сравнения выборочной, теоретической и смоделированой НКФ.

*

* @param arr1 выборочная НКФ

* @param arr2 теоретическа НКФ

* @param arr3 смоделированная НКФ

* @param str Название модели (AR(2), MA(0), ARMA(2,3))

*/

public static void plotAll_R(double[] arr1, double[] arr2, double[] arr3, String str) {

XYSeries seriesArr1 = new XYSeries("исходная НКФ", true, true);

XYSeries seriesArr2 = new XYSeries("теоретическая НКФ", true, true);

XYSeries seriesArr3 = new XYSeries(str, true, true);

 

for (int i = 0; i < arr1.length; i++) {

seriesArr1.add(i, arr1[i]);

}

for (int i = 0; i < arr2.length; i++) {

seriesArr2.add(i, arr2[i]);

}

for (int i = 0; i < arr3.length; i++) {

seriesArr3.add(i, arr3[i]);

}

 

XYSeriesCollection collection = new XYSeriesCollection();

collection.addSeries(seriesArr1);

collection.addSeries(seriesArr2);

collection.addSeries(seriesArr3);

 

JFreeChart chart = ChartFactory.createXYLineChart("НКФ модели " + str, "m", "r(m)", collection,

PlotOrientation.VERTICAL, true, true, false);

XYDataset dataset = collection;

XYLineAndShapeRenderer r1 = new XYLineAndShapeRenderer();

 

r1.setSeriesPaint(0, Color.RED);

r1.setSeriesPaint(1, Color.BLUE);

r1.setSeriesPaint(2, Color.YELLOW);

 

r1.setSeriesShapesVisible(0, false);

r1.setSeriesShapesVisible(1, false);

r1.setSeriesShapesVisible(2, false);

 

XYPlot plot = (XYPlot) chart.getPlot();

 

plot.setDataset(0, dataset);

plot.setRenderer(0, r1);

 

plot.mapDatasetToRangeAxis(0, 0); //xz

plot.setBackgroundPaint(Color.LIGHT_GRAY);

plot.setDomainGridlinePaint(Color.WHITE);

plot.setRangeGridlinePaint(Color.WHITE);

 

//Создание окна вывода

ChartFrame frame = new ChartFrame("НКФ", chart);

frame.pack();

frame.setVisible(true);

}

 

/**

* Метод, подсчитывающий и выводящий на консоль первые 10 теоретических

* значений НКФ для данной модели АРСС(M,N) А также погрешность e^2 для

* данной модели

*

* @param M параметр М для модели ARMA(M,N)

* @param N параметр N для модели ARMA(M,N)

* @param rOld выборочная НКФ

* @param betas коэффициенты betas

*/

public static void eps2(int M, int N, double[] rOld, double[] betas) {

double[] rNew = new double[16];

double tmpSum = 0;

double eps2 = 0;

int m = 0;

 

while (m < N + M + 1) {

rNew[m] = rOld[m];

m++;

}

for (int i = m; i < 16; i++) {

for (int j = 0; j < M; j++) { //считаем значения НКФ

tmpSum += betas[j] * rNew[i - j];

}

rNew[i] = tmpSum;

}

System.out.println("ARRRRRRRRRRR");

for (int i = 1; i < 11; i++) {

System.out.println(rNew[i]);

}

 

System.out.println("");

for (int i = 1; i < 11; i++) {

eps2 += Math.pow(rNew[i] - rOld[i], 2);

}

System.out.println("Погрешность: " + eps2);

rNew = null;

}

 

public static double rand() {

Random randR = new Random(); //объекты будут создаваться при выхове статического метода?

double sum = -6;

for (int i = 0; i < 11; i++) {

sum += randR.nextDouble();//генерирует случайное число [0,1]

}

return sum;

}

 

/**

* Подсчет моментных функций:

*

* среднее по выборке макс мин диссперсия корреляционная функция нкф радиус

* корреляции

*

* + 2 графика СП НКФ

*

* @param array выборка

* @param str Заголовок: "Моментные функциии для +str"

*/

public static double[] momentsFunction(double[] array, String str) {

//среднее по выборке

double x_ = 0; //среднее

double current = 0;

double max = 0;

double min = 0;

double disp = 0;

double[] r = new double[16]; //КФ

double[] r_ = new double[16]; //НКФ

 

for (int i = 0; i < array.length; i++) {

current = array[i];

if (current > max) {

max = current;

} else if (current < min) {

min = current;

}

x_ += current;

}

x_ /= array.length;

x_ = Math.round(x_ * 10000);

x_ /= 10000;

System.out.println("Моментные функциии для " + str);

System.out.println("Среднее по выборке: " + x_);

System.out.println("Максимальное значение в выборке: " + max);

System.out.println("Минимальное значение в выборке: " + min);

 

//Выборочная не смещенная диссперсия

for (int i = 0; i < array.length; i++) {

disp += (array[i] - x_) * (array[i] - x_);

}

disp /= array.length;

disp = Math.round(disp * 10000);

disp /= 10000;

System.out.println("Выборочная диссперсия: " + disp);

 

//Корреляционная функция для k=0,1,2,3,4,5,6,7,8,9,10,11,12,13,14.

System.out.println("Корреляционная функция:");

for (int k = 0; k < r.length; k++) {

for (int i = 0; i < array.length - k; i++) {

r[k] += (array[i] - x_) * (array[i + k] - x_);

}

 

r[k] /= (array.length - k);

r[k] = Math.round(r[k] * 10000);

r[k] /= 10000;

System.out.println(r[k]);

}

//НКФ

System.out.println("Нормированая корреляционная функция:");

int radius = 0;

for (int k = 0; k < r_.length; k++) {

 

r_[k] = r[k] / disp;

r_[k] = Math.round(r_[k] * 10000);

r_[k] /= 10000;

System.out.println(r_[k]);

if ((r_[k] >= (1 / Math.E)) || (r_[k] <= -(1 / Math.E))) {

radius = k;

}

}

 

System.out.println("Радиус корреляции: " + ++radius);

 

if ("исходной выборки".equals(str)) {

plotSP(array, x_, disp);

plotR(r_);

}

return r_;

}

 

public static double[] tehorNKF_MA0(double[] r_) {

// теоретические НКФ

double[] MA0 = new double[16];

double[] betas1 = {0};

double eps = 0;

MA0[0] = 1.000;

System.out.println("Теоретичесая НКФ MA(0):");

for (int i = 1; i < 16; i++) {

MA0[i] = 0;

}

for (int i = 1; i < 11; i++) {

System.out.println(0);

}

for (int i = 1; i < 11; i++) {//погрешности первых 10 погрешностей, начиная с индекса 1.

eps += Math.pow(MA0[i] - r_[i], 2);

}

System.out.println("Погрешность: " + eps);

System.out.println("");

return MA0;

}

 

public static double[] tehorNKF_AR2(double[] r_) {

// теоретические НКФ

double[] betas2 = {1.0425, -0.7726};

double[] AR2 = new double[16];

double eps = 0;

AR2[0] = 1.0000;

AR2[1] = 0.5881;

AR2[2] = -0.1595;

System.out.println("Теоретическая НКФ AR(2):");

for (int i = 3; i < 16; i++) {

AR2[i] = AR2[i - 1] * betas2[0] + AR2[i - 2] * betas2[1];

}

for (int i = 1; i < 11; i++) {//выписываем первые 10 значений

System.out.println(AR2[i]);

}

for (int i = 1; i < 11; i++) {//погрешности первых 10 погрешностей, начиная с индекса 1.

eps += Math.pow(AR2[i] - r_[i], 2);

}

System.out.println("Погрешность: " + eps);

System.out.println("");

return AR2;

}

 

public static double[] tehorNKF_ARMA23(double[] r_) {

// теоретические НКФ

double[] betas2 = {0.9444, -0.883};

double[] ARMA23 = new double[16];

double eps = 0;

ARMA23[0] = 1.0000;

ARMA23[1] = 0.5881;

ARMA23[2] = -0.1595;

System.out.println("Теоретичесая НКФ ARMA(2,3):");

for (int i = 3; i < 16; i++) {

ARMA23[i] = ARMA23[i - 1] * betas2[0] + ARMA23[i - 2] * betas2[1];

}

for (int i = 1; i < 11; i++) {

System.out.println(ARMA23[i]);

}

for (int i = 1; i < 11; i++) {//погрешности первых 10 погрешностей, начиная с индекса 1.

eps += Math.pow(ARMA23[i] - r_[i], 2);

}

System.out.println("Погрешность: " + eps);

System.out.println("");

return ARMA23;

}

 

public static double[] model_AR2() {

//Моделирование СП для модели АР(2)

double[] AR2 = new double[6000];

double[] riliAR2 = new double[5000];

 

AR2[0] = 49.947 + 10.5326 * rand();

AR2[1] = 49.947 + 1.0425 * AR2[0] + 10.5326 * rand();

AR2[2] = 49.947 + 1.0425 * AR2[1] - 0.7726 * AR2[0] + 10.5326 * rand();

for (int i = 3; i < 1000; i++) { //в холостую

AR2[i] = 49.947 + 1.0425 * AR2[i - 1] - 0.7726 * AR2[i - 2] + 10.5326 * rand();

}

for (int i = 1000; i < 6000; i++) {//рили

AR2[i] = 49.947 + 1.0425 * AR2[i - 1] - 0.7726 * AR2[i - 2] + 10.5326 * rand();

riliAR2[i - 1000] = AR2[i];

}

return riliAR2;

}

 

public static double[] model_MA0() {

double[] MA0 = new double[6000];

double[] riliMA0 = new double[5000];

//PrintWriter pwMA0 = new PrintWriter(new File("C:\\Users\\User\\Desktop\\MA0.txt"));

for (int i = 0; i < 1000; i++) { //в холостую

MA0[i] = 49.947 + 20.5136 * rand();

}

for (int i = 1000; i < 6000; i++) {//рили

MA0[i] = 49.947 + 20.5136 * rand();

riliMA0[i - 1000] = MA0[i];

}

return riliMA0;

}

 

public static double[] model_ARMA23() {

double[] ARMA23 = new double[6000];

double[] riliARMA23 = new double[5000];

double t0 = rand();

double t1 = rand();

double t2 = rand();

double t3 = rand();

 

ARMA23[0] = 49.947 - 4.8714 * t0;

ARMA23[1] = 49.947 + 0.9444 * ARMA23[0] - 4.8714 * t1 - 1.2166 * t0;

ARMA23[2] = 49.947 + 0.9444 * ARMA23[1] - 0.883 * ARMA23[0] - 4.8714 * t2 + 1.2166 * t1 - 12.5896 * t0;

ARMA23[3] = 49.947 + 0.9444 * ARMA23[2] - 0.883 * ARMA23[1] - 4.8714 * t3 + 1.2166 * t2 - 12.5896 * t1 - 2.7796 * t0;

 

for (int i = 4; i < 1000; i++) { //в холостую

t0 = t1;

t1 = t2;

t2 = t3;

t3 = rand();

ARMA23[i] = 49.947 + 0.9444 * ARMA23[i - 1] - 0.883 * ARMA23[i - 2] - 4.8714 * t3 + 1.2166 * t2 - 12.5896 * t1 - 2.7796 * t0;

}

for (int i = 1000; i < 6000; i++)

t0 = t1;

t1 = t2;

t2 = t3;

t3 = rand();

ARMA23[i] = 49.947 + 0.9444 * ARMA23[i - 1] - 0.883 * ARMA23[i - 2] - 4.8714 * t3 + 1.2166 * t2 - 12.5896 * t1 - 2.7796 * t0;

riliARMA23[i - 1000] = ARMA23[i];

}

return riliARMA23;

}

 

public static void main(String[] args) throws IOException {

BufferedReader in = new BufferedReader(new FileReader("C:\\Users\\User\\Desktop\\Учёба\\Математика\\ТСП\\Курсач\\input.txt"));

String tmp = null;

int c = 0;

double current = 0, eps = 0;

double[] array = new double[5000];//выборка

double[] r_ = new double[16]; //НКФ

 

while ((tmp = in.readLine())!= null) {

current = Double.parseDouble(tmp);

array[c++] = current;

}

System.out.println("********************************************");

r_ = momentsFunction(array, "исходной выборки");//выводим моментные функции для исходной выбрки

System.out.println("********************************************\n\n\n");

in.close();

 

//теоретические НКФ и их погрешности для лучших моделей AR(2),MA(0),ARMA(3)

double[] teorAR2 = new double[10];

double[] teorMA0 = new double[10];

double[] teorARMA23 = new double[10];

 

System.out.println("********************************************");

teorAR2 = tehorNKF_AR2(r_);

teorMA0 = tehorNKF_MA0(r_);

teorARMA23 = tehorNKF_ARMA23(r_);

System.out.println("********************************************\n\n\n");

 

//Моделирование моделей

double[] arrayAR2 = new double[5000];

double[] arrayMA0 = new double[5000];

double[] arrayARMA23 = new double[5000];

arrayAR2 = model_AR2();//смоделированные СП для лучших моделей

arrayMA0 = model_MA0();

arrayARMA23 = model_ARMA23();

//Анализ моделей

double[] r_AR2 = new double[16];

double[] r_MA0 = new double[16];

double[] r_ARMA23 = new double[16];

System.out.println("********************************************");

r_AR2 = momentsFunction(arrayAR2, "AR(2)");//выводим моментные функции для смоделированных моделей и сохраняем нкф каждой модели

for (int i = 1; i < 11; i++) {//погрешности первых 10 погрешностей, начиная с индекса 1.

eps += Math.pow(r_AR2[i] - r_[i], 2);

}

System.out.println("Погрешность: " + eps);

eps = 0;

System.out.println();

r_MA0 = momentsFunction(arrayMA0, "MA(0)");

for (int i = 1; i < 11; i++) {//погрешности первых 10 погрешностей, начиная с индекса 1.

eps += Math.pow(r_MA0[i] - r_[i], 2);

}

System.out.println("Погрешность: " + eps);

eps = 0;

System.out.println();

r_ARMA23 = momentsFunction(arrayARMA23, "ARMA(2,3)");

for (int i = 1; i < 11; i++) {//погрешности первых 10 погрешностей, начиная с индекса 1.

eps += Math.pow(r_ARMA23[i] - r_[i], 2);

}

System.out.println("Погрешность: " + eps);

eps = 0;

System.out.println("********************************************\n\n\n");

//Графики НКФ для лучших моделей

plotAll_R(r_, teorAR2, r_AR2, "AR(2)");

plotAll_R(r_, teorMA0, r_MA0, "MA(0)");

plotAll_R(r_, teorARMA23, r_ARMA23, "ARMA(2,3)");

 

//График выборки смоделированной СП

plotSP(arrayARMA23, 63.4437, 732.1111);

}

}







Дата добавления: 2015-10-19; просмотров: 355. Нарушение авторских прав; Мы поможем в написании вашей работы!



Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

Композиция из абстрактных геометрических фигур Данная композиция состоит из линий, штриховки, абстрактных геометрических форм...

Важнейшие способы обработки и анализа рядов динамики Не во всех случаях эмпирические данные рядов динамики позволяют определить тенденцию изменения явления во времени...

Принципы резекции желудка по типу Бильрот 1, Бильрот 2; операция Гофмейстера-Финстерера. Гастрэктомия Резекция желудка – удаление части желудка: а) дистальная – удаляют 2/3 желудка б) проксимальная – удаляют 95% желудка. Показания...

Ваготомия. Дренирующие операции Ваготомия – денервация зон желудка, секретирующих соляную кислоту, путем пересечения блуждающих нервов или их ветвей...

Билиодигестивные анастомозы Показания для наложения билиодигестивных анастомозов: 1. нарушения проходимости терминального отдела холедоха при доброкачественной патологии (стенозы и стриктуры холедоха) 2. опухоли большого дуоденального сосочка...

Понятие массовых мероприятий, их виды Под массовыми мероприятиями следует понимать совокупность действий или явлений социальной жизни с участием большого количества граждан...

Тактика действий нарядов полиции по предупреждению и пресечению правонарушений при проведении массовых мероприятий К особенностям проведения массовых мероприятий и факторам, влияющим на охрану общественного порядка и обеспечение общественной безопасности, можно отнести значительное количество субъектов, принимающих участие в их подготовке и проведении...

Тактические действия нарядов полиции по предупреждению и пресечению групповых нарушений общественного порядка и массовых беспорядков В целях предупреждения разрастания групповых нарушений общественного порядка (далееГНОП) в массовые беспорядки подразделения (наряды) полиции осуществляют следующие мероприятия...

Studopedia.info - Студопедия - 2014-2024 год . (0.015 сек.) русская версия | украинская версия