Advertisement
cd62131

MatrixGUI.java

Aug 11th, 2017
302
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 3.52 KB | None | 0 0
  1. import java.awt.BorderLayout;
  2. import java.awt.Container;
  3. import java.awt.GridLayout;
  4. import java.awt.event.ActionEvent;
  5. import java.awt.event.ActionListener;
  6.  
  7. import javax.swing.JButton;
  8. import javax.swing.JFrame;
  9. import javax.swing.JLabel;
  10. import javax.swing.JPanel;
  11. import javax.swing.JTextField;
  12.  
  13. class Matrix {
  14.     public static double[][] inverse(double[][] ix) {
  15.         double[][] ma = new double[ix.length][ix.length];
  16.         for (int i = 0; i < ma.length; i++) {
  17.             for (int j = 0; j < ma[0].length; j++) {
  18.                 ma[i][j] = ix[i][j];
  19.             }
  20.         }
  21.         double[][] re = new double[ma.length][ma.length];
  22.         int n = ma.length;
  23.         for (int i = 0; i < n; i++) {
  24.             for (int j = i + 1; j < n; j++) {
  25.                 ma[j][i] /= ma[i][i];
  26.                 for (int k = i + 1; k < n; k++) {
  27.                     ma[j][k] -= ma[i][k] * ma[j][i];
  28.                 }
  29.             }
  30.         }
  31.         for (int k = 0; k < n; k++) {
  32.             for (int i = 0; i < n; i++) {
  33.                 if (i == k) {
  34.                     re[i][k] = 1;
  35.                 } else {
  36.                     re[i][k] = 0;
  37.                 }
  38.             }
  39.             for (int i = 0; i < n; i++) {
  40.                 for (int j = i + 1; j < n; j++) {
  41.                     re[j][k] -= re[i][k] * ma[j][i];
  42.                 }
  43.             }
  44.             for (int i = n - 1; i >= 0; i--) {
  45.                 for (int j = i + 1; j < n; j++) {
  46.                     re[i][k] -= ma[i][j] * re[j][k];
  47.                 }
  48.                 re[i][k] /= ma[i][i];
  49.                 if (Double.isNaN(re[i][k])) {
  50.                     ;
  51.                 }
  52.             }
  53.         }
  54.         return re;
  55.     }
  56. }
  57.  
  58. class MatrixPanel extends JPanel {
  59.     private static final long serialVersionUID = 1L;
  60.     private int n;
  61.     private JTextField text[][];
  62.  
  63.     public MatrixPanel(int n, String tittle) {
  64.         this.n = n;
  65.         text = new JTextField[n][n];
  66.         JPanel panel = new JPanel();
  67.         panel.setLayout(new GridLayout(n, n));
  68.         setLayout(new BorderLayout());
  69.         for (int i = 0; i < n; i++) {
  70.             for (int j = 0; j < n; j++) {
  71.                 text[i][j] = new JTextField(5);
  72.                 text[i][j].setText(Double.toString(0));
  73.                 panel.add(text[i][j]);
  74.             }
  75.         }
  76.         add(new JLabel(tittle), BorderLayout.NORTH);
  77.         add(panel, BorderLayout.CENTER);
  78.     }
  79.  
  80.     public void getMatrix(double[][] a) {
  81.         for (int i = 0; i < n; i++) {
  82.             for (int j = 0; j < n; j++) {
  83.                 a[i][j] = Double.parseDouble(text[i][j].getText());
  84.             }
  85.         }
  86.     }
  87.  
  88.     public void setMatrix(double[][] a) {
  89.         for (int i = 0; i < n; i++) {
  90.             for (int j = 0; j < n; j++) {
  91.                 text[i][j].setText(Double.toString(a[i][j]));
  92.             }
  93.         }
  94.     }
  95. }
  96.  
  97. public class MatrixGUI {
  98.     private JButton bt1, bt2;
  99.     private JPanel com;
  100.     private JFrame f;
  101.     private MatrixPanel mpB, mpA;
  102.     private final int n = 5;
  103.     private double[][] inv = new double[n][n];
  104.     private double[][] mat = new double[n][n];
  105.     private final double[][] zero = new double[n][n];
  106.  
  107.     public MatrixGUI() {
  108.         f = new JFrame("行列計算");
  109.         f.setSize(600, 400);
  110.         Container c = f.getContentPane();
  111.         mpA = new MatrixPanel(n, "行列A");
  112.         mpB = new MatrixPanel(n, "行列B");
  113.         c.add(mpA, BorderLayout.WEST);
  114.         c.add(mpB, BorderLayout.EAST);
  115.         c.add(new JLabel("=>"));
  116.         com = new JPanel();
  117.         bt1 = new JButton("逆行列");
  118.         bt1.addActionListener(new ActionListener() {
  119.             @Override
  120.             public void actionPerformed(ActionEvent e) {
  121.                 mpA.getMatrix(mat);
  122.                 inv = Matrix.inverse(mat);
  123.                 mpB.setMatrix(inv);
  124.             }
  125.         });
  126.         bt2 = new JButton("リセット");
  127.         bt2.addActionListener(new ActionListener() {
  128.             @Override
  129.             public void actionPerformed(ActionEvent e) {
  130.                 mpA.setMatrix(zero);
  131.                 mpB.setMatrix(zero);
  132.             }
  133.         });
  134.         com.add(bt1);
  135.         com.add(bt2);
  136.         c.add(com, BorderLayout.SOUTH);
  137.         f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  138.         f.setVisible(true);
  139.     }
  140.  
  141.     public static void main(String args[]) {
  142.         new MatrixGUI();
  143.     }
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement