java 矩阵求逆
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 矩阵求逆的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 如何在java中拟合正态分布
前言 最近在工作中需要拟合高斯曲线,在python中可以使用 scipy,相关代码如下: #!/usr/bin/env python # -*- coding=utf-8 -*- %matplotli ...
- java矩阵包jama的简单操作
本文转自http://www.cnblogs.com/zangbo/p/5622351.html 一.jama简介 Jama是一个基本的线性代数java包.包括一个基本的Matrix类和5个矩阵分解类 ...
- Java调用jama实现矩阵运算
Java调用jama实现矩阵运算 一.jama简介 Jama是一个基本的线性代数java包.包括一个基本的Matrix类和5个矩阵分解类. Matrix类提供了基本的线性代数数值运算的功能,不同的构造 ...
- 故障重现(内存篇2),JAVA内存不足导致频繁回收和swap引起的性能问题
背景起因: 记起以前的另一次也是关于内存的调优分享下 有个系统平时运行非常稳定运行(没经历过大并发考验),然而在一次活动后,人数并发一上来后,系统开始卡. 我按经验开始调优,在每个关键步骤的加入如 ...
- Elasticsearch之java的基本操作一
摘要 接触ElasticSearch已经有一段了.在这期间,遇到很多问题,但在最后自己的不断探索下解决了这些问题.看到网上或多或少的都有一些介绍ElasticSearch相关知识的文档,但个人觉得 ...
- 论:开发者信仰之“天下IT是一家“(Java .NET篇)
比尔盖茨公认的IT界领军人物,打造了辉煌一时的PC时代. 2008年,史蒂夫鲍尔默接替了盖茨的工作,成为微软公司的总裁. 2013年他与微软做了最后的道别. 2013年以后,我才真正看到了微软的变化. ...
- 故障重现, JAVA进程内存不够时突然挂掉模拟
背景,服务器上的一个JAVA服务进程突然挂掉,查看产生了崩溃日志,如下: # Set larger code cache with -XX:ReservedCodeCacheSize= # This ...
- 死磕内存篇 --- JAVA进程和linux内存间的大小关系
运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...
随机推荐
- ArcGIS api for javascript——鼠标悬停时显示信息窗口
描述 本例展示当用户在要素上悬停鼠标时如何显示InfoWindow.本例中,要素是查询USA州图层的QueryTask的查询结果.工作流程如下: 1.用户单击一个要素 2.要素是“加亮的”图形. 3. ...
- vdceye 最新中文界面
最新的vdceye 的界面.左边菜单增加了问题.并增加了虚拟摄像机部分 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdmlkZW9fZGM=/font/5 ...
- JSunpack-n模拟WireShark拦截文件传输
前言: 在前面的实验里我们进行了JSunpack-n的安装及其简单使用.JSunpack-n还有另外一些功能须要进行測试试验,由于本人也是刚接触这些东西.本文就当中一个"功能点"进 ...
- windows開始菜单和任务栏图标显示空白而且点击时候显示项目已被移动或删除
这几天实验室老常常自己主动断电.这是非常蛋疼的一件事,这不上次断电就出事了.来电后开机,点击任务栏上的程序全都显示为无法打开此项目,该项目已被移动.删除.原因是图标缓存丢失,可能是突然断电引起的,也有 ...
- Azure 配置高可用的准备系列工作-建立不同区域的存储账户和建立网络!
我们谈到我们的业务,常常谈到一个词.三层架构,就是我们的UI层.数据訪问层和数据存储层的分离,通常情况下我们的业务高可用必须满足这三层的所有高可用的情况下才干达到最高级别的高可用. 那么谈到Az ...
- Yocto tips (10): Yocto hellworld 加入一个软件包
Yocto中一个软件包是放在bb文件里的,然后非常多的bb文件集成一个recipe(配方),然后很多的recipe又组成一个meta layer.因此,要加入一个包事实上就是在recipe以下加入一个 ...
- IIS 优化
http://www.cnblogs.com/wangjingblogs/archive/2013/02/27/2934706.html 通过对IIS7的配置进行优化,调整IIS7应用池的队列长度,请 ...
- 如何修改Web.Config里面的值
0.先添加 <add key="MAXNUM" value="6" /> 1.读取值 string maxNum = ConfigurationMa ...
- Zabbix监控平台部署
系统环境 Server端:192.168.149.128 Agent端:192.168.149.129 一.lamp环境安装 1.yum安装lamp yum install -y http http- ...
- 基于zookeeper实现分布式配置中心(二)
上一篇(基于zookeeper实现分布式配置中心(一))讲述了zookeeper相关概念和工作原理.接下来根据zookeeper的特性,简单实现一个分布式配置中心. 配置中心的优势 1.各环境配置集中 ...