6阶矩阵求逆 c语言,矩阵的LU分解以及求逆矩阵--c语言

matrix.h#ifndef MATRIX_H_#define MATRIX_H_#include #include #include #include #include #include #include #ifdef N#define PRINTMATRIX(A, S) \for (int i = 0; i < N; i++) \{ ...
摘要由CSDN通过智能技术生成

matrix.h

#ifndef MATRIX_H_

#define MATRIX_H_

#include

#include

#include

#include

#include

#include

#include

#ifdef N

#define PRINTMATRIX(A, S) \

for (int i = 0; i < N; i++) \

{ \

for (int j = 0; j < N; j++) \

{ \

printf("%lf\t", A[i][j]); \

} \

printf("\n"); \

} \

printf("=================================\n");

bool floatCompare(double f1, double f2)

{

return fabs(f1 - f2) < 1.0e-05;

}

//求对角矩阵的det

double DiagDet(double Matrix[N][N])

{

double res = Matrix[0][0];

for (int i = 0; i < N; i++)

{

res = res * Matrix[i][i];

}

return res;

}

void MatMul(double lhs[N][N], double rhs[N][N], double res[N][N])

{

for (int row = 0; row < N; row++)

{

for (int col = 0; col < N; col++)

{

double ret &#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LU分解是一种矩阵的方法之一,下面是一个使用C语言实现的LU分解矩阵的示例代码: ```c #include <stdio.h> #include <stdlib.h> #define N 3 void LUdecomposition(double A[N][N], double L[N][N], double U[N][N]) { int i, j, k; double sum; // 初始化U矩阵为A矩阵 for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { U[i][j] = A[i][j]; } } // 初始化L矩阵为单位矩阵 for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { if (i == j) { L[i][j] = 1.0; } else { L[i][j] = 0.0; } } } // LU分解 for (k = 0; k < N - 1; k++) { for (i = k + 1; i < N; i++) { L[i][k] = U[i][k] / U[k][k]; for (j = k; j < N; j++) { U[i][j] -= L[i][k] * U[k][j]; } } } } void inverse(double A[N][N], double A_inv[N][N]) { int i, j, k; double L[N][N], U[N][N], y[N][N], sum; // LU分解 LUdecomposition(A, L, U); // 解Ly=I for (k = 0; k < N; k++) { for (i = 0; i < N; i++) { sum = 0.0; for (j = 0; j < i; j++) { sum += L[i][j] * y[j][k]; } if (i == k) { y[i][k] = 1.0 - sum; } else { y[i][k] = -sum; } } } // 解Ux=y for (k = 0; k < N; k++) { for (i = N - 1; i >= 0; i--) { sum = 0.0; for (j = i + 1; j < N; j++) { sum += U[i][j] * A_inv[j][k]; } A_inv[i][k] = (y[i][k] - sum) / U[i][i]; } } } int main() { double A[N][N] = {{2.0, -1.0, 0.0}, {-1.0, 2.0, -1.0}, {0.0, -1.0, 2.0}}; double A_inv[N][N]; int i, j; inverse(A, A_inv); printf("A_inv:\n"); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { printf("%.2f\t", A_inv[i][j]); } printf("\n"); } return 0; } ``` 该代码中,`LUdecomposition()`函数实现了LU分解,`inverse()`函数实现了矩阵解,`main()`函数中给出了一个示例矩阵A,调用`inverse()`函数解其矩阵并输出。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值