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[] ...
随机推荐
- 【LeetCode-面试算法经典-Java实现】【057-Insert Interval(插入区间)】
[057-Insert Interval(插入区间)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Given a set of non-overlapping in ...
- [Python] Generating random numbers using numpy lib
import numpy as np def test_run(): data=np.random.random((3,4)) """ [[ 0.80150549 0.9 ...
- flash3D学习1
今天正式学习flash3D. 先配置: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0 ...
- JAVA爬虫Nutch、WebCollector的正则约束
爬虫爬取时,须要约束爬取的范围. 基本全部的爬虫都是通过正則表達式来完毕这个约束. 最简单的,正则: http://www.xinhuanet.com/.* 代表"http://www.xi ...
- JsonRequestBehavior.AllowGet 方便浏览器调试
[HttpGet] public ActionResult getCoversationList(int CustomerId) { // 获取用户相关的聊天数据,包括个人,群,系统(可以单独获取) ...
- Entity Framework之Model First开发方式
一.Model First开发方式 在项目一开始,就没用数据库时,可以借助EF设计模型,然后根据模型同步完成数据库中表的创建,这就是Model First开发方式.总结一点就是,现有模型再有表. 二. ...
- 实现人脸识别性别之路---open CV将图片显示出来
import cv2filename='E:\\tensorflow\\bu.jpg'#图片的地址 # face_cascade=cv2.CascadeClassifier('C:\\anconda3 ...
- 处理某客户p570硬盘故障所思
p570,硬盘故障. 机器有两个vg,rootvg和datavg,rootvg未做镜像,datavg已做镜像.系统errpt和HMC报硬盘有问题,查看错误代码可能是硬盘有坏道(坏块),在尽量保全用户数 ...
- WPF通用框架ZFS《项目结构介绍01》_模块介绍
首页介绍: 下图为项目运行首页图片, 大的结构分为三块: 1.Header首部模块(存放通知组件[全局通知.消息管理 ].扩展模块[皮肤.系统设置.关于作者.退出系统]) 2.Left左侧菜单模块(存 ...
- OCP-1Z0-051-题目解析-第27题
27. Which two statements are true regarding tables? (Choose two.) A. A table name can be of any len ...