python - 矩阵的 Doolittle LU 分解
问题描述
我正在尝试使用 python 实现一个原始的(不导入库,如 scipy 或 numpy)用于方阵的 Doolittle LU 分解。到目前为止,这是我的代码。
def luDecomposition(mat, n):
lower = [[0 for x in range(n)]
for y in range(n)]
upper = [[0 for x in range(n)]
for y in range(n)]
# Decomposing matrix into Upper
# and Lower triangular matrix
for i in range(n):
# Upper Triangular
for k in range(i, n):
# Summation of L(i, j) * U(j, k)
soma = 0
for j in range(i):
soma += (lower[i][j] * upper[j][k])
# Evaluating U(i, k)
upper[i][k] = mat[i][k] - soma
# Lower Triangular
for k in range(i, n):
if (i == k):
lower[i][i] = 1 # Diagonal as 1
else:
# Summation of L(k, j) * U(j, i)
soma = 0
for j in range(i):
soma += (lower[k][j] * upper[j][i])
# Evaluating L(k, i)
lower[k][i] = int((mat[k][i] - soma) /
upper[i][i])
# setw is for displaying nicely
print(" L \t\t U ")
# Displaying the result :
for i in range(n):
# Lower
for j in range(n):
print(lower[i][j], end="\t")
print("", end="\t")
# Upper
for j in range(n):
print(upper[i][j], end="\t")
print("")
# Driver code
mat = [[4, 2, -1, 1],
[8, 4, 2, -2],
[1, 4, 2, -2],
[2, 1, -2, 6]]
luDecomposition(mat, 4)
但是,我收到以下错误:
lower[k][i] = int((mat[k][i] - soma) / ZeroDivisionError : 除以零。
直到现在我都无法解决这个问题。我的代码有任何理论上的错误吗?
解决方案
if (upper[i][i]!=0):
lower[k][i] = (mat[k][i] - soma) /(upper[i][i])
推荐阅读
- python - 如何使用 wordnet 中的关系查找同义词
- ruby-on-rails - 无法阻止浏览器缓存页面
- php - 如何使用 PHP 和 MySQL 从多个选择列表中将数据插入数据库
- c# - 如何在 botbuilder-v3 上的特定条件下从 QnAMakerDialog(FAQ 类型聊天机器人)调用 formflow 对话框或普通对话框
- javascript - 即使在水平溢出之后也使选项卡在滚动时处于活动状态
- python - 如何在多列标签上获得第一个非其他
- android - 请求休息服务器的 Kotlin 扩展功能
- php - 如何在 Laravel 中将嵌套关系数组转换为单个数组
- javascript - 如何从生成的代码中删除 highlightBlock 字符串
- r - 如何按两个字段分组并按日期计算每种类型的数据?