javaeig的简单介绍

博主:adminadmin 2022-12-18 14:12:06 54

今天给各位分享javaeig的知识,其中也会对进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

数据单位转换工具java代码

import javax.swing.*;

import javax.swing.event.*;

import java.awt.*;

import java.awt.event.*;

public class UnitTransfer extends JFrame{

    private final int WIDTH = 400, HEIGHT = 300;//窗口默认的宽度、高度

    

    private JLabel lblInUnit=new JLabel("输入单位");

    private JComboBox cboIn=new JComboBox(new String[]{"", ""});

    private JLabel lblIn=new JLabel("输入数值");

    private JTextField txtIn=new JTextField("10");

    

    private JLabel lblOutUnit=new JLabel("输出单位");

    private JLabel lblResult=new JLabel("显示结果");

    private JLabel txtResult=new JLabel("结果");

    private JComboBox cboOut=new JComboBox(new String[]{"", ""});

    

    private JButton btnTrans = new JButton("转换");

    private JButton btnClear = new JButton("清空");

    

    private JRadioButton rdLeng = new JRadioButton("长度");

    private JRadioButton rdWeig = new JRadioButton("时间");

    private String [] lengthUnit={"米", "分米", "厘米", "毫米"};

    private String [] timeUnit={"天", "时", "分", "秒"};

    

    public UnitTransfer(){

        super("简单的单位转换器 Beta");

        this.setSize(WIDTH, HEIGHT);

        this.setLayout(null);

        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        

        ButtonGroup group = new ButtonGroup();

        group.add(rdLeng);

        group.add(rdWeig);

        this.getContentPane().add(rdLeng);

        this.getContentPane().add(rdWeig);

        this.getContentPane().add(btnTrans);

        this.getContentPane().add(btnClear);

        this.getContentPane().add(lblIn);

        this.getContentPane().add(txtIn);

        this.getContentPane().add(lblInUnit);

        this.getContentPane().add(cboIn);

        this.getContentPane().add(lblResult);

        this.getContentPane().add(txtResult);

        this.getContentPane().add(lblOutUnit);

        this.getContentPane().add(cboOut);

        this.setVisible(true);

        this.doLayout();

        btnTrans.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){

                doConvert();

            }

        });

        btnClear.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){

                txtIn.setText("0");

                txtResult.setText("0");

            }

        });

        rdLeng.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){

                cboIn.setModel(new DefaultComboBoxModel(lengthUnit));

                cboOut.setModel(new DefaultComboBoxModel(lengthUnit));

            }

        });

        rdWeig.addActionListener(new ActionListener(){

            public void actionPerformed(ActionEvent e){

                cboIn.setModel(new DefaultComboBoxModel(timeUnit));

                cboOut.setModel(new DefaultComboBoxModel(timeUnit));

            }

        });

        rdLeng.setSelected(true);

        cboIn.setModel(new DefaultComboBoxModel(lengthUnit));

        cboOut.setModel(new DefaultComboBoxModel(timeUnit));

    }

    final int offX=100;

    public void doLayout(){

        super.doLayout();

        

        rdLeng.setBounds(offX, 15, 60, 20);

        rdWeig.setBounds(rdLeng.getX()+rdLeng.getWidth()+5, 15, 60, 20);

        

        lblInUnit.setBounds(offX, rdLeng.getY()+rdLeng.getHeight()+20, 80, 20);

        cboIn.setBounds(lblInUnit.getX()+lblInUnit.getWidth()+5, lblInUnit.getY(), 80, 20);

        lblIn.setBounds(offX, lblInUnit.getY()+lblInUnit.getHeight()+5, 80, 20);

        txtIn.setBounds(lblIn.getX()+lblIn.getWidth()+5, lblIn.getY(), 80, 20);

        

        lblOutUnit.setBounds(offX, lblIn.getY()+lblIn.getHeight()+30, 80, 20);

        cboOut.setBounds(lblOutUnit.getX()+lblOutUnit.getWidth()+5, lblOutUnit.getY(), 80, 20);

        lblResult.setBounds(offX, cboOut.getY()+cboOut.getHeight()+5, 80, 20);

        txtResult.setBounds(lblResult.getX()+lblResult.getWidth()+5, lblResult.getY(), 100, 20);

        

        int w=getWidth ();

        int x=(w-70*2-5)/2;//水平居中

        btnTrans.setBounds(x, lblResult.getY()+lblResult.getHeight()+30, 70, 25);

        btnClear.setBounds(btnTrans.getX()+btnTrans.getWidth()+3, btnTrans.getY(), 70, 25);

    }

    public void doConvert(){

        double v=0;

        try{

            v= Double.parseDouble(txtIn.getText());

        }catch(Exception ex){

            txtIn.setText("0");

            return;

        }

        //"米", "分米", "厘米", "毫米"

        if(rdLeng.isSelected()){

            switch(cboIn.getSelectedIndex()){

                case 0:

                    break;

                case 1:

                    v=v/10;

                    break;

                case 2:

                    v=v/100;

                    break;

                case 3:

                    v=v/1000;

                    break;

                default:

                    return;

            }

            //v 现在是标准单位:米

            switch(cboOut.getSelectedIndex()){

                case 0:

                    break;

                case 1:

                    v=v*10;

                    break;

                case 2:

                    v=v*100;

                    break;

                case 3:

                    v=v*1000;

                    break;

                default:

                    return;

            }

            if(v0.01){

                txtResult.setText(String.format("%2.8f", v));

            }else{

                txtResult.setText(String.format("%2.2f", v));

            }

        }else{

        //"天", "时", "分", "秒"

            switch(cboIn.getSelectedIndex()){

                case 0:

                    v=v*24;

                    break;

                case 1:

                    break;

                case 2:

                    v=v/60;

                    break;

                case 3:

                    v=v/3600;

                    break;

                default:

                    return;

            }

            //v 现在是标准单位:小时

            switch(cboOut.getSelectedIndex()){

                case 0:

                    v=v/24;

                    break;

                case 1:

                    break;

                case 2:

                    v=v*60;

                    break;

                case 3:

                    v=v*3600;

                    break;

                default:

                    return;

            }

            if(v0.01){

                txtResult.setText(String.format("%2.8f", v));

            }else{

                txtResult.setText(String.format("%2.8f", v));

            }

        }

    }

    

    public static void main(String[] args){

        EventQueue.invokeLater(new Runnable()  {

            public void run()   {

                new UnitTransfer();

            }

        });

    }

}

