① java n*n矩阵求值及求逆矩阵
importjava.math.*;
importjava.util.*;
importjava.text.*;
publicclassmatrix{
staticintmap1[][]=newint[110][110];
staticintjust[][]=newint[110][110];
publicstaticvoidprintf(intn,intmap[][])
{
inti,j;
for(i=1;i<=n;i++)
{
for(j=1;j<n;j++)
System.out.print(map[i][j]+"");
System.out.println(map[i][j]);
}
}
publicstaticvoidget(intnumi,intnumj,intmap[][],intn)
{
inti,j,k,l;
for(i=0;i<n+10;i++)
for(j=0;j<n+10;j++)
just[i][j]=1;
for(i=1;i<=n-1;i++)//求余子式矩阵
for(j=1;j<=n-1;j++)
{
if(i>=numi&&j<numj)
just[i][j]=map[i+1][j];
elseif(i>=numi&&j>=numj)
just[i][j]=map[i+1][j+1];
elseif(i<numi&&j>=numj)
just[i][j]=map[i][j+1];
elseif(i<numi&&j<numj)
just[i][j]=map[i][j];
}
}
//staticintmap[][]=newint[110][110];
publicstaticintgetans(intnn)
{
intmap[][]=newint[110][110];
for(inti=1;i<=nn;i++)
for(intj=1;j<=nn;j++)
map[i][j]=just[i][j];
if(nn==2)
returnmap[1][1]*map[2][2]-map[1][2]*map[2][1];
elseif(nn==1)
returnmap[1][1];
else
{
intcnb=0;
for(inti=1;i<=nn;i++)
{
get(1,i,map,nn);//得到当前余子式just
//printf("payattention! ");
//print(map,nn);
//print(just,nn-1);
if(i%2==1)
cnb+=map[1][i]*getans(nn-1);
else
cnb-=map[1][i]*getans(nn-1);
}
returncnb;
}
}
publicstaticintgcd(intm,intn)
{
//if(m<n)
//matrix.gcd(n,m);
//if(n==0)
//returnm;
//
//else
//returnmatrix.gcd(n,m%n);
intmm=m;
intnn=n;
if(mm<nn)
{
intc=mm;
mm=nn;
nn=c;
}
intw=1;
while(w!=0)
{
w=mm%nn;
mm=nn;
nn=w;
}
returnmm;
}
publicstaticvoidans(intn,intm)
{
if(n*m<0)
{
System.out.print("-");
ans(Math.abs(n),Math.abs(m));
return;
}
if(m==1)
System.out.print(n+" ");
elseif(n%m==0)
System.out.print(n/m+" ");
else
System.out.print((n/matrix.gcd(m,n))+"/"+(m/matrix.gcd(m,n))+" ");
}
publicstaticvoidmain(String[]args){
//TODO自动生成的方法存根
Scannercin=newScanner(System.in);
inti,j,k,l,m,p;
while(true)
{
intn=cin.nextInt();
intans=0;
for(i=0;i<n+10;i++)
for(j=0;j<n+10;j++)
map1[i][j]=1;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
map1[i][j]=cin.nextInt();
just[i][j]=map1[i][j];
}
intans1=matrix.getans(n);
System.out.println("矩阵的值为:");
System.out.println(ans1);
intmap2[][]=newint[110][110];
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
map2[i][j]=map1[j][i];
just[i][j]=map2[i][j];
}
System.out.println("转置矩阵为:");
matrix.printf(n,map2);
inthelp2=matrix.getans(n);
System.out.println(help2);
if(help2==0)
{
System.out.println("Noinversematrix");
continue;
}
System.out.println("逆矩阵为:");
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
matrix.get(i,j,map2,n);
//booleanb=((i+j)%2==0);
if((i+j)%2==0)
matrix.ans(matrix.getans(n-1),help2);
else
matrix.ans(matrix.getans(n-1)*-1,help2);
}
System.out.println();
}
System.out.println();
}
}
}
② java有没有专门的求矩阵乘积和转置的函数
标准类库里应该没有, 应该会有人写过矩阵的类, 可以拿来用
网上也有矩阵计算器这种图形界面的小程序, 都可以实现诸如乘积, 转置, 求逆等等功能
③ java中怎样求矩阵的逆
把算法搞清楚然后一步一步的写
④ 跪求!!!! java 编写求复数矩阵的逆、模、转置、减、乘、特征值、特征向量 10号之前,拜托了
同求~~
⑤ 编写求矩阵的逆矩阵用java实现
import java.io.*;
import java.util.StringTokenizer;
public class Test {
private int N;
private double[][] src;
private double[][] result;
public Test() {
}
public static void main(String[] args) throws Exception {
new Test().exec();
}
private void exec() throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
System.out.print( "Input N: ");
System.out.flush();
String line = reader.readLine();
N = Integer.parseInt(line);
src = new double[N][];
result = new double[N][];
for(int i = 0; i < N; i++) {
line = reader.readLine();
src[i] = new double[N];
result[i] = new double[N];
result[i][i] = 1;
StringTokenizer st = new StringTokenizer(line, ", ");
int index = 0;
while(st.hasMoreTokens()) {
src[i][index] = Double.parseDouble(st.nextToken());
index++;
}
}
calCol(0);
calColBack(N - 1);
reInit();
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
System.out.print(src[i][j] + ", ");
}
System.out.print( "\t ");
for (int j = 0; j < N; j++) {
System.out.print(result[i][j] + ", ");
}
System.out.println();
}
}
private void reInit() {
for(int i = 0; i < N; i++) {
double coefficient = 1 / src[i][i];
src[i][i] = 1;
for(int j = 0; j < N; j++)
result[i][j] *= coefficient;
}
}
private void calColBack(int col) {
for(int i = col - 1; i >= 0; i--) {
double coefficient = -1 * src[i][col] / src[col][col];
for(int z = 0; z < N; z++) {
src[i][z] += coefficient * src[col][z];
result[i][z] += coefficient * result[col][z];
}
}
if(col > 0)
calColBack(col - 1);
}
private void calCol(int col) {
for(int i = col + 1; i < N; i++) {
double coefficient = -1 * src[i][col] / src[col][col];
for(int z = 0; z < N; z++) {
src[i][z] += coefficient * src[col][z];
result[i][z] += coefficient * result[col][z];
}
}
if(col + 1 < N)
calCol(col + 1);
}
}
⑥ java 矩阵求逆怎么用java矩阵包
1、分子分母都为 0 的说法,是不对的。无论在什么年级,无论读什么程度的书,分母永远不可以为 0。这一点是没有任何模糊的可能的。.2、极限的分子分母可以趋近于0,但分母不能为 0;趋近于 0, 跟等于 0 不是一回事。极限计算的趋势 = tendency,如果分子分母都趋向于 0 ,那就是不定式,计算最后的比值是多少,必须用到各色各样的方法。.分子分母都趋向于 0 ,结果可能是 0,可能是一个非零的常数,也可能是无穷大,要看具体题目,才能确定。
⑦ 如何用java程序利用二维数组创建一个矩阵,编写方法完成该矩阵的逆转,两个矩阵之和。
两个类,一个是矩阵对象类Matrix,另一个是测试类MatrixTest
可以实现矩阵创建,赋值,转置,加法,支持行列数不同的矩阵
注1,转置方法将输出一个新的矩阵,并不改变原有矩阵的内容
注2:加法方法是a.add(b),b不发生变化,a发生变化,加法将改变a矩阵的内容,不会产生新矩阵
public class Matrix {
private int rows;
private int columns;
private Integer[][] m;
// 行列构造法
public Matrix(int rows, int columns) {
this.rows = rows;
this.columns = columns;
this.m = new Integer[rows][columns];
}
// 二维数组构造法
public Matrix(Integer[][] m) {
this.m = m;
this.rows = m.length;
this.columns = m[0].length;
}
// 转置
public Matrix exchange() {
Integer[][] result = new Integer[columns][rows];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
result[j][i] = m[i][j];
}
}
return new Matrix(result);
}
// 加法
public void add(Matrix obj) {
if (obj.getRows() != rows || obj.getColumns() != columns) {
System.out.println("不同行列的矩阵不能相加");
} else {
Integer[][] objarray = obj.toArray();
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
m[i][j] += objarray[i][j];
}
}
}
}
// 矩阵赋值
public void setValue(int row, int column, int value) {
if (row < rows && column < columns) {
m[row][column] = value;
} else {
System.out.println("索引超出边界");
}
}
public int getRows() {
return rows;
}
public int getColumns() {
return columns;
}
public Integer[][] toArray() {
return m;
}
public String toString() {
String result = "";
for (int i = 0; i < rows; i++) {
for (int j = 0; j < columns; j++) {
result = result + m[i][j] + " ";
}
result += "\r\n";
}
return result;
}
}
public class MatrixTest {
public static void main(String[] args) {
Matrix m1 = new Matrix(2, 3);
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
m1.setValue(i, j, i + j);
}
}
System.out.println(m1.toString());
System.out.println(m1.exchange().toString());
Matrix m2 = new Matrix(2, 3);
for (int i = 0; i < 2; i++) {
for (int j = 0; j < 3; j++) {
m2.setValue(i, j, (i + 1) * (j + 1));
}
}
System.out.println(m2.toString());
m1.add(m2);
System.out.println(m1.toString());
}
}
⑧ java:1.用一维数组实现二维数组的加法和乘法 2. 求解线性方程组 3.求矩阵的逆矩阵
public class Matrix {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
int[][] A={{1,5,7,3},
{3,6,3,9},
{1,2,8,7},
{0,3,1,9},
{3,2,5,4}};
int [][]B={{3,9,1,4,1,4},
{5,6,7,9,0,3},
{3,2,7,2,5,6},
{9,7,4,7,8,0}};
int [][]C= new int [5][6];
int i,j,k;
for(i=0;i<5;i++){
for(j=0;j<6;j++){
C[i][j]=0;
}
}
for(i=0;i<5;i++){
for(j=0;j<6;j++){
for(k=0;k<4;k++){
C[i][j]+=A[i][k]*B[k][j];
}
}
}
for(i=0;i<5;i++){
for(j=0;j<6;j++){
System.out.print(" "+C[i][j]+" ");
}
System.out.println();
}
}
}
⑨ 求一个求N阶矩阵的逆的JAVA源程序
建议你看数值分析,里面有很多关于矩阵运算的算法。
⑩ java里怎么求一个矩阵的逆
1,2,3,1,0,0
4,5,6,0,1,0
7,8,9,0,0,1
经过变换成
1,0,0,*,*,*
0,1,0,*,*,*
0,0,1,*,*,*就可以了,右边星号表示的矩阵就是你要求的逆
简单的说(A,E)变换成(E,A的逆)