编写一个程序实现N(N>=3)阶矩阵(方阵)的求逆运算
要求:1.程序实现完成N阶方阵的输入输出及逆矩阵的输出
2.求逆运算算法不限 要求数值精确到小数点后至少两位
要求:1.程序实现完成N阶方阵的输入输出及逆矩阵的输出
2.求逆运算算法不限 要求数值精确到小数点后至少两位
解决方案 »
- 关于myeclipse调试java网络程序的问题!就高手指点!
- 判断第十位是不是1, 用JAVA 与或运算能计算出来吗?
- 有个问题
- J2EE是什么?怎么样?有没有前途?
- 怎么样用java连接access数据库?-----在线等待回答
- java是否可以模拟键盘的输入?
- 初学者问的一个简单得跳楼的问题:)
- 有关异常抛出的问题。。。。>>>>>>>>>>>
- weblogic6.0,好怪,在console 中新建立jdbc connection pool时,按下create按钮没效果
- 界面设计布局的问题.add(xxx, BorderLayout.SOUTH)还是跑到下面了
- 请问如何用一个线程去监视已经在运行的线程是否已经结束?
- javamail中ISO-8859-1转化为gbk的问题
import java.text.*;public class Test
{
public static void main(String args[])
{int N;
String str[];
try
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
N=Integer.parseInt(br.readLine());
double a[][]=new double[N][N],b[][]=new double[N][N];
System.out.println("请输入"+N*N+"个数作为原始矩阵的元素,并以空格分隔");
BufferedReader brr=new BufferedReader(new InputStreamReader(System.in));
str=brr.readLine().split(" ");
for (int j=0,k=0,i=0;j<N&&k<N ;i++ )
{
a[k][j]=Double.parseDouble(str[i]);j++;
if ((i+1)%N==0)
{
k++;
j=0;
}
}
System.out.println("原始矩阵为:");
for (int i=0;i<N ;i++ )
{
for (int j=0;j<N ;j++ )
{
System.out.print(a[i][j]+" ");
if ((j+1)%N==0)
{
System.out.println();
}
}
}
System.out.println("逆矩阵为:");
for (int i=0;i<N ;i++ )
{
for (int j=0;j<N ;j++ )
{
b[i][j]=a[j][i];
System.out.print(b[i][j]+" ");
if ((j+1)%N==0)
{
System.out.println();
}
}
}
}
catch (IOException e)
{
}
}
}
public class Structure
{
public static void change(int[][] a)
{
LinkedList<Integer> al=new LinkedList<Integer>();
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[0].length;j++)
{
al.add(a[i][j]);
}
}
System.out.println("转换前的矩阵:");
int k=0;
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[0].length;j++)
{
System.out.print(al.get(k)+" ");
k++;
}
System.out.println();
}
k=0;
for(int i=a.length-1;i>=0;i--)
{
for(int j=a[0].length-1;j>=0;j--)
{
a[i][j]=al.get(k);
k++;
}
}
System.out.println("转换后的矩阵:");
for(int i=0;i<a.length;i++)
{
for(int j=0;j<a[0].length;j++)
{
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
public static void main(String[] args)
{
int[][] a={{1,2,3},{4,5,6},{7,8,9}};
change(a);
}
}
T×T^-1=E
T^-1叫做T的逆矩阵!
有点常识好不好?
package chdw;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);
}
}