Написання програми на мові програмування Java

Java як об'єктно-орієнтована мова програмування, випущена компанією Sun Microsystems, загальна характеристика. Розгляд особистостей та етапів розробки програми з веб-інтерфейсом на мові програмування Java для реалізації повного факторного експерименту.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 23.04.2014
Размер файла 620,3 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

Размещено на http://www.allbest.ru/

Вступ

Метою даної роботи є написання програми на мові програмування Java, яка б реалізувала повний факторний експеримент (ПФЕ), що використовується для побудови лінійних і неповних статичних математичних моделей та володіє ортогональною матрицею планування. Для реалізації цього скористаємось середовищем розробки Eclipse.

Java (вимовляється Джава; інколи - Ява) -- об'єктно-орієнтована мова програмування, випущена компанією Sun Microsystems у 1995 році як основний компонент платформи Java. Зараз мовою займається компанія Oracle, яка придбала Sun Microsystems у 2009 році. Синтаксис мови багато в чому походить від C та C++. У офіційній реалізації, Java програми компілюються у байткод, який при виконанні інтерпретується віртуальною машиною для конкретної платформи.

Eclipse (вимовляється «і-клімпс», від англійського «затемнення») -- вільне модульне інтегроване середовище розробки програмного забезпечення. Розробляється і підтримується Eclipse Foundation. Написаний в основному на Java, і може бути використаний для розробки застосунків на Java і, за допомогою різніх плагінів, на інших мовах програмування, включаючи Ada, C, C++, COBOL, Fortran, Perl, PHP, Python, R, Ruby (включно з каркасом Ruby on Rails), Scala, Clojure та Scheme.

1. Постановка завдання

програмування експеримент java

Розробити програму з веб-інтерфейсом на мові програмування Java, для реалізації повного факторного експерименту. Використати для цього середовище розробки Eclipse.

Інтерфейс користувача передбачає сторінки для введення початкових даних та для виведення результатів обчислень.

Сторінки введення даних передбачають можливість вибору кількості факторів k, в залежності від якої регулюється подальша кількість полів введння для значень об'єктів досліджень Y, значень дисперсії D, кільості експериментів та значень факторів Z. Для полів введення має бути реалізована валідація даних.

На сторінці з результатами виконання обчислень мають бути відображені результати повного факторного експерименту, зокрема, матриця планування, розширена матриця планування, рівняння Y, степінь значимості коефіцієнтів рівняння Y та отримане значення Y.

2. Теоретичні відомості

Серія експериментів проводиться з метою вивчення впливу факторів xi(i = 1,…k) на значення відгуку моделі Y. Багатофакторний план дозволяє зробити це при меншій кількості експериментів. У локальній підобласті планування xioxi, i=1,…,k, де xio - початкове значення фактора, xi - інтервал варіювання. Для визначення лінійного рівняння відгуку моделі виду

Y=b0+b1X1+b2X2+…+bkXk+bk+1X1X2+b2k-1X1X2…Xk

досить експериментування тільки в крайніх точках Xi min=Xio-Xi та Xi max=Xio+Xi.

Перейдемо до нових змінних xi=(Xi-Xio)/Xi, для яких xi max=+1, ximin=-1. Тепер застосуємо стандартну процедуру побудови плану типу 2k, де k - число факторів. Матриця планування складається з 1+2k стовпців та 2k рядків. Перший стовпець відповідає константі в лінійному рівнянні (3.4) або нульовому фактору хо. Наступні k стовпців відповідають факторам х1,…,xk. Далі слідують такі комбінації з добутків по два, три, ... k факторів, що кожен фактор входить у них лінійно (тобто один раз). Кожен рядок матриці планування відповідає експерименту, що проводиться при зазначених у ній значеннях факторів. Заключає матрицю планування стовпець результатів. Наприклад, матриця планування типу 23 має вид:

Таблиця

Звідси слідує, що перший експеримент проводиться при мінімальних значеннях факторів х1, х2, x3 і результат його записується в y1; другий експеримент - при мінімальних значеннях факторів x1, x2 і максимальному значенні х3, а результат його записується в у2 і т.д.

У загальному випадку “+” і “-” розставляють за такими правилами. Перший стовпець весь складається з “+”. Другий наполовину заповнюється “-” і наполовину “+”. Третій у першій чверті заповнюється “-”, у другій “+”, у третій “-”, у четвертій “+”. У стовпці х3 “-” і “+” чергуються. Знаки добутків визначаються добутком знаків складових їхніх факторів. Матриця планування має чудові властивості, які значно полегшують процес відшукання коефіцієнтів лінійного рівняння відгуку (3.4):

сума всіх елементів стовпця дорівнює нулю;

сума всіх квадратів елементів стовпця дорівнює 2k;

добуток різних стовпців дорівнює нулю;

