运用高斯列向量法求解多维矩阵,java可视化界面演示 import java.awt.BorderLayout; import java.awt.Color; import java.awt.FlowLayout; import java.awt.Font; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.math.BigDecimal; import java.math.MathContext; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.SwingConstants; import javax.swing.border.Border; import javax.swing.border.LineBorder; public class Gauss extends JFrame { /** * */ private static final long serialVersionUID = 1L; static int equationNumber; JPanel panel1=new JPanel(); JPanel panel2=new JPanel(); JPanel panel3=new JPanel(); ImageIcon ii=null; JPanel panel=null; BigDecimal[][] operateNumber=null; JTextField[][] jTextFieldNumber=null; JTextField[] jTextFieldNum=null; BigDecimal[] AnswerNumber=null; public void buju() { layoutPanel1(); layoutPanel2(); layoutPanel3(); equationNumber=getEquationNumber(); setLayout(new BorderLayout()); panel3.setBackground(Color.black); panel1.setOpaque(true); panel2.setOpaque(true); add(panel1,BorderLayout.CENTER); add(panel2,BorderLayout.EAST); add(panel3,BorderLayout.SOUTH); } public void GaussAlgrithom() { AnswerNumber=new BigDecimal[equationNumber]; int i,j,k,maxflag = 0; BigDecimal max=new BigDecimal(-99999999.999999); BigDecimal temp; // for(i=0;i<equationNumber;i++) // { // for(j=0;j<=equationNumber;j++) // System.out.println(operateNumber[i][j]); // } //选取最大元 for(k=0;k<equationNumber-1;k++) { for(i=k;i<equationNumber;i++) { if(operateNumber[i][k].abs().compareTo(max)==1) { maxflag=i; max=operateNumber[i][k].abs(); } } //交换最大元行与原本第一行 for(j=0;j<=equationNumber;j++) { temp=operateNumber[k][j]; operateNumber[k][j]=operateNumber[maxflag][j]; operateNumber[maxflag][j]=temp; } //做计算 for(i=k;i<equationNumber;i++) { if(i==k) { for(j=equationNumber;j>=k;j--) { operateNumber[k][j]=operateNumber[k][j].divide(operateNumber[k][k],MathContext.DECIMAL32); } } else { for(j=equationNumber;j>=k;j--) { operateNumber[i][j]=operateNumber[i][j].add(operateNumber[k][j].multiply(operateNumber[i][k].negate())); } } } } for(i=equationNumber-1;i>=0;i--) { if(i==equationNumber-1) { AnswerNumber[i]=operateNumber[i][i+1].divide(operateNumber[i][i],MathContext.DECIMAL32); } else { for(j=equationNumber-1;j>=i+1;j--) { operateNumber[i][equationNumber]=operateNumber[i][equationNumber].add(operateNumber[i][j].negate().multiply(AnswerNumber[j])); } AnswerNumber[i]=operateNumber[i][equationNumber]; } } // for(i=0;i<equationNumber;i++) // { // for(j=0;j<=equationNumber;j++) // System.out.println(operateNumber[i][j]); // } for(i=0;i<equationNumber;i++) { System.out.println(AnswerNumber[i]); } } public void layoutPanel1() { int i,j; jTextFieldNumber=new JTextField[equationNumber][equationNumber+1]; //System.out.println(equationNumber); String label1; JLabel[][] jlabel1=new JLabel[equationNumber][equationNumber]; for(i=1;i<=equationNumber-1;i++) { label1="X"+i+"+"; for(j=0;j<equationNumber;j++) jlabel1[i-1][j] = new JLabel(label1); } label1="X"+i+"="; for(j=0;j<equationNumber;j++) jlabel1[i-1][j] = new JLabel(label1); panel1.setLayout(new GridLayout(equationNumber,1)); for(i=0;i<equationNumber;i++) { panel=new JPanel(); // panel.setBackground(Color.black); panel.setOpaque(true); panel.setLayout(new FlowLayout()); //System.out.println(i); for(j=0;j<equationNumber;j++) { // System.out.println(j); jTextFieldNumber[i][j]=new JTextField(3); panel.add(jTextFieldNumber[i][j]); panel.add(jlabel1[j][i]); } jTextFieldNumber[i][equationNumber]=new JTextField(3); panel.add(jTextFieldNumber[i][equationNumber]); panel1.add(panel); } } public void layoutPanel2() { String label2; jTextFieldNum=new JTextField[equationNumber]; JLabel[] jlabel2=new JLabel[equationNumber]; int i; for(i=1;i<=equationNumber-1;i++) { label2="X"+i+"="; jlabel2[i-1] = new JLabel(label2); } label2="X"+i+"="; jlabel2[i-1] = new JLabel(label2); panel2.setLayout(new GridLayout(equationNumber,1)); for(i=0;i<equationNumber;i++) { JPanel panel=new JPanel(); // panel.setBackground(Color.black); panel.setOpaque(true); jTextFieldNum[i]=new JTextField(4); jTextFieldNum[i].setEditable(false); panel.add(jlabel2[i]); panel.add(jTextFieldNum[i]); panel2.add(panel); } } public void layoutPanel3() { operateNumber=new BigDecimal[equationNumber][equationNumber+1]; JButton jButtonJudge = new JButton("确定"); JButton jButtonReset = new JButton("重置"); JButton jButtonAbout = new JButton("关于"); panel3.setLayout(new FlowLayout()); panel3.add(jButtonJudge,FlowLayout.LEFT); panel3.add(jButtonReset,FlowLayout.CENTER); panel3.add(jButtonAbout,FlowLayout.RIGHT); jButtonJudge.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int i,j; for(i=0;i<equationNumber;i++) for(j=0;j<=equationNumber;j++) { operateNumber[i][j]=new BigDecimal(jTextFieldNumber[i][j].getText()); //题目的数量 } GaussAlgrithom(); for(i=0;i<equationNumber;i++) { jTextFieldNum[i].setText(String.valueOf((BigDecimal)(AnswerNumber[i]))); } } }); jButtonReset.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { int i,j; for(i=0;i<equationNumber;i++) for(j=0;j<=equationNumber;j++) { jTextFieldNumber[i][j].setText(""); //题目的数量 } } }); jButtonAbout.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { JFrame about = new About(); about.setTitle("关于本程序"); about.pack(); about.setLocationRelativeTo(null); about.setVisible(true); } }); } public int getEquationNumber() { return equationNumber; } public void setEquationNumber(int equationNumber) { Gauss.equationNumber = equationNumber; } // private static final Image image = Toolkit.getDefaultToolkit().getImage("E://ppt//background pic//1.JPG"); // // private static final JComponent canvas = new JComponent(){ // private static final long serialVersionUID = 1L; // // protected void paintComponent(Graphics g) { // super.paintComponent(g); // Graphics gg = g.create(); // gg.drawImage(image,0,0,getWidth(),getHeight(),this); // gg.dispose(); // } // }; // Gauss() throws HeadlessException { // attachListeners(); // doLay(); // } // private void attachListeners() { // setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // } // // private void doLay() { // java.awt.Container container = getContentPane(); // container.add(canvas); // pack(); // setVisible(true); // } //确定按钮的监听 public static void main(String[] args) { Gauss frame = new Gauss(); equationNumber=Integer.parseInt(JOptionPane.showInputDialog(null,"请输入方程的个数(注:未知数个数与方程个数相等且不超过17)" ,"提示",JOptionPane.INFORMATION_MESSAGE)); frame.setEquationNumber(equationNumber); System.out.println(frame.getEquationNumber()); frame.setTitle("Gauss列主元素消去法Demo"); frame.setLocation(350, 200); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); // frame.setSize(1000, 600); frame.setLocation(400, 200); frame.pack(); // com.sun.awt.AWTUtilities.setWindowOpaque(frame, false); frame.buju(); } } //About类的定义 class About extends JFrame{ /** * */ private static final long serialVersionUID = 1L; private JLabel jLabelauthor = new JLabel("作者"); //标签的的定义 private JLabel jLabelContact = new JLabel("联系方式"); private JLabel jLabelVersion = new JLabel("版本"); private JLabel jLabelMyPage = new JLabel("个人主页"); private JLabel jLabelup = new JLabel("Gauss列主元素消去法Demo",new ImageIcon("image/up.jpg"),SwingConstants.CENTER); private JLabel jLabeldown = new JLabel("08计一张帅",new ImageIcon("image/down.jpg"),SwingConstants.CENTER); private JTextField jTextFieldauthor = new JTextField("张帅"); //文本域的定义 private JTextField jTextFieldContact = new JTextField("QQ:785884195"); private JTextField jTextFieldVersion = new JTextField(" 1.0 "); private JTextField jTextFieldMyPage = new JTextField("http://user.qzone.qq.com/785884195?ptlang=2052"); //创建具有指定颜色和厚度的线边框 Border lineBorder = new LineBorder(Color.BLACK, 1); About() { //构造函数 jLabelauthor.setHorizontalAlignment(SwingConstants.CENTER); //设置标签属性 jLabelContact.setHorizontalAlignment(SwingConstants.CENTER); jLabelVersion.setHorizontalAlignment(SwingConstants.CENTER); jLabelMyPage.setHorizontalAlignment(SwingConstants.CENTER); jLabelup.setFont(new Font("Serif",Font.BOLD,20)); jLabelup.setForeground(Color.BLUE); jLabeldown.setForeground(Color.LIGHT_GRAY); jTextFieldauthor.setEditable(false); //设置文本域属性 jTextFieldauthor.setBorder(lineBorder); jTextFieldauthor.setHorizontalAlignment(SwingConstants.CENTER); jTextFieldauthor.setFont(new Font("Serif",Font.BOLD,16)); jTextFieldContact.setEditable(false); jTextFieldContact.setBorder(lineBorder); jTextFieldContact.setHorizontalAlignment(SwingConstants.CENTER); jTextFieldContact.setFont(new Font("Serif",Font.BOLD,16)); jTextFieldVersion.setEditable(false); jTextFieldVersion.setBorder(lineBorder); jTextFieldVersion.setHorizontalAlignment(SwingConstants.CENTER); jTextFieldVersion.setFont(new Font("Serif",Font.BOLD,16)); jTextFieldMyPage.setEditable(false); jTextFieldMyPage.setBorder(lineBorder); jTextFieldMyPage.setHorizontalAlignment(SwingConstants.CENTER); jTextFieldMyPage.setFont(new Font("Serif",Font.BOLD,16)); JPanel p = new JPanel(new GridLayout(4,2,5,5)); p.add(jLabelauthor); p.add(jTextFieldauthor); p.add(jLabelContact); p.add(jTextFieldContact); p.add(jLabelVersion); p.add(jTextFieldVersion); p.add(jLabelMyPage); p.add(jTextFieldMyPage); JPanel panel = new JPanel(new BorderLayout( 5,10)); panel.add(jLabelup,BorderLayout.NORTH); panel.add(p,BorderLayout.CENTER); panel.add(jLabeldown,BorderLayout.SOUTH); add(panel); } }