如何将求解函数的结果更新为原始 L 和 U 矩阵?
How to update the results from a solve function to the original L and U matrices?
我可以找到要求解的每个方程,但我似乎无法更新原始矩阵中的每个计算结果。
我尝试在矩阵中进行项目集,用求解函数的实际结果替换 u 变量。但随后出现以下错误:
TypeError: 无法将序列乘以 'Symbol'
类型的非整数
不知道还能做什么!
from sympy import *
import numpy as np
#input matrix
a = np.array([[1,3,5],\
[2,4,7],\
[1,1,0]])
d = len(a)
d1 = d-1
d2 = (d1*(d1+1))/2
d3 = (d*(d+1))/2
symbols_dict = dict(('L%d'%k, symbols('L%d'%k)) for k in range(d2))
locals().update(symbols_dict)
symbols_dict = dict(('U%d'%k, symbols('U%d'%k)) for k in range(d3))
locals().update(symbols_dict)
# L decomposition
b = np.array([[1,0,0],\
[L0,1,0],\
[L1,L2,1]])
# U decomposition
c = np.array([[U0,U1,U2],\
[0,U3,U4],\
[0,0,U5]])
t=[[[]for i in range(d)]for j in range(d)]
s=[[[]for i in range(d)]for j in range(d)]
for j in range(d):
for i in range(d):
m=0
for k in range(d):
m = m+(b[j,k]*c[k,i])
t[j][i] = m
s[j][i]= solve(t[j][i]-a[j,i])
c.itemset((j,i),s[j][i])
它应该给我求解的每个方程的数值结果。
修改后的代码如下:
L0,L1,L2 = symbols('L0 L1 L2')
U0,U1,U2,U3,U4,U5 = symbols('U0 U1 U2 U3 U4 U5')
.
.
.
for j in range(d):
for i in range(d):
m=0
for k in range(d):
m = m+(b[j,k]*c[k,i])
s= solve(m-a[j,i])
if j>i:
b[j,i]=s
else:
c[j,i]=s
我可以找到要求解的每个方程,但我似乎无法更新原始矩阵中的每个计算结果。
我尝试在矩阵中进行项目集,用求解函数的实际结果替换 u 变量。但随后出现以下错误: TypeError: 无法将序列乘以 'Symbol'
类型的非整数不知道还能做什么!
from sympy import *
import numpy as np
#input matrix
a = np.array([[1,3,5],\
[2,4,7],\
[1,1,0]])
d = len(a)
d1 = d-1
d2 = (d1*(d1+1))/2
d3 = (d*(d+1))/2
symbols_dict = dict(('L%d'%k, symbols('L%d'%k)) for k in range(d2))
locals().update(symbols_dict)
symbols_dict = dict(('U%d'%k, symbols('U%d'%k)) for k in range(d3))
locals().update(symbols_dict)
# L decomposition
b = np.array([[1,0,0],\
[L0,1,0],\
[L1,L2,1]])
# U decomposition
c = np.array([[U0,U1,U2],\
[0,U3,U4],\
[0,0,U5]])
t=[[[]for i in range(d)]for j in range(d)]
s=[[[]for i in range(d)]for j in range(d)]
for j in range(d):
for i in range(d):
m=0
for k in range(d):
m = m+(b[j,k]*c[k,i])
t[j][i] = m
s[j][i]= solve(t[j][i]-a[j,i])
c.itemset((j,i),s[j][i])
它应该给我求解的每个方程的数值结果。
修改后的代码如下:
L0,L1,L2 = symbols('L0 L1 L2')
U0,U1,U2,U3,U4,U5 = symbols('U0 U1 U2 U3 U4 U5')
.
.
.
for j in range(d):
for i in range(d):
m=0
for k in range(d):
m = m+(b[j,k]*c[k,i])
s= solve(m-a[j,i])
if j>i:
b[j,i]=s
else:
c[j,i]=s