Нехай кількість факторів k=2 .Тоді матриця планування має вид:

Таблиця

У результаті проведення чотирьох експериментів відповідно до цього плану будемо мати чотири рівняння для визначення невідомих коефіцієнтів лінійної регресії:

y1=b0-b1-b2+b3

y2=b0-b1+b2-b3

y3=b0+b1-b2-b3

y4=b0+b1+b2+b3

Звідси находимо, що

Тепер рівняння відгуку моделі має вид:

y=b0+b1x1+b2x2+b3x1x2.

Зауважимо, що в цьому рівнянні використовуються перетворені змінні хі замість початкових Хі.

У загальному випадку k факторів рівняння коефіцієнти bi відшукуються за формулою:

де N - число експериментів у серії (тобто число рядків у матриці планування), aij - елемент матриці планування, - добуток j-го стовпця матриці планування на стовпець результатів.

Якщо число факторів велике, можна використовувати дробовий план експерименту, який має тільки частину (1/2, 1/4, 1/8, …) повного плану змішування лінійних ефектів з ефектами взаємодії. Наприклад, у плані типу 23 виберемо тільки ті рядки, для яких x3=x1x2.

Таблиця

Для взаємодії факторів у цьому випадку маємо:

x1x3=x1x1x2=x2

x2x3=x2x1x2=x1

x3x1x2=x3x2=x0

x1x2=x3

Рівняння відгуку має вид:

y=b0+b1x1+b2x2+b3x3.

Нехай тепер число факторів k=5. Будувати повний план 25 буде дуже важко. Виявляється, що дробовий план можна побудувати, не маючи повного плану. Змішаємо взаємодії x2x3=x4x1. Це співвідношення забезпечить такі рівності і 16 стовпців плану 25-\:

x0=x1x2x3x4 x1x4=x3x3

x1=x2x3x4 x1x5=x2x3x4x5

x2=x1x3x4 x2x5=x1x3x4x5

x3=x1x2x4 x3x5=x1x2x4x5

x4=x1x2x3 x4x5=x1x2x3x5

x5=x1x2x3x4x5 x2x3x5=x1x4x5

x1x2=x3x4 x1x2x5=x3x4x5

x1x3=x2x4 x1x3x5=x2x4x5

Введемо ще одне співвідношення x5=х2х3, що забезпечить такі рівності і 8 стовпців плану 25-2:

x0=x1x4x5=x2x3x5=x2x3x1x4

x1=x4x5=x2x3x4=x2x3x1x5

x2=x3x5=x1x3x4=x2x4x1x5

x3=x2x5=x1x2x4=x2x3x1x5

x4=x1x5=x2x3x4x5=x1x2x3

x5=x2x3=x1x4=x1x2x3x4x5

x1x2=x4x3=x4x5x2=x3x5x1

x1x3=x2x4=x4x5x3=x2x5x1

Тепер побудуємо матрицю планування так, щоб стовпець х4 задовольняв умові x2x3=x1x4 (або умові x4=x1x2x3) , а стовпець х5 - умові х5=x2x3. Таким чином, обидва співвідношення будуть задоволені.

Таблиця

Оскільки всі властивості матриці планування збереглися, формули (2.4) для відшукання коефіцієнтів лінійної регресії залишаються в силі.

3.Статистична обробка результатів факторного експерименту

Статистична обробка результатів факторного експерименту проводиться в три етапи. По-перше, роблять оцінку відтворюваності експерименту за критерієм Кочрена. Для цього визначають :

, ,

де yij - i-e спостереження відгуку моделі в j-ому експерименті.

Далі обчислюють значення критерію Кочрена і порівнюють його з табличним значенням Gкр, знайденим при рівні значимості =0.05, кількості експериментів N і кількості ступенів свободи m=p-1. Якщо G<Gкр, то експеримент є відтворюваним, і величину можна вважати оцінкою генеральної сукупності. Якщо виявилося, що G>Gкр, то необхідно збільшити кількість прогонів або зменшити інтервал варіювання факторів (збільшити точність вимірів).

Після побудови математичної моделі оцінюють значимість коефіцієнтів рівняння регресії. При цьому використовують значення критерію Ст`юдента

,

яке порівнюють з табличним значенням tкр, знайденим при рівні значимості =0,05 і кількості ступенів свободи m=N(р-1). Коефіцієнт bj вважається значимим, якщо відповідне значення tj>tкр. Інші N-L коефіцієнтів приймаються незначимими і виключаються з математичної моделі. На закінчення, при обробці результатів експерименту перевіряють адекватність отриманої математичної моделі досліджуваному об`єкту.

Адекватність оцінюють за критерієм Фішера, для чого складають дисперсію адекватності:

,

де yірег - обчислене за регресійним рівнянням значення i-oro експерименту, L - кількість значимих коефіцієнтів лінійної регресії. Значення критерію Фішера визначають за формулою:

