- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
要求解线性矩阵方程,可以使用 numpy.linalg.solve
它实现了 LAPACK 例程 *gesv .
根据文档
DGESV computes the solution to a real system of linear equations
A * X = B,
where A is an N-by-N matrix and X and B are N-by-NRHS matrices.
The LU decomposition with partial pivoting and row interchanges is
used to factor A as
A = P * L * U,
where P is a permutation matrix, L is unit lower triangular, and U is
upper triangular. The factored form of A is then used to solve the
system of equations A * X = B.
但是,我们也可以使用 scipy.linalg.lu_factor()
和 scipy.linalg.lu_solve()
为了解决我们的问题,其中lu_factor()
是
Compute pivoted LU decomposition of a matrix.
The decomposition is:
A = P L U
where P is a permutation matrix,
L lower triangular with unit diagonal elements,
and U upper triangular.
显然这两种方法似乎是多余的。这种冗余有什么意义吗?似乎让我感到困惑..
最佳答案
确实你是对的:链接 scipy 的 scipy.linalg.lu_factor()
和 scipy.linalg.lu_solve()
完全等同于 numpy 的 numpy.linalg.solve()
。不过,在实际情况下访问 LU 分解是一个很大的优势。
首先,让我们证明等价性。 numpy.linalg.solve()
指出:
The solutions are computed using LAPACK routine _gesv
确实,github repository of numpy 包含 LAPACK 的精简版。那么,我们来看看LAPACK的dgesv
的源码。计算矩阵的 LU 分解并用于求解线性系统。确实,该函数的源代码非常清晰:用于输入检查的appart,归结为调用dgetrf
(LU factorization)和dgetrs
。最后,scipy.linalg.lu_factor()
和 scipy.linalg.lu_solve()
分别包装了 dgetrf
和 dgetrs
,具有类似 getrf, = get_lapack_funcs(('getrf',), (a1,))
和 getrs, = get_lapack_funcs(('getrs',), (lu, b1))
。
正如@Alexander Reynolds 所注意到的,LU 分解可用于计算矩阵的行列式和秩。实际上,关于行列式,numpy.det
调用 LU 因式分解 _getrf! 请参阅 source of numpy.linalg。然而,numpy 使用 SVD 分解计算矩阵的秩。
但是使用 LU 计算排名并不是将接口(interface)公开给 dgetrf
和 dgetrs
的唯一原因。确实有一些常见的情况,调用一次 dgetrf
,将 LU 分解保留在内存中并多次调用 dgetrs
是决定性的优势。以 iterative refinement 为例。必须注意的是,计算 LU 分解比使用分解求解线性系统 (N^2) 花费更多的时间 (N^3)。
让我们看一下 Newton-Raphson method 求解耦合非线性方程组 F(x)=0 其中F: R^N->R^N。执行 Newton-Raphson 迭代需要求解矩阵为雅可比矩阵 J 的线性系统:
其中 x_{i+1} 是未知数。 Jacobian J(x_i) 的计算成本通常很高,更不用说系统必须求解的事实了。因此,通常会考虑准牛顿法,其中建立雅可比行列式的近似值。一个直截了当的想法是不在每次迭代时更新雅可比矩阵,只要残差范数减少就一直迭代。 在这样的过程中,dgetrf
会每隔一段时间被调用一次,而dgetrs
每次迭代都会调用一次。方案见there。让我们看一个例子:让我们尝试从 x_0=2 开始求解 x^2=1。对于牛顿法的 4 次迭代,我们得到 f(x_4)=9.2e-8 和 f(x_5)<1e-13。但如果雅可比矩阵每十次迭代更新一次,则只需对雅可比矩阵进行两次评估即可得到 f(x_12)=5.7e-11 和 f(x_13)=2.2e-14。
还有更有效的策略,包括每次迭代更新一次 LU 分解而不分解任何矩阵。请参阅 Denis 和 Marwil 的 "Direct Secant Updates of Matrix Factorizations" 以及 Brown 等人的 "EXPERIMENTS WITH QUASI-NEWTON METHODS IN SOLVING STIFF ODE SYSTEMS"。等
因此,在 non-linear finite element analysis 中,并不总是在每次牛顿迭代( option of Code_Aster in paragraph 3.10.2MATRICE 或 diana 或 here 或 there 。
关于python - numpy.linalg.solve 和 numpy.linalg.lu_solve 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44672029/
我正在使用 spyder - python。我想测试我的代码。我已关注 pip install spyder-unittest和 pip install pytest .我已经重新启动了内核并重新启动
我编写了一个简单的代码来匹配和选择/丢弃两个文件中的元素。此代码适用于包含 Id 对的 $file_in: Id1 Id2 Id1 Id3 Id1 Id4 Id3 Id4 Id3 Id5 Id3 Id
问题陈述:当 for 循环第二次执行时,我收到 Stale Element Exception。 描述: 我正在使用 for 循环来处理表元素。在第一次迭代中,它将在页面上搜索所需的元素。如果该元素在
我编写了一个简单的代码来匹配和选择/丢弃两个文件中的元素。此代码适用于包含 Id 对的 $file_in: Id1 Id2 Id1 Id3 Id1 Id4 Id3 Id4 Id3 Id5 Id3 Id
我正在尝试用 Java 创建康威的生命游戏,但似乎遇到了障碍。我创建了一个名为“Cell”的类,它包含一个 boolean 变量,该变量本质上确定细胞是活的还是死的,以及在需要时杀死或创建细胞的方法。
我有一张 table userid points expires我只想对所有匹配特定 userid 的点求和和 CURTIME() < expires . 所以我做到了: select *, su
题目地址:https://leetcode.com/problems/solve-the-equation/description/ 题目描述: Solve a given equation an
自从工作流构建问世以来,我一直在使用 TFS 构建。我从未见过使用以下任何一项的需要或愿望: Copy Build output to the server 什么服务器?什么目录? `将构建输出复制到
我有这个矩阵 a = {{2, -2, -4}, {-2, 5, -2}, {-4, -2, 2}} 然后我解出了一个缺少一项的方程。方程的形式为逆[p].a.p == q其中 p 是缺少条目 (x5
下面的代码解决了 hanoi 使用预定义函数 moveLOD、swapLOI 和 swapLID 返回 Action 列表的问题。 MoveLOD:将 1 个圆盘从第一个位置移动到三元组第三个位置中的
基本上,我通过从文本文件中读取一组整数来实现 AVL 树,然后使用 add() 方法填充树。另外,程序应该按顺序打印整数集。 当我运行该程序时,会弹出 StackOverflowError。我认为这个
我在 html 中有一个 span 标签,这个 可以在页面上多次出现。 我只想选择第一个跨度标签。我就是这样做的 var $myvar= $(".mydiv .indiv .myspan:first"
来自 sympy solve() 的解决方案是否以某种方式排序?它是从最小到最大的解决方案吗? 如何强制解决方案的非负性? 在我的问题中,我需要独特的最小正解决方案。我感谢所有的帮助 最佳答案 它们不
我正在尝试打开一个文件,但我收到了: 该进程无法访问该文件,因为它正被另一个进程使用。该文件是一个 XML 文档。谁能帮忙? string activeDirectory = @"X:\SubGr
如何解决此内存泄漏...我什至在最后释放它,如图片所示,但它仍然存在。在 if 语句几乎 10-15 条件下,它像给定的代码一样使用......但最后我发布了它。 LoginResponse *res
我为不同的日子编写了以下代餐代码,但我每天都吃同样的餐。我想隔天吃“肉”和“素食”食物。 my dataframe is as follows: id name
这会创建一个点列表,sympy solve() 方法应该返回 x 的值。相反,它返回另一个方程式,我不确定为什么。 ogrid() 和 ravel() 正在绘图中创建一个点列表,这是在 Matplot
只是好奇它是否使用高斯消去法或其他等效方法? 最佳答案 来自numpy docs : solve is a wrapper for the LAPACK routines dgesv and zges
首先, solve_poly_system( seq, *gens, **args), 有人确切知道solve_poly_system的参数是什么意思吗? 我有系统, rd = λk ua = λk
我正在尝试使用 sympy 的 solve 命令求解方程,但我的输出是一个空列表 [ ]。我认为这可能发生的唯一原因是没有解决方案,但我怀疑这就是原因。任何人都知道为什么我没有得到答案?谢谢! fro
我是一名优秀的程序员,十分优秀!