LU分解 Ax=b, A=LU

LU分解

详细算法: https://zhuanlan.zhihu.com/p/84210687

示例:https://www.geeksforgeeks.org/l-u-decomposition-system-linear-equations/

LU分解的实现可以用SVD分解。

问题描述: 解方程Ax=b, A可以分解成 LU,L是下三角矩阵,U是上三角矩阵。

LU分解的意义:减少计算量,便于程序化。

数学推导:

Ax=LUx=b,令y=Ux,则Ly=b,先求出y,再根据y=Ux求出x.

通过高斯消元法(行列变换)

对矩阵A连续做行变换最终可以得到上三角矩阵

如:

A  -行变换-> L0A -行变换->L1A-行变换->L2A->U

\\L_{2}L_{1}L_{0}A=U\\ A=L_{0}^{-1}L_{1}^{-1}L_{2}^{-1}U=LU\\ L=L_{0}^{-1}L_{1}^{-1}L_{2}^{-1}

示例AX=b

\\ A=\begin{pmatrix} 1 & 1 & 1\\ 4 & 3 & -1\\ 3 & 5 & 3 \end{pmatrix}, X=\begin{pmatrix} x1\\ x2\\ x3 \end{pmatrix}, b=\begin{pmatrix} 1\\ 6\\ 4\\ \end{pmatrix}\\

做变换,L0=r2-4r1,L1=r3-3r1 得到

\\ L_1L_0A=\begin{pmatrix} 1 & 1 & 1\\ 0 & -1 & -5\\ 0 & 2 & 0 \end{pmatrix},

L2=r3+2r2,得到

L_2L_1L_0A=\begin{pmatrix} 1 & 1 &1\\ 0 & -1 & -5\\ 0 & 0 & -10\\ \end{pmatrix}=U

L_0=\begin{pmatrix} 1 & 0 & 0\\ -4 &1 & 0\\ 0 & 0 &1\\ \end{pmatrix},L_0^{-1}=\begin{pmatrix} 1 & 0 & 0\\ 4 &1 & 0\\ 0 & 0 &1\\ \end{pmatrix}  逆变换即对应元素相加为0,

L_1=\begin{pmatrix} 1 & 0 & 0\\ 0 &1 & 0\\ -3 & 0 &1\\ \end{pmatrix},L_1^{-1}=\begin{pmatrix} 1 & 0 & 0\\ 0 &1 & 0\\ 3 & 0 &1\\ \end{pmatrix}

L_2=\begin{pmatrix} 1 & 0 & 0\\ 0 &1 & 0\\ 0 & 2 &1\\ \end{pmatrix},L_2^{-1}=\begin{pmatrix} 1 & 0 & 0\\ 0 &1 & 0\\ 0 & -2 &1\\ \end{pmatrix}

L=L_0^{-1}L_1^{-1}L_2^{-1}=\begin{pmatrix} 1 & 0 & 0\\ 4 &1 & 0\\ 0 & 0 &1\\ \end{pmatrix}\begin{pmatrix} 1 & 0 & 0\\ 0 &1 & 0\\ 3 & 0 &1\\ \end{pmatrix}\begin{pmatrix} 1 & 0 & 0\\ 0 &1 & 0\\ 0 & -2 &1\\ \end{pmatrix}=\begin{pmatrix} 1 & 0 & 0\\ 4 &1 & 0\\3 & 0 &1\\ \end{pmatrix}\begin{pmatrix} 1 & 0 & 0\\ 0 &1 & 0\\ 0 & -2 &1\\ \end{pmatrix}=\begin{pmatrix} 1 & 0 & 0\\ 4 &1 & 0\\ 3 & -2 &1\\ \end{pmatrix}

逆变换相乘:对应元素相加

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
以下是使用选主元 LU 分解求解稀疏矩阵 Ax=b 的 C 代码: ``` #include <stdio.h> #include <stdlib.h> #include <math.h> #define N 100 // 矩阵的最大维数 #define eps 1e-10 // 用于判断是否为零的阈值 typedef struct { int i, j; double val; } node; int n; // 矩阵的维数 node a[N * N]; // 稀疏矩阵存储结构 int ia[N + 1], ja[N * N + 1]; // 行和列指针 // 选主元 LU 分解函数 void lu_decomp(double *A, int *ipiv) { int i, j, k, p; double maxa, tmp; for (i = 0; i < n; i++) { ipiv[i] = i; } for (k = 0; k < n - 1; k++) { maxa = fabs(A[k * n + k]); p = k; for (i = k + 1; i < n; i++) { if (fabs(A[i * n + k]) > maxa) { maxa = fabs(A[i * n + k]); p = i; } } if (p != k) { for (j = 0; j < n; j++) { tmp = A[k * n + j]; A[k * n + j] = A[p * n + j]; A[p * n + j] = tmp; } i = ipiv[k]; ipiv[k] = ipiv[p]; ipiv[p] = i; } for (i = k + 1; i < n; i++) { A[i * n + k] /= A[k * n + k]; for (j = k + 1; j < n; j++) { A[i * n + j] -= A[i * n + k] * A[k * n + j]; } } } } // LU 分解求解函数 void lu_solve(double *A, int *ipiv, double *b, double *x) { int i, j; double sum; for (i = 0; i < n; i++) { sum = b[ipiv[i]]; for (j = 0; j < i; j++) { sum -= A[i * n + j] * x[j]; } x[i] = sum; } for (i = n - 1; i >= 0; i--) { sum = x[i]; for (j = i + 1; j < n; j++) { sum -= A[i * n + j] * x[j]; } x[i] = sum / A[i * n + i]; } } int main() { int i, j, k, cnt = 0; double A[N][N], b[N], x[N]; int ipiv[N]; // 读入矩阵和向量 scanf("%d", &n); for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { scanf("%lf", &A[i][j]); if (fabs(A[i][j]) > eps) { a[cnt].i = i; a[cnt].j = j; a[cnt].val = A[i][j]; cnt++; } } } for (i = 0; i < n; i++) { scanf("%lf", &b[i]); } // 构造行和列指针 k = 0; for (i = 0; i <= n; i++) { ia[i] = k; for (j = 0; j < n; j++) { if (a[k].i == i) { ja[k] = a[k].j; k++; } } } // LU 分解求解 lu_decomp(a, ipiv); lu_solve(a, ipiv, b, x); // 输出结果 for (i = 0; i < n; i++) { printf("%lf ", x[i]); } return 0; } ``` 其中,稀疏矩阵存储结构使用了三元组表示法,同时构造了行和列指针。选主元 LU 分解的代码实现和普通的 LU 分解类似,只是在选主元时需要额外的代码。LU 分解求解的代码也和普通的 LU 分解类似,只是需要传入行和列指针。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值