.

Якщо F<1, то модель адекватна, якщо F>1, то слід звернутися до таблиці критерію Фішера. Критичне значення Fкр відшукують при рівні значимості =0,05 та кількості ступенів свободи m1=N(р-1) та m2=n-1.

Якщо F<Fкр, то модель адекватна, якщо F>Fкр, то модель не адекватна, і необхідно перейти до більш складної моделі (квадратичному рівнянню) або зменшити інтервал варіювання факторів.

4. Написання програми на мові Java

Для розробки даної програми в середовищі Eclipse створимо проект «Full factorial experiment», що містититиме необхідні для програми файли з розширенням java, js, css, xml, jar.

Побудова класів

Створимо клас BaseController, що міститиме необхідні контролери, та клас Calculations з методами, які реалізовуватимуть всі математичні обчислення для повного факторного експеременту.

package com.AED.controllers;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestParam;

import com.AED.services.Calculations;

@Controller

public class BaseController {

@Autowired Calculations calc;

@RequestMapping(value="index.html")

public String index() {

return "index";

}

@RequestMapping(value="error.html")

public String error() {

return "error";

}

@RequestMapping(value="results.html")

public String rez(@RequestParam(value="k", required=true) Integer k, HttpServletRequest req, ModelMap map) {

int stepK = (int) Math.pow(2, k);

Double[][] minMax = calc.createMinMaxMass(req);

String[][] simpleMass = new String[stepK+1][k*2+1];

String[][] mass = new String[stepK+1][stepK+2];

simpleMass = calc.matrixFillingSimple(simpleMass, k, stepK, minMax);

String htmlMassSimple = calc.createHtmlMassString(simpleMass, stepK+1, k*2+1);

map.put("simpleMass", htmlMassSimple);

map.put("k", k);

HttpSession session = req.getSession();

session.setAttribute("mass", mass);

session.setAttribute("minMax", minMax);

session.setAttribute("k", k);

session.setAttribute("stepK", stepK);

return "results";

}

@RequestMapping(value="finalResults.html")

public String finalResults(@RequestParam(value="p", required=true) Integer p, HttpServletRequest req, ModelMap map) {

HttpSession session = req.getSession();

String[][] mass = (String[][]) session.getAttribute("mass");

Double[][] minMax = (Double[][]) session.getAttribute("minMax");

Integer k = (Integer) session.getAttribute("k");

Integer stepK = (Integer) session.getAttribute("stepK");

Double[] yMass = calc.createValuesMass(req, stepK, "y");

Double[] dMass = calc.createValuesMass(req, stepK, "d");

double markD = calc.estimateVariance(dMass, stepK, p);

if(markD == 0){

return "notPlayable";

}

mass = calc.matrixFilling(mass, k, stepK, yMass);

String htmlMass = calc.createHtmlMassString(mass, stepK+1, stepK+2);

map.put("mass", htmlMass);

Double[] coefMass = calc.createCoeffMass(mass, stepK);

String yStr = calc.createYString(coefMass, mass);

map.put("yStr", yStr);

Double[] x = calc.createXMass(k, req, minMax);

if(x == null){

return "error";

}

Double[] massImportB = calc.createArrayImportanceB(coefMass, stepK, p, markD);

Boolean[] massTestImportB = calc.createArrayTestImportanceB(massImportB, stepK, p);

String testImportStr = calc.createTestImportStr(massImportB, massTestImportB);

map.put("testImportStr", testImportStr);

String finalCoefMassStr = calc.createFinalCoeffMassStr(coefMass, mass, massTestImportB);

map.put("finalCoefMassStr", finalCoefMassStr);

Double[][] xx = calc.createXiXdArray(minMax, k);

Double y = calc.calculateY(mass, x, coefMass, k, xx, massTestImportB);

map.put("y", y);

map.put("yStr", yStr);

return "finalResults";

}

}

package com.AED.services;

import java.util.ArrayList;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Component;

@Component

public class Calculations {

final int maxNumFactors = 5;

final int[][] arrayKohren = {{0, 3, 16, 36}, {2, 9392, 7341, 6602}, {4, 6841, 4366, 3720}, {8, 4377, 2462, 2022},

{15, 2758, 1429, 1144}, {20, 2205, 1108, 879}, {30, 1593, 0771, 0604},

{40, 1259, 595, 462}};

final double[][] arrayStiudent = {{6,12,24,38,48,70,80,150,160,300,350,600},

{2.4469, 2.1788, 2.0639, 2.0244, 2,0106, 1.9944, 1.9901, 1.9759, 1.9749, 1.9679, 1.9668, 1.9639}};

/**

* method that fills simple matrix

* @param mass

* @param k

* @param stepK

* @return

*/

public String[][] matrixFillingSimple(String mass[][], int k, int stepK, Double[][] minMax){

//filling head

mass[0][0] = "2^" + k;

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

mass[i][0] = String.valueOf(i);

}

for(int j = 1; j < k+1; j++){

mass[0][j] = "z" + String.valueOf(j);

mass[0][j+k] = "x" + String.valueOf(j);

}

//filling plan

mass = fillPlan(mass, k, k+1, k*2+1);

//main filling

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

for(int j = 1; j <= k; j++){

if(mass[i][j+k].equals("+1")){

mass[i][j] = String.valueOf(minMax[j-1][1]);

} else {

mass[i][j] = String.valueOf(minMax[j-1][0]);

}

}

}

