用c++写一个让矩阵转换成逆矩阵
时间: 2023-05-15 11:07:36 浏览: 56
以下是一个用 C 语言编写的矩阵求逆的代码示例:
```c
#include <stdio.h>
#define N 3
void print_matrix(double matrix[N][N]) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
printf("%lf ", matrix[i][j]);
}
printf("\n");
}
}
void swap_rows(double matrix[N][N], int i, int j) {
for (int k = 0; k < N; k++) {
double temp = matrix[i][k];
matrix[i][k] = matrix[j][k];
matrix[j][k] = temp;
}
}
void scale_row(double matrix[N][N], int i, double scalar) {
for (int k = 0; k < N; k++) {
matrix[i][k] *= scalar;
}
}
void add_rows(double matrix[N][N], int i, int j, double scalar) {
for (int k = 0; k < N; k++) {
matrix[i][k] += scalar * matrix[j][k];
}
}
void invert_matrix(double matrix[N][N], double inverse[N][N]) {
// Initialize the inverse matrix to the identity matrix
for (int i = 0; i < N; i++) {
for (int j = 0; j < N; j++) {
inverse[i][j] = (i == j) ? 1.0 : 0.0;
}
}
// Perform row operations to transform the matrix into the identity matrix
for (int i = 0; i < N; i++) {
// Find the pivot row
int pivot_row = i;
for (int j = i + 1; j < N; j++) {
if (matrix[j][i] > matrix[pivot_row][i]) {
pivot_row = j;
}
}
// Swap the pivot row with the current row
if (pivot_row != i) {
swap_rows(matrix, i, pivot_row);
swap_rows(inverse, i, pivot_row);
}
// Scale the current row so that the pivot element is 1
double pivot = matrix[i][i];
scale_row(matrix, i, 1.0 / pivot);
scale_row(inverse, i, 1.0 / pivot);
// Use the current row to eliminate the pivot element from the other rows
for (int j = 0; j < N; j++) {
if (j != i) {
double factor = -matrix[j][i];
add_rows(matrix, j, i, factor);
add_rows(inverse, j, i, factor);
}
}
}
}
int main() {
double matrix[N][N] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
double inverse[N][N];
printf("Original matrix:\n");
print_matrix(matrix);
invert_matrix(matrix, inverse);
printf("Inverse matrix:\n");
print_matrix(inverse);
return 0;
}
```
这个程序可以将一个 3x3 的矩阵求逆,并输出结果。如果需要处理更大的矩阵,可以将 N 定义为更大的值。