package com.karin;
创新互联是一家专注于网站建设、做网站与策划设计,嘉鱼网站建设哪家好?创新互联做网站,专注于网站建设10多年,网设计领域的专业建站公司;建站业务涵盖:嘉鱼等地区。嘉鱼做网站价格咨询:13518219792
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);
}
}
矩阵规模如何?
如果矩阵比较小 (~10), 可以直接按照定义来计算, P[x] = det( x*I - A); 其中det是一个矩阵的行列式; 可以按照定义直接迭代求;
如果矩阵比较大(100), 可以先求特征值, 然后构造矩阵特征多项式 P[x] = (x-x1)*(x-x2)... (x-xn), 其中xi为矩阵的第i个特征值.
这应该是线性数学的矩阵
逻辑思路是:取A矩阵的每一行的各个项去乘以B矩阵每个列的各个项
为了测试,我现在假设A矩阵是4*3, B矩阵是3*2, 你要做的乘操作是4*3*2=24次
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
int[][]A=new int[][]{{1,2,3},{4,5,6},{7,8,9},{10,11,12}};
int[][]B=new int[][]{{1,2},{3,4},{5,6}};
int len_A=A[0].length;//a每行元素数,这里是3
int col_A=A.length;//a每列元素数,这里是4
int len_B=B[0].length;//b每行元素数,这里是2
int col_B=B.length;//b每列元素数,这里是3
int len_a=0;
int col_a=0;
int len_b=0;
int col_b=0;
int sum=0;
while(len_blen_B)//使B的下一列被A乘
{
col_a=0;
while(col_acol_A)//使A可以移动至下一行
{
len_a=0;
col_b=0;
while(len_alen_A)//使A的当前行乘以B的当前列
{
sum+=A[col_a][len_a]*B[col_b][len_b];
len_a++;
col_b++;
}
col_a++;
}
len_b++;
}
System.out.println(sum);
}
}
把数据,也就是你每行每列展示的数据按规则存放到2维数组内。
然后按 行、列循环即可。但是前提,你存放的数据一定按照二维数组你想要的规则。String[i][j] array ; i为行、j为列。规则不能错误。
重点就是你如何往里塞数据。仔细考虑
楼主你好
具体代码如下:
import java.math.*;
public class Test
{
private int[][] a = new int[5][5];
public void getA()
{
for (int i = 0; i 5; i++)
{
for (int j = 0; j 5; j++)
{
a[i][j] = (int)(Math.random() * 10);
}
}
}
public void getSum()
{
int zdj=0,fdj=0,zb=0;//分别是主对角 负对角 周边
getA();
for (int i = 0; i 5; i++)
{
for (int j = 0; j 5; j++)
{
System.out.printf ("%d ",a[i][j]);
if(i==0 || i==4)
{
zb += a[i][j];
}
else
{
if(j==0 || j==4)
{
zb += a[i][j];
}
}
if(j == i)
{
zdj += a[i][j];
}
if((i+j == 4))
{
fdj += a[i][j];
}
}
System.out.println ();
}
System.out.println ("主对角线的和:"+zdj);
System.out.println ("负对角线的和:"+fdj);
System.out.println ("周边之和:"+zb);
}
public static void main(String[] args)
{
Test t = new Test();
t.getSum();
}
}
运行结果如下:
0 3 4 8 7
8 9 7 5 6
1 1 8 5 5
3 5 5 1 7
8 7 2 4 5
主对角线的和:23
负对角线的和:33
周边之和:78
希望能帮助你哈
求伴随矩阵和矩阵的秩可以以下代码:
A=magic(5);%矩阵A
A=det(A)*inv(A);%求伴随矩阵
Az=rank(A);%求矩阵的秩用rank函数