return mass;

}

/**

* method that fills matrix

* @param mass

* @param k

* @param stepK

* @return

*/

public String[][] matrixFilling(String mass[][], int k, int stepK, Double[] y){

//filling head

mass[0][0] = "2^" + k;

mass[0][1] = "x0";

mass[0][stepK+1] = "y";

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

mass[i][0] = String.valueOf(i);

mass[i][1] = "+1";

mass[i][stepK+1] = String.valueOf(y[i-1]);

}

ArrayList<String> list = new ArrayList<>();

for(int j = 1; j <= k; j++){

list.add("x" + j);

}

String s;

for(int i = k+1; i <= stepK; i++){

ArrayList<String> list2 = new ArrayList<>();

for(String str: list){

list2.add(str);

}

for(String str: list2){

for(int p = 1; p <= k; p++){

s = str + "x" + p;

if(!availabilityChecking(list, s)){

list.add(s);

}

}

}

}

int x = 2;

for(String str: list){

mass[0][x] = str;

x++;

}

//filling plan

mass = fillPlan(mass, k, 2, k+2);

//main filling

int[][] massPlan = new int[stepK][k];

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

for(int j = 2; j < k+2; j++){

massPlan[i-1][j-2] = Integer.parseInt(mass[i][j]);

}

}

int[][] massMain = new int[stepK+1][stepK+2];

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

for(int j = k+2; j < stepK+1; j++){

String col = mass[0][j];

col = col.replace("x", "");

int colMass[] = new int[col.length()];

for(int n = 0; n < col.length(); n++){

colMass[n] = Integer.parseInt(String.valueOf(col.substring(n, n+1)));

}

for(int m: colMass){

if(massMain[i][j] == 0){

massMain[i][j] = 1 * massPlan[i-1][m-1];

} else {

massMain[i][j] = massMain[i][j] * massPlan[i-1][m-1];

}

}

}

}

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

for(int j = k+2; j < stepK+1; j++){

if(massMain[i][j] > 0){

mass[i][j] = "+1";

} else {

mass[i][j] = "-1";

}

}

}

return mass;

}

/**

* method to fill a plan in matrix

* @param mass

* @param k

* @param stepK

*/

public String[][] fillPlan(String[][] mass, int k, int colBegin, int colEnd) {

int x = 1, y = -x;

for(int j = colBegin; j < colEnd; j++){

for(int i = 1; i <= Math.pow(2, k); i++){

if(y >= 0){

mass[i][j] = "+1";

} else {

mass[i][j] = "-1";

}

if(y == x-1){

y = -x;

} else {

y++;

}

}

x = x * 2;

y = -x;

}

return mass;

}

/**

* method to check the availability of the item in the contact list

* @param list

* @param s

* @return

*/

public boolean availabilityChecking(ArrayList<String> list, String s) {

if(list.size() == 0){

return false;

}

for(String str: list){

s.replace("x", "");

int num = 0;

char mass[] = s.toCharArray();

for(char c: mass){

if(str.indexOf(c) != -1){

num++;

}

}

if(num == s.length()){

return true;

}

}

return false;

}

/**

* method that creates html string array

* @param mass

* @param rows

* @param cols

* @return

*/

public String createHtmlMassString(String[][] mass, int rows, int cols) {

String htmlMassSimple = "<table border='1'>";

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

htmlMassSimple = htmlMassSimple + "<tr>";

for(int j = 0; j < cols; j++){

htmlMassSimple = htmlMassSimple + "<td>" + mass[i][j] + "</td>";

}

htmlMassSimple = htmlMassSimple + "</tr>";

}

htmlMassSimple = htmlMassSimple + "</table>";

return htmlMassSimple;

}

/**

* method that create an array with the values of factors

* @param req

* @param minMax

* @return

*/

public Double[][] createMinMaxMass(HttpServletRequest req) {

Double[][] minMax = new Double[maxNumFactors][2];

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

try{

minMax[i][0] = Double.valueOf(req.getParameter("i" + (i+1) + "min"));

minMax[i][1] = Double.valueOf(req.getParameter("i" + (i+1) + "max"));

} catch(NullPointerException e) {

System.out.println(e);

break;

}

}