//请参考,欢迎指正

matlab与java混合编程有什么作用

Java和matlab混合编程

如果用Matlab和java混合编程开发Windows的应用程序则可以实现优势互补,缩短开发时间,降低程序设计的复杂度。同时程序可以脱离Matlab环境独立运行,在工程计算和教学实践中都具有实际意义。

1.使用java调用Maltab函数的基本方法是:通过Java Builder实现Java调用Matlab。在Java环境中直接调用Matlab所生成的Jar包。

下面以在Java中产生任意维数的魔方矩阵,计算任意矩阵的特征向量和特征值,对两组数据进

行拟合并绘制拟合曲线三个实例来说明通过Java

Builder实现Java调用Matlab的过程。传统的纯Java编程实现上述实例非常复杂,甚至很难完成。这一问题在Matlab中只需要调用几个

函数即可完成。

1.1、将Matlab函数包装成Java类

首先在Matlab中编写三个M文件:

Eig.m

function [v,d]=Eig(input)

format long

[v,d]=eig(input);

End

Magic.m

function f =Magic( input )

f=magic(input);

end

Plot.m

function Plot(x,y )

p=polyfit(x,y,3);

t=min(x):max(x)/100:max(x);

s=polyval(p,t);

plot(x,y,'*',t,s);

title('数据拟合结果');

xlabel('x');

ylabel('y');

end

其次,在Matlab中新建一个Deployment

Project,名称为MyProject.prj,类型为Java

package。在Project中新建三个Class,分别为GetEig,GetMagic,PolyFit。将

Eig.m,Magic.m,plot.m分别添加到上述Class中。之后点击Builder the project,等待编译成功即可。

1.2、在Java中调用Matlab函数

新建一个Java类JavaMatlab,并引入相关的包。

import com.mathworks.toolbox.javabuilder.*;//引入Matlab相关包

import MyProject.*;//引入建立的包及类

调用时Java与Matlab之间的参数传递需要通过MWNumericArray完成。具体的调用代码如下:

package org.genius.ExpandJava;

import MyProject.*;

import com.mathworks.toolbox.javabuilder.*;

