求N阶矩阵

package com.ql.until.huigui;

import java.util.Date;
import java.util.Scanner;

import javax.swing.JOptionPane;

import Jama.*;

 
	
	
	/*
二元线性回归
y=a+bx1+cx2

x1=拥有钱
x2=人数
y=消费的钱
*/
public class multiMetrix {
	//矩阵相乘方法
	public static void multiMetrixAandB(int metrixA[][] , int metrixB[][]){
	int result[][] = new int[metrixA.length][metrixB[0].length];
	int x,i,j,tmp=0;
	for(i =0;i<metrixA.length;i++){
	for(j = 0;j<metrixB[0].length;j++){
	for( x=0;x<metrixB.length;x++)
	tmp += metrixA[i][x] * metrixB[x][j];//矩阵AB中a_ij的值等于矩阵A的i行和矩阵B的j列的乘积之和
	 
	 result[i][j] = tmp;
	 tmp = 0; //中间变量,每次使用后都得清零
	}
	}
	//打印计算后的矩阵
	System.out.println("\n"+"矩阵A*B的值为:");
	for( i=0;i<result.length;i++){
	for(j=0;j<result[i].length;j++){
	System.out.print(result[i][j] + " ");
	}
	System.out.print("\n");
	}
	}
	public static void main(String args[]){
	Scanner input = new Scanner(System.in);
	System.out.print("请输入矩阵A的行数和列数:");
	int row = input.nextInt();
	int column = input.nextInt();
	System.out.println("请输入"+row +"行" + column+"列的矩阵A:");
	int metrixA[][] = new int [row][column];//NEW一个数组,保存矩阵A
	for(int i =0;i<row;i++)
	for(int j =0;j<column;j++)
	metrixA[i][j] = input.nextInt();
	System.out.print("请输入矩阵B的行数和列数:");
	int rowB = input.nextInt();
	if(rowB != column)
	JOptionPane.showMessageDialog(null,"矩阵A(m*n)和矩阵B(u*v)相乘需要满足 n==u!即A(m*n)-B(n*k)","温馨提示",JOptionPane.INFORMATION_MESSAGE);
	int columnB = input.nextInt();
	System.out.println("请输入"+rowB +"行" + columnB+"列的矩阵B:");
	int metrixB[][] = new int [rowB][columnB];//NEW一个数组,保存矩阵B
	for(int i =0;i<rowB;i++)
	for(int j =0;j<columnB;j++)
	metrixB[i][j] = input.nextInt();
	multiMetrixAandB(metrixA,metrixB);
	}
	}

=================逆

package com.ql.until.huigui;

import java.io.BufferedReader;
import java.io.InputStreamReader;
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);
	}
}


以下是一个通用的 $n$ 方阵伴随矩阵的 C 语言代码: ```c #include <stdio.h> // 获取 n-1 矩阵 void get_submatrix(int matrix[][100], int sub[][100], int row, int col, int n) { int i, j, p = 0, q = 0; for (i = 0; i < n; i++) { if (i == row) continue; for (j = 0; j < n; j++) { if (j == col) continue; sub[p][q++] = matrix[i][j]; } q = 0; p++; } } // 计算行列式的值 int determinant(int matrix[][100], int n) { int i, j, det = 0; int sub[100][100]; if (n == 1) { return matrix[0][0]; } else if (n == 2) { return matrix[0][0]*matrix[1][1] - matrix[0][1]*matrix[1][0]; } else { for (i = 0; i < n; i++) { get_submatrix(matrix, sub, 0, i, n); det += ((i%2 == 0) ? 1 : -1) * matrix[0][i] * determinant(sub, n-1); } } return det; } // 伴随矩阵 void adjoint(int matrix[][100], int adj[][100], int n) { int i, j, sign; int sub[100][100]; if (n == 1) { adj[0][0] = 1; } else { for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { get_submatrix(matrix, sub, i, j, n); sign = ((i+j)%2 == 0) ? 1 : -1; adj[j][i] = sign * determinant(sub, n-1); } } } } int main() { int n, i, j; int matrix[100][100], adj[100][100]; printf("Enter the size of matrix: "); scanf("%d", &n); printf("Enter the elements of matrix:\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%d", &matrix[i][j]); } } adjoint(matrix, adj, n); printf("Adjoint matrix:\n"); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { printf("%d ", adj[i][j]); } printf("\n"); } return 0; } ``` 这个代码可以接受用户输入一个 $n$ 方阵,并将其伴随矩阵存储在 `adj` 中。你可以根据需要修改输入矩阵和输出矩阵,但请注意,该代码最多支持 $100$ 方阵。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值