return minMax;

}

/**

* method that create an array with the values of Xi

* @param req

* @param x

* @return

*/

public Double[] createXMass(Integer k, HttpServletRequest req, Double[][] minMax) {

Double[] x = new Double[k];

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

try{

x[i] = Double.valueOf(req.getParameter("x" + (i+1)));

if(x[i] < minMax[i][0] || x[i] > minMax[i][1]){

return null;

}

} catch(NullPointerException e) {

System.out.println(e);

break;

}

}

return x;

}

/**

* method that create an array with the values y

* @param req

* @param y

* @return

*/

public Double[] createValuesMass(HttpServletRequest req, int stepK, String s) {

Double[] d = new Double[stepK];

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

try{

d[i] = Double.valueOf(req.getParameter(s + (i+1)));

} catch(NullPointerException e) {

System.out.println(e);

break;

}

}

return d;

}

/**

* method that create an array with the values of coefficients

* @param mass

* @param k

* @param stepK

* @return

*/

public Double[] createCoeffMass(String[][] mass, int stepK) {

Double[] b = new Double[stepK];

Double y, x, d;

for(int j = 1; j <= stepK; j++){

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

y = Double.parseDouble(mass[i][stepK+1]);

x = Double.parseDouble(mass[i][j]);

d = y * x;

if(b[j-1] != null){

b[j-1] = b[j-1] + d;

} else {

b[j-1] = (y * x);

}

}

b[j-1] = b[j-1]/stepK;

}

return b;

}

/**

* method that creates string y

* @param b

* @param k

* @return

*/

public String createYString(Double[] b, String[][] mass) {

String y;

y = b[0] + "";

for(int i = 1; i < b.length; i++){

if(b[i] >= 0){

y = y + " + " + b[i] + mass[0][i+1];

} else {

y = y + " - " + (b[i]*(-1)) + mass[0][i+1];

}

}

return y;

}

/**

* method that calculates Y

* @param mass

* @param minMax

* @param x

* @param stepK

* @return

*/

public Double calculateY(String[][] mass, Double[] x, Double[] coefMass, Integer k, Double[][] xx, Boolean[] massTestImportB) {

Double y = coefMass[0];

Double[] xi = new Double[k];

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

if(massTestImportB[i-1] == true){

xi[i-1] = (x[i-1] * xx[i-1][0])/xx[i-1][1];

y = y + coefMass[i] * xi[i-1];

}

}

for(int i = k; i < coefMass.length; i++){

if(massTestImportB[i] == true){

Integer a;

Double z = 1.0;

String s = mass[0][k+2];

for(int j = 0; j < s.length()/2; j++){

a = Integer.parseInt(s.substring(1, 2));

z = z * xi[a-1];

}

y = y + coefMass[i] * z;

}

}

return y;

}

/**

* method that creates XiXd array

* @param minMax

* @param k

* @return

*/

public Double[][] createXiXdArray(Double[][] minMax, Integer k) {

Double[][] xx = new Double[k][2];

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

xx[i][0] = (minMax[i][0] + minMax[i][1])/2;

xx[i][1] = (minMax[i][1] - minMax[i][0])/2;

}

return xx;

}

/**

* method that exercise test the reproducibility

* @param dMass

* @return

*/

public double estimateVariance(Double[] dMass, Integer stepK, Integer p) {

double d, dT, max = 0.0, sum = 0.0;

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

sum = sum + dMass[i];

if(dMass[i] > max){

max = dMass[i];

}

}

d = max/sum;

int rows[] = {0, 0};

int rowsV[] = {0, 0};

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

if(arrayKohren[i][0] == stepK){

rows[0] = i;

}

}

if(rows[0] == 0){

if(stepK == 16){

rows[0] = 4;

rows[1] = 5;

rowsV[0] = 15;

rowsV[1] = 20;

} else {

rows[0] = 6;

rows[1] = 7;

rowsV[0] = 30;

rowsV[1] = 40;

}

}

int cols[] = {0, 0};

if(p == 4){

cols[0] = 1;

} else {

cols[0] = 2;

cols[1] = 3;

}

double dsT[] = {0.0, 0.0};

