
Аналітичний розв’язок
0.3 |
0.2 |
0 |
0 |
0.5 |
0 |
0 |
0.5 |
0.4 |
0.1 |
0 |
0 |
0 |
0.3 |
0 |
0.7 |
0 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
0 |
0 |
0 |
0.4 |
0.6 |
0.5 |
0 |
0.3 |
0.2 |
0 |
0 |
C= (C1,C2,C3,C4);
C1=0.3C1+0.5C6;
C2=0.2C1+0.5C2+0.3C3;
C3=0.4C2+0.3C6;
C4=0.1C2+0.7C3+0.2C6;
C5=0.5C1+C4+0.4C5;
C6=0.6C5;
Отже,
C1=0,1378476420798065;
C2=0,1182587666263603;
C3=0,1051995163240629;
C4=0,1240628778718259;
C5=0,3216444981862152;
C6=0,1929866989117292.
Текст програми:
Main.java
package lab3;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
new Window();
}
}
Window.java
package lab3;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.SpringLayout;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
public class Window implements ActionListener,KeyListener, ChangeListener {
public static int t=1;
JTextField takt;
public static JLabel b1l,resLbl= new JLabel();
public static String b1s;
JLabel per,im1,im2;
JButton ok;
JFrame wnd;
static String resStr [][]=new String [1][7], resStr1[][]=new String [7][8];
Window() {
wnd=new JFrame("Асіїв Андріани, КН-31");
wnd.setLayout(null);
wnd.setResizable(false);
wnd.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
wnd.setBounds(100, 100, 1000,550);
String path = "C://graf.jpg";
ImageIcon image = new ImageIcon(path);
JLabel imlbl = new JLabel(image);
imlbl.setBounds(0, 0, 500,500);
JLabel ttakt = new JLabel("Кількість тактів:");
ttakt.setBounds(620, 10, 100, 20);
takt = new JTextField();
takt.setBounds(720, 10, 80, 20);
takt.addKeyListener(this);
ok = new JButton("OK");
ok.setBounds(805, 10, 80, 20);
ok.addActionListener(this);
per = new JLabel("Таблиця переходів");
per.setBounds(655, 35, 200, 20);
im1 = new JLabel("Кількість переходів між відповідними станами автомата");
im1.setBounds(600, 200, 400, 20);
im2 = new JLabel("Імовірності перебування автомата у станах");
im2.setBounds(600, 380, 400, 20);
b1s = new String("");
b1s="";
b1l = new JLabel();
b1l.setBounds(620, 80, 600, 40);
for (int i=0;i<7;i++){
resStr[0][i]="0";
for (int j=0;j<8;j++)
resStr1[i][j]="0";
}
new Avtomat(1);
String tmpArr[][] = new String [7][8];
for (int i=0;i<7;i++){
tmpArr[i][0]="Z"+i;
for (int j=1;j<8;j++)
tmpArr[i][j]=Double.toString(lab3.Avtomat.pm[i][j-1]);
}
//Створення панелі, яка буде містити матрицю P
String[] names = new String []{"P","Z0","Z1","Z2","Z3","Z4","Z5","Z6"};
JTable table = new JTable(tmpArr,names);
JScrollPane sp= new JScrollPane(table);
//SpringLayout layout = new SpringLayout();
JPanel panel = new JPanel(new SpringLayout());
panel.add(sp);
panel.setBounds(500, 60, 580, 130);
wnd.add(panel);
//Створення панелі, яка буде містити матрицю B
String[] namesP = new String []{"B","Z0","Z1","Z2","Z3","Z4","Z5","Z6"};
JTable tableP = new JTable(resStr1,namesP);
JScrollPane spP= new JScrollPane(tableP);
JPanel panel1 = new JPanel(new SpringLayout());
panel1.add(spP);
panel1.setBounds(500, 240, 500, 130);
wnd.add(panel1);
//B1:
String[] namesB = new String []{"Z0","Z1","Z2","Z3","Z4","Z5","Z6"};
JTable tableB = new JTable(resStr,namesB);
JScrollPane spB= new JScrollPane(tableB);
JPanel panel2 = new JPanel(new SpringLayout());
panel2.add(spB);
panel2.setBounds(500, 410, 500, 35);
wnd.add(panel2);
resLbl.setBounds(500, 450, 500, 50);
wnd.add(new JLabel());
wnd.add(imlbl);
wnd.add(ttakt);
wnd.add(takt);
wnd.add(ok);
wnd.add(b1l);
wnd.add(resLbl);
wnd.add(per);
wnd.add(im1);
wnd.add(im2);
wnd.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
wnd.setVisible(false);
new Avtomat(t);
wnd.setVisible(true);
}
@Override
public void stateChanged(ChangeEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void keyReleased(KeyEvent arg0) {
// TODO Auto-generated method stub
try {
t=Integer.parseInt(takt.getText());
ok.setEnabled(true);
}catch (Exception e) {
ok.setEnabled(false);
}
}
@Override
public void keyTyped(KeyEvent arg0) {
// TODO Auto-generated method stub
}
}
Avtomat.java
package lab3;
import java.text.DecimalFormat;
import java.util.Random;
public class Avtomat {
public double b1[] = new double [7];
int z=0,b[][],sumst[];
static double pm[][];
public Avtomat(int t){
//Матриця рядків для формування табиці вхідних даних
pm = new double [][]{
{0, 0.4, 0, 0, 0.5, 0 ,0.1},
{0, 0.3, 0.2, 0, 0, 0.5 ,0},
{0, 0, 0.5, 0.4, 0.1, 0 ,0},
{0, 0, 0.3, 0, 0.7, 0 ,0},
{0, 0, 0, 0, 0, 1,0},
{0, 0, 0, 0, 0, 0.4 ,0.6},
{0, 0.5, 0, 0.3, 0.2, 0,0}};
b = new int [7][7];
for(int i=0; i<7; i++){
for(int j=0; j<7; j++)
b[i][j]=0;
}
for (int i=0; i<t; i++){
double p=0;
//Генерація випадкового числа
Random r = new Random();
double vch = r.nextDouble(); //Випадкове число
System.out.printf(" %.2f",vch);
for (int j=0; j<7; j++) {
p=0;
for (int k=0; k<=j; k++)
p+=pm[z][k]; //Сума р
if(vch<p){
b[z][j]++; //Заповнюємо матрицю b
z=j; //Стане поточним значенням z
break;
}
}
}
for (int i=0;i<7;i++){
lab3.Window.resStr1[i][0]="Z"+i;
for (int j=1;j<8;j++)
lab3.Window.resStr1[i][j]=Integer.toString(b[i][j-1]);
}
for (int i=0;i<7;i++)
b1[i]=0;
for (int j=0; j<7; j++){
for(int z=0; z<7; z++)
b1[j]+=b[j][z];
b1[j]/=t;
lab3.Window.resStr[0][j]=Double.toString(b1[j]);
}
DecimalFormat df = new DecimalFormat("0.00");
lab3.Window.resLbl.setText("<html>Ймовірність перебування <br> на виході автомата 1: "+df.format(b1[3]+b1[5]+b1[6])+"</html>");
}
}
Результат виконання програми
Висновок. На даній лабораторній роботі я вивчила процес функціонування дискретного скінченого стохастичного автомата та знайшла його ймовірності характеристики за даними експерименту.