//Matrices.java import javax.swing.*; import java.awt.*; import java.text.*; import java.util.*; public class Matrices extends JApplet { public void init () { JTextArea textarea = new JTextArea(22,100); textarea.setLineWrap( true ); textarea.setFont( new Font("Courier",Font.BOLD,14) ); JScrollPane scrollpane = new JScrollPane(textarea); DecimalFormat d4 = new DecimalFormat ("0.0000"); String input; StringTokenizer st; int Arows, Acols, Brows, Bcols; int r=0, c=0; double sum, detA, detB; double [][] adjA; double [][] adjB; double [][] invA; double [][] invB; input = JOptionPane.showInputDialog("Enter A matrix's #rows and #cols");//, st = new StringTokenizer(input); Arows = Integer.parseInt(st.nextToken()); Acols = Integer.parseInt(st.nextToken()); double [][] A = new double[Arows][Acols]; input = JOptionPane.showInputDialog("Enter/paste A matrix's components separated by spaces in row major order");//, st = new StringTokenizer(input); r = c = 0; while (st.hasMoreTokens()) { A[r][c++] = Double.parseDouble(st.nextToken()); if (c == Acols) { c = 0; r++; } } input = JOptionPane.showInputDialog("Enter B matrix's #rows and #cols");//, st = new StringTokenizer(input); Brows = Integer.parseInt(st.nextToken()); Bcols = Integer.parseInt(st.nextToken()); double [][] B = new double[Brows][Bcols]; input = JOptionPane.showInputDialog("Enter/paste B matrix's components separated by spaces in row major order");//, st = new StringTokenizer(input); r = c = 0; while (st.hasMoreTokens()) { B[r][c++] = Double.parseDouble(st.nextToken()); if (c == Bcols) { c = 0; r++; } } textarea.append("A:\n"); display (A, Arows, Acols, textarea); textarea.append("\nAt:\n"); display (transpose(A,Arows), Arows, Acols, textarea); if (Arows == Acols) { //square detA = det(A,Arows); textarea.append("\ndet A="+detA); if (detA != 0) { adjA = adjoint(A,Arows); textarea.append("\nadj A:\n"); display (adjA, Arows, Acols, textarea); invA = inverse(adjA,Arows,detA); textarea.append("\ninv A:\n"); display (invA, Arows, Acols, textarea); } } textarea.append("\nB:\n"); display (B, Brows, Bcols, textarea); textarea.append("\nBt:\n"); display (transpose(B,Brows), Brows, Bcols, textarea); if (Brows == Bcols) { //square detB = det(B,Brows); textarea.append("\ndet B="+detB); if (detB != 0) { adjB = adjoint(B,Brows); textarea.append("\nadj B:\n"); display (adjB, Brows, Bcols, textarea); invB = inverse(adjB,Brows,detB); textarea.append("\ninv B:\n"); display (invB, Brows, Bcols, textarea); } } if (Acols == Brows) { textarea.append("\nAB:\n"); double [][] AB = new double[Arows][Bcols]; for (int i=0; i 2) adj[i][j] = Math.pow(-1,i+j+2) * det(minorMij(M,n,i,j),n-1); //else // adj[i][j] = Math.pow(-1,i+j+2) * det(M,n); if (n == 2) { // a b c d -> d -c -b a adj[0][0] = M[1][1]; adj[0][1] = -M[1][0]; adj[1][0] = -M[0][1]; adj[1][1] = M[0][0]; } return transpose(adj,n); } //given adjoint matrix and determinant, return inverse double [][] inverse (double [][]adj, int n, double det) { double [][] inv = new double [n][n]; for (int i=0; i