if(cols[1] == 0 && rows[1] == 0){

dT = arrayKohren[rows[0]][cols[0]] / 10000.0;

} else {

if(cols[1] != 0 && rows[1] == 0){

dsT[0] = arrayKohren[rows[0]][cols[0]] / 10000.0;

dsT[1] = arrayKohren[rows[0]][cols[1]] / 10000.0;

dT = 0.15*(dsT[1] - dsT[0]) + dsT[0];

} else {

if(cols[1] == 0 && rows[1] != 0){

dsT[0] = arrayKohren[rows[0]][cols[0]] / 10000.0;

dsT[1] = arrayKohren[rows[1]][cols[0]] / 10000.0;

dT = ((stepK - rowsV[0])/(rowsV[1] - rowsV[0]))*(dsT[1] - dsT[0]) + dsT[0];

} else {

double korh[] = {0.0, 0.0};

dsT[0] = arrayKohren[rows[0]][cols[0]] / 10000.0;

dsT[1] = arrayKohren[rows[0]][cols[1]] / 10000.0;

korh[0] = 0.15*(dsT[1] - dsT[0]) + dsT[0];

dsT[0] = arrayKohren[rows[1]][cols[0]] / 10000.0;

dsT[1] = arrayKohren[rows[1]][cols[1]] / 10000.0;

korh[1] = 0.15*(dsT[1] - dsT[0]) + dsT[0];

dT = ((stepK - rowsV[0])/(rowsV[1] - rows[0]))*(korh[1] - korh[0]) + korh[0];

}

}

}

if(d < dT){

return sum/stepK;

} else {

return 0;

}

}

/**

* method that creates an array importance of coefficients b

* @param coefMass

* @param stepK

* @param p

* @param markD

* @return

*/

public Double[] createArrayImportanceB(Double[] coefMass, Integer stepK, Integer p, double markD) {

Double[] mass = new Double[stepK];

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

if(coefMass[i] < 0){

coefMass[i] = coefMass[i] * -1;

}

mass[i] = coefMass[i] * Math.sqrt(stepK * p / markD);

}

return mass;

}

/**

* method that validates the importance of coefficients

* @param massImportB

* @param stepK

* @param p

* @return

*/

public Boolean[] createArrayTestImportanceB(Double[] massImportB, Integer stepK, Integer p) {

Boolean[] mass = new Boolean[stepK];

double tKrit = 0.0;

int sV = stepK * (p - 1);

System.out.println("sV = " + sV);

if(sV > 600){

tKrit = arrayStiudent[1][11];

} else {

if(sV < 50){

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

if(arrayStiudent[0][i] == sV){

tKrit = arrayStiudent[1][i];

}

}

} else {

for(int i = 5; i < 12; i++){

if(arrayStiudent[0][i] < sV && arrayStiudent[0][i+1] > sV){

tKrit = ((sV - arrayStiudent[0][i]) / (arrayStiudent[0][i+1] - arrayStiudent[0][i])) * (arrayStiudent[1][i+1] - arrayStiudent[1][i]) + arrayStiudent[1][i];

break;

}

}

}

}

System.out.println("tKrit = " + tKrit);

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

if(massImportB[i] < tKrit){

mass[i] = false;

} else {

mass[i] = true;

}

}

return mass;

}

/**

* method that creates string the importance of coefficients

* @param massImportB

* @param massTestImportB

* @return

*/

public String createTestImportStr(Double[] massImportB, Boolean[] massTestImportB) {

String str = "";

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

if(massTestImportB[i] == true){

str = str + "t" + i + " = " + massImportB[i] + " - significant<br/>";

} else {

str = str + "t" + i + " = " + massImportB[i] + " - ingnificant<br/>";

}

}

return str;

}

/**

* method that creates final string y

* @param b

* @param mass

* @param massTestImportB

* @return

*/

public String createFinalCoeffMassStr(Double[] b, String[][] mass, Boolean[] massTestImportB) {

String y = "";

if(massTestImportB[0] == true){

y = b[0] + "";

}

for(int i = 1; i < b.length; i++){

if(massTestImportB[i] == true){

if(b[i] >= 0){

y = y + " + " + b[i] + mass[0][i+1];

} else {

y = y + " - " + (b[i]*(-1)) + mass[0][i+1];

}

}

}

return y;

}

}

5.Розробка web-інтерфейсу

Створимо необхідні нам jsp-файли та css-файл, що будуть реалізовувати web-інтерфейс.

index. jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Full factorial experiment</title>

<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/styles/styles.css"/>

<script src="${pageContext.servletContext.contextPath}/scripts/jquery-latest.js"></script>

<script src="${pageContext.servletContext.contextPath}/scripts/jquery.validate.js"></script>

<script src="${pageContext.servletContext.contextPath}/scripts/index.js"></script>

<script>

$(document).ready(function(){

$("#form").validate({

messages: {

k: " Incorrect"

}

});

});

</script>

</head>

<body>

<h2>Full factorial experiment</h2>

<p><a href="index.html">Home</a></p>

<hr/>

<form id="form" action="results.html">

<h3>Enter data</h3>

k: <input type="text" name="k" size="2" min="1" max="5" maxlength="1" class="required" onchange="inputFields()"></input>

<span id="inputs"></span>

<p><input type="submit" value="Ok"/></p>

</form>

</body>

</html>

results.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Full factorial experiment</title>

<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/styles/styles.css"/>

