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——加入地图并显示x,y坐标
这个示例报告了用户在地图上悬停和拖拽鼠标的鼠标指针坐标.通过事件监听器来更新鼠标移到的x和y坐标. 下行代码创建了地图: var map = new esri.Map("map") ...
- PHP 做图片锐化处理
<?php //读取图像的类型 //1=GIF,2=JPG,3=PNG,4=SWF,5=PSD,6=BMP,7=TIFF(intelbyteorder),8=TIFF(motorolabyteo ...
- 安卓自己定义对话框及The specified child already has a child问题
问题:在android开发过程中,有时会在不同情况下遇到同种问题:The specified child already has a parent.You must call removeView() ...
- 微软CEO纳德拉拥抱Linux意欲何为?
"我不喜欢打一场过时的战争."微软 CEO 萨蒂亚·纳德拉说道,"我想要打一场全新的战役." 上周日晚上.萨蒂亚·纳德拉来到旧金山 North Beach 区的 ...
- ECharts简单入门
图1和图2是手机上显示的效果, 图3是电脑浏览器显示的效果. 如何使用ECharts? 1.下载echarts.js 2.引入echarts.js <script type="text ...
- Android 数据库框架总结,总有一个适合你!
一:OrmLite 简述: 优点: 1.轻量级:2.使用简单,易上手:3.封装完善:4.文档全面.缺点:1.基于反射,效率较低(本人还没有觉得效率低):2.缺少中文翻译文档 jar包 地址:http: ...
- Android控件-TabHost(一)
什么是TabHost? TabHost组件的主要功能是可以进行应用程序分类管理,例如:在用户使用windows操作系统的时候,经常见到如图所示的图形界面. TabHost选项卡,说到这个组件, ...
- axure中使用HighCharts模板制作统计图表
一. 步骤: 1.在axure中新建页面,发布并生成html文件: 2.将HighCharts文件夹,拷贝到生成的html文件中: 3.拖拽“内部框架组件”到界面中 4.双击界面中的内部框架,设置链接 ...
- Flex 编译器及编译步骤
通过为Flex项目添加编译器参数:-keep-generated-actionscript=true 可以看到经过编译器处理过的源程序文件集合. 在这些文件的文件名中包含有“xxx-generated ...
- Bootstrap概览
摘选自runnoob.com,bootstrap4所有api概览: 一.安装: 弹性盒子(flexbox) Bootstrap 3 与 Bootstrap 4 最大的区别就是 Bootstrap 4 ...