public class JavaMatlab {

public static void main(String[] args) {

MWNumericArray a = null; // 用于保存矩阵

MWNumericArray ax = null; // 用于保存矩阵

MWNumericArray ay = null; // 用于保存矩阵

Object[] result = null; // 用于保存计算结果

GetEig getEig = null;

GetMagic getMagic=null;

PolyFit polyFit=null;

int r = 4; // 魔方矩阵维数

int array[][]={{50,-20,0},{-20,80,60},{0,60,-70}};

double x[]={0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1};

double y[]={-0.447,1.978,3.28,6.16,7.08,7.34,7.66,9.56,9.48,9.3,11.2};

try {

//产生魔方矩阵并打印

a = new MWNumericArray(r, MWClassID.DOUBLE);

getMagic = new GetMagic();

result = getMagic.Magic(1,a);

System.out.println("产生的四维魔方矩阵:");

System.out.println(result[0]);

MWArray.disposeArray(result);

//计算所给矩阵的特征向量和特征值并打印结果

a = new MWNumericArray(array, MWClassID.DOUBLE);

getEig = new GetEig();

result = getEig.Eig(2, a);

System.out.println("原始矩阵:");

System.out.println(a.toString());

System.out.println("得到的特征向量:");

System.out.println(result[0]);

System.out.println("得到的特征值:");

System.out.println(result[1]);

MWArray.disposeArray(result);

ax = new MWNumericArray(x, MWClassID.DOUBLE);

ay = new MWNumericArray(y, MWClassID.DOUBLE);

polyFit = new PolyFit();

result=polyFit.Plot(ax,ay);

polyFit.waitForFigures();

} catch (Exception e) {

System.out.println("Exception: " + e.toString());

}

finally {

// 释放本地资源

MWArray.disposeArray(a);

MWArray.disposeArray(ax);

MWArray.disposeArray(ay);

MWArray.disposeArray(result);

getEig.dispose();

getMagic.dispose();

polyFit.dispose();

}

}

}

请教高手:java,在myeclipse上调用jama包求矩阵特征值与特征向量的方法

//导入jama的jar包

import Jama.Matrix;

public class Jama_Matrix {

public static void main(String[] args) {

double [][] array = {

{-1,1,0},

{-4,3,0},

{1 ,0,2}};

//定义一个矩阵

Matrix A = new Matrix(array);

//由特征值组成的对角矩阵

A.eig().getD().print(4,2);

//每一列对应的是一个特征向量

A.eig().getV().print(4,2);

double [][] arrayb = {

{1,-2,2},

{-2,-2,4},

{2 ,4,-2}};

Matrix B = new Matrix(arrayb);

B.eig().getD().print(4,2);

B.eig().getV().print(4,2);

}

}

建议使用matlab

求pca(PricipalComponentAnalysis)的java代码

package PCA;

import java.util.ArrayList;

import java.util.Collections;

import java.util.List;

import org.jblas.ComplexDoubleMatrix;

import org.jblas.DoubleMatrix;

import org.jblas.Eigen;

public class PCA {

 /**

  * Reduce matrix dimension     减少矩阵维度

  * @param source   源矩阵

  * @param dimension  目标维度

  * @return Target matrix  返回目标矩阵

  */ 

public static void main(String[] args){

DoubleMatrix d = new DoubleMatrix(new double[][]{{-1,-1,0,2,0},

{-2,0,0,1,1}});

DoubleMatrix result = PCA.dimensionReduction(d, 2);

System.out.println(result);

}

public static DoubleMatrix dimensionReduction(DoubleMatrix source, int dimension) {

//C=X*X^t/m 矩阵*矩阵^异或/列数

DoubleMatrix covMatrix = source.mmul(source.transpose()).div(source.columns);

ComplexDoubleMatrix eigVal = Eigen.eigenvalues(covMatrix);

ComplexDoubleMatrix[] eigVectorsVal = Eigen.eigenvectors(covMatrix);

ComplexDoubleMatrix eigVectors = eigVectorsVal[0];

//通过特征值将符号向量从大到小排序

ListPCABean beans = new ArrayListPCA.PCABean();

for (int i = 0; i  eigVectors.columns; i++) {

beans.add(new PCABean(eigVal.get(i).real(), eigVectors.getColumn(i)));

}

Collections.sort(beans);

DoubleMatrix newVec = new DoubleMatrix(dimension, beans.get(0).vector.rows);

for (int i = 0; i  dimension; i++) {

ComplexDoubleMatrix dm = beans.get(i).vector;

DoubleMatrix real = dm.getReal();

newVec.putRow(i, real);

}

return newVec.mmul(source);

}

static class PCABean implements ComparablePCABean {

double eigenValue;

ComplexDoubleMatrix vector;

public PCABean(double eigenValue, ComplexDoubleMatrix vector) {

super();

this.eigenValue = eigenValue;

this.vector = vector;

}

@Override

public int compareTo(PCABean o) {

return Double.compare(o.eigenValue, eigenValue);

}

@Override

public String toString() {

return "PCABean [eigenValue=" + eigenValue + ", vector=" + vector + "]";

}

}

}

org.jblas的jar包去百度下一个,我不知道怎么上传文件

关于javaeig和的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-12-18,除非注明,否则均为首码项目网原创文章,转载请注明出处。