<script src="${pageContext.servletContext.contextPath}/scripts/jquery-latest.js"></script>

<script src="${pageContext.servletContext.contextPath}/scripts/jquery.validate.js"></script>

<script src="${pageContext.servletContext.contextPath}/scripts/result.js"></script>

<script>

$(document).ready(function(){

$("#form").validate({});

});

</script>

</head>

<body onload="go()" >

<h2>Full factorial experiment</h2>

<p><a href="index.html">Home</a></p>

<hr/>

<h3>Results:</h3>

<h4>Planning matrix</h4>

${simpleMass}

<input type="hidden" name="k" value="${k}"></input>

<form id="form" action="finalResults.html">

<p><span id="inputs"></span></p>

</form>

</body>

</html>

finalResults.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Full factorial experiment</title>

<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/styles/styles.css"/>

</head>

<body>

<h2>Full factorial experiment</h2>

<h3>Final results:</h3>

<p><a href="index.html">Home</a></p>

<hr/>

<h4>Extend planning matrix</h4>

${mass}

<h4>Evaluation of the significance coefficients b</h4>

<h5>y(x) = ${yStr}</h5>

<h5>${testImportStr}</h5>

<h5>y(x) = ${finalCoefMassStr}</h5>

<h5>y(x) = ${y}</h5>

</body>

</html>

error.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/styles/styles.css"/>

</head>

<body>

<h2>Full factorial experiment</h2>

<p><a href="index.html">Home</a></p>

<h3 class="error">Incorrect data</h3>

</body>

</html>

notPlayable.jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

<title>Full factorial experiment</title>

<link rel="stylesheet" type="text/css" href="${pageContext.servletContext.contextPath}/styles/styles.css"/>

</head>

<body>

<h2>Full factorial experiment</h2>

<p><a href="index.html">Home</a></p>

<h3 class="error">Experiment is not playable</h3>

</body>

</html>

styles.css

body{

font-family: Comic Sans MS, Tahoma

}

.error{

color: red;

}

a{

color: grey;

text-decoration: none

}

a:hover{

color: black;

}

6.Написання java-скриптів

Створимо два js-файли, що міститимуть скрипти, необхідні для правильного відображення полів введення даних на сторінках.

index.js

function inputFields(){

var k = document.getElementsByName("k")[0].value;

$("#inputs").empty();

for(var i = 1; i <= k; i++){

$("#inputs").append("<p>z" + i + " min: <input type='text' name='i" + i + "min' size='3' maxlength='4' min='-9999999' class='required'></input> max: <input type='text' name='i" + i + "max' size='3' maxlenth='4' min='-9999999' class='required'></input></p>");

}

}

result.js

