package com.yang.matrix;

public class TestMatrix {

    public static void main(String[] args) {

        //         测试数据
// double[][] a={{0.2368,0.2471,0.2568,1.2671},
// {1.1161,0.1254,0.1397,0.149},
// {0.1582,1.1675,0.1768,0.1871},
// {0.1968,0.2071,1.2168,0.2271}}; double[][] a={{,,},
{,,},
{,,}
};
double[][] b={{,,},
{,,},
{,,}
}; double[][] c= new double[][]; TestMatrix tm=new TestMatrix();
tm.Mrinv(a, ); //验证 A*A-1=E
tm.Mrcheng(a,b,c,,,);
tm.PrintMatrix(c, );
} public static void PrintMatrix(double[][] a, int n){
for(int i=;i<n;i++){
for(int j=;j<n;j++)
{
System.out.print(a[i][j]+" ");
}
System.out.println();
}
} ////////////////////////////////////////////////////////////////////////
//函数:Mrinv
//功能:求矩阵的逆
//参数:n---整数,矩阵的阶数
//a---Double型n*n二维数组,开始时为原矩阵,返回时为逆矩阵
////////////////////////////////////////////////////////////////////////
public static void Mrinv(double[][] a, int n) {
int i, j, row, col, k;
double max, temp;
int[] p = new int[n];
double[][] b = new double[n][n];
for (i = ; i < n; i++) {
p[i] = i;
b[i][i] = ;
} for (k = ; k < n; k++) {
// 找主元
max = ;
row = col = i;
for (i = k; i < n; i++)
for (j = k; j < n; j++) {
temp = Math.abs(b[i][j]);
if (max < temp) {
max = temp;
row = i;
col = j;
}
}
// 交换行列,将主元调整到 k 行 k 列上
if (row != k) {
for (j = ; j < n; j++) {
temp = a[row][j];
a[row][j] = a[k][j];
a[k][j] = temp;
temp = b[row][j];
b[row][j] = b[k][j];
b[k][j] = temp;
}
i = p[row];
p[row] = p[k];
p[k] = i;
}
if (col != k) {
for (i = ; i < n; i++) {
temp = a[i][col];
a[i][col] = a[i][k];
a[i][k] = temp;
}
}
// 处理
for (j = k + ; j < n; j++)
a[k][j] /= a[k][k];
for (j = ; j < n; j++)
b[k][j] /= a[k][k];
a[k][k] = ; for (j = k + ; j < n; j++) {
for (i = ; i < k; i++)
a[i][j] -= a[i][k] * a[k][j];
for (i = k + ; i < n; i++)
a[i][j] -= a[i][k] * a[k][j];
}
for (j = ; j < n; j++) {
for (i = ; i < k; i++)
b[i][j] -= a[i][k] * b[k][j];
for (i = k + ; i < n; i++)
b[i][j] -= a[i][k] * b[k][j];
}
for (i = ; i < k; i++)
a[i][k] = ;
a[k][k] = ;
}
// 恢复行列次序;
for (j = ; j < n; j++)
for (i = ; i < n; i++)
a[p[i]][j] = b[i][j];
} //矩阵乘法
public void Mrcheng(double[][] a,double[][] b,double[][]c,int m,int n,int l)
{
double[][] d=new double[m][l];
//使用中间变量d,是防止c=a或c=b的情形下计算出错
int i,j,k;
for(i=;i<m;i++)
for(j=;j<l;j++)
{
d[i][j]=;
for(k=;k<n;k++)
d[i][j]+=a[i][k]*b[k][j];
} for(i=;i<m;i++)
for(j=;j<l;j++)
c[i][j]=d[i][j];
} }

java 矩阵求逆的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. 如何在java中拟合正态分布

    前言 最近在工作中需要拟合高斯曲线,在python中可以使用 scipy,相关代码如下: #!/usr/bin/env python # -*- coding=utf-8 -*- %matplotli ...

  3. java矩阵包jama的简单操作

    本文转自http://www.cnblogs.com/zangbo/p/5622351.html 一.jama简介 Jama是一个基本的线性代数java包.包括一个基本的Matrix类和5个矩阵分解类 ...

  4. Java调用jama实现矩阵运算

    Java调用jama实现矩阵运算 一.jama简介 Jama是一个基本的线性代数java包.包括一个基本的Matrix类和5个矩阵分解类. Matrix类提供了基本的线性代数数值运算的功能,不同的构造 ...

  5. 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题

    背景起因: 记起以前的另一次也是关于内存的调优分享下   有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...

  6. Elasticsearch之java的基本操作一

    摘要   接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...

  7. 论:开发者信仰之“天下IT是一家“(Java .NET篇)

    比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...

  8. 故障重现, JAVA进程内存不够时突然挂掉模拟

    背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...

  9. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

随机推荐

  1. c#+ArcGIS Engine-获取矢量图层的空间参考

    转自原文c#+ArcGIS Engine-获取矢量图层的空间参考 介绍一种简单的获取矢量图层空间参考的方法: 首先打开Shp文件获得FeatureClass,代码如下: string pPath=&q ...

  2. CheckBox:屏蔽setChecked方法对OnCheckedChangeListener的影响

    对于CheckBox的OnCheckedChangeListener,有两种情况下会被触发: (1)用户点击了一下CheckBox: (2)代码中调用了setChecked(boolean check ...

  3. bind DNS搭建笔记

    设置默认网关 偶尔会出现问题 route add default gw 192.168.0.1 .vim /etc/sysctl.conf 这里是重点 配置路由转发,路由开启等都要用到. # Cont ...

  4. export和source的区别

    1.执行脚本是在一个子shell环境运行的,脚本执行完后该子shell自动退出. 2.执行脚本中的系统环境变量(用export定义的变量)才会被复制到子shell中. 3.一个shell中的系统环境变 ...

  5. Google Summer of Code 2017 经验谈

    Google Summer of Code (GSoC) 2018 又要开始了. 如果想实现你心中的开源梦想, 用代码让世界变得更美好. 参加GSoC可能是你进入开源的世界最好途径. GSoC是什么 ...

  6. springmvc使用jQuery.datatable时遇到的错误

    springmvc使用jQuery.datatable时遇到的错误 1正确时返回 josn结果: {,,,,,,,,,,,,,,,,"} 页面显示处理中(processing),列表空白,其 ...

  7. 基于zookeeper实现分布式配置中心(二)

    上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...

  8. centos下安装redis/mysql等基础环境

    1.修改语言 阿里云的ECS默认语言是:en_US.UTF-8,需要改成zh_CN.UTF-8 修改方法:vim /etc/locale.conf,然后重启. 查看方法:echo $LANG 2.安装 ...

  9. 洛谷——P1518 两只塔姆沃斯牛 The Tamworth Two

    https://www.luogu.org/problem/show?pid=1518 题目背景 题目描述 两只牛逃跑到了森林里.农夫John开始用他的专家技术追捕这两头牛.你的任务是模拟他们的行为( ...

  10. 37.cgi网页交互

    1.Apache的安装 地址:链接:https://pan.baidu.com/s/1kWdSWwZ 密码:nuqo 2.在相应路径下写html如图所示 new.html代码: <html> ...