function go(){

var k = document.getElementsByName("k")[0].value;

var stepK = Math.pow(2, k);

$("#inputs").empty();

$("#inputs").append("<h4>Enter the value of Yi and Di</h4>");

for(var i = 1; i <= stepK; i++){

$("#inputs").append("<p>y" + i + ": <input type='text' name='y" + i + "' size='3' maxlength='4' min='-9999999' class='required'></input> D" + i + ": <input type='text' name='d" + i + "' size='3' maxlength='4' min='-9999999' class='required'></input></p>");

}

$("#inputs").append("<h4>Select the value of p</h4>");

$("#inputs").append("<p>p: <input type='radio' name='p' value='4' checked>4</input><input type='radio' name='p' value='20'>20</input></p>");

$("#inputs").append("<h4>Enter the value of Xi in the range from Zmin to Zmax</h4>");

for(var i = 1; i <= k; i++){

$("#inputs").append("<p>X" + i + ": <input type='text' name='x" + i + "' size='10' maxlength='9' min='-9999999' class='required'></input></p>");

}

$("#inputs").append("<p><input type='submit' id='ok' value='Ok'></input></p>");

7.Створення конфігураційних файлів

Створимо три xml-файли, що міститимуть конфігурації, необхідні для правильної роботи програми.

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xmlns:context="http://www.springframework.org/schema/context"

xmlns:tx="http://www.springframework.org/schema/tx"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd

http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<context:annotation-config/>

<context:component-scan base-package="com.AED" />

<context:component-scan base-package="com.AED.services" />

</beans>

dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

<context:annotation-config/>

<context:component-scan base-package="com.AED.controllers" />

<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

<property name="prefix" value="/WEB-INF/jsp/"/>

<property name="suffix" value=".jsp"/>

<property name="requestContextAttribute" value="requestContext"/>

</bean>

</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">

<display-name>FullFactorialExperiment</display-name>

<listener>

<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>

</listener>

<servlet>

<servlet-name>dispatcher</servlet-name>

<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>dispatcher</servlet-name>

<url-pattern>*.html</url-pattern>

</servlet-mapping>

<session-config>

<session-timeout>30</session-timeout>

</session-config>

<welcome-file-list>

<welcome-file>index.html</welcome-file>

</welcome-file-list>

</web-app>

Висновки

В курсовій роботі з дисципліни "Автоматизації експериментальних процесів", написаній на мові програмування Java, мені вдалось виконати всі поставлені завдання і правильно розробити програму для реалізації повного факторного експерименту.

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

Результатом виконання моєї роботи є програма, яка має зручний та зрозумілий графічний інтерфейс, дає можливість контролю вірності введення і редагування даних та реалізує повний факторний експеримент.

Список інформаційних джерел

1. Герберт Шилдт - Java, повний посібник, 8-ме видання [Текст] : переклад з англ. - М. : ООО «І.Д. Вільямс», 2012.

2. Стеценко І.В. Лабораторний практикум [Текст] : Автоматизація експериментальних досліджень.

3. Смітюк Н.М. Лекції по модулю «Метрологія та математичне планування» [Текст] : Межа виявлення. Діапазон визначуваного вмісту

4. Інтернет джерела:

5. Вікіпедія - Java [Електронний ресурс] режим доступу: https://uk.wikipedia.org/wiki/Java

6. Вікіпедія - Eclipse [Електронний ресурс] режим доступу: https://uk.wikipedia.org/wiki/Eclipse

7. Лекція на тему: «Повний факторний експеримент» [Електронний ресурс] режим доступу: http://lib.mdpu.org.ua/e-book/teor_plan/Lection1/Lection1.html

Додаток А

Результати роботи програми

Рис.1

Рис.2

Рис.3

Рис.4.

Рис.5

Рис.6

Рис.7

Рис.8

Рис.9

Рис.10

Рис.11

Размещено на Allbest.ru


Подобные документы

  • Загальна характеристика та особливості програмування сучасних систем автоматизованого проектування. Порівняльна характеристика середовищ розробки прикладних програм на мові JAVA. Ознайомлення з принципами і особливостями роботи певних класів, компонентів.

    курсовая работа [2,0 M], добавлен 31.01.2014

  • Огляд об’єктно-реляційних перетворень. Схема роботи сервлету. Технології Object-relational mapping, JavaServlet, JSP та Spring framework для розробки web-проектів на мові програмування Java. Генерація текстових документів у відповідь на запит клієнта.

    курсовая работа [295,9 K], добавлен 19.03.2015

  • Модель в об’єктно-орієнтованих мовах програмування. Програмна модель створена на мові програмування С++, в середовищі програмування Borland С++ Builder 6.0. Вибір засобів реалізації програми. Види інструментів для об'єктно-орієнтованої розробки.

    курсовая работа [116,9 K], добавлен 06.06.2010

  • Концепції об'єктно-орієнтованого програмування. Методи створення класів. Доступ до методів базового класу. Структура даних, функції. Розробка додатку на основі діалогових вікон, програми меню. Засоби розробки програмного забезпечення мовами Java та С++.

    курсовая работа [502,5 K], добавлен 01.04.2016

  • Розробка та тестування додатків, які базуються на елементах мови програмування Java, принципи програмування в її середовищі. Вивчення переваг Java-платформи, прикладний програмний інтерфейс та особливості сучасних засобів створення Java-додатків.

    дипломная работа [2,8 M], добавлен 22.06.2011

  • Розробка програми на мові програмування С++ з використанням об'єктно-орієнтованого програмування. Робота з файлами, графікою, класами, обробка числової інформації. Графічні засоби мови програмування. Алгоритм задачі та допоміжні програмні засоби.

    курсовая работа [102,5 K], добавлен 14.03.2013

  • Характеристика методів та етапів створення простих програм на мові програмування С++. Особливості структури та порядку запуску програми. Функції вводу і виводу та маніпулятори мови С++. Робота з одновимірними масивами. Символьна інформація та рядки.

    дипломная работа [91,2 K], добавлен 19.06.2010

  • Аналіз особливостей мови програмування Java та середовища Android Studio. Розробка програмного забезпечення для якісного та ефективного вивчення іноземних слів. Побудова базових алгоритмів і структури даних. Вибір мови програмування, реалізація програми.

    курсовая работа [335,3 K], добавлен 11.01.2015

  • Розробка програми на мові програмування С++ з використанням об’єктно-орієнтованого програмування, яка включає в себе роботу з файлами, класами, обробку числової інформації і роботу з графікою. Структура класів і об’єктів. Лістинг та алгоритм програми.

    курсовая работа [104,4 K], добавлен 14.03.2013

  • Розгляд особливостей мови програмування С++: основні можливості, характеристика функцій. Аналіз файлів з вхідними даними. Використання похідних класів як ефективний засіб об’єктно-орієнтованого програмування. Способи роздруківки графічного вирішення.

    курсовая работа [510,9 K], добавлен 14.03.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.