内部函数改变外部函数的变量值


def swap(i,r,c,mat):
for j in range(i+1,c):
if(abs(mat[j][j])>0):
mat[[j,i]] = mat[[i,j]]
break
return mat

def upper_triMat(matA,r,c):
np.set_printoptions(precision=4)
# forward elimination
for i in range(0,c-1):
if matA[i][i] == 0:
matA = swap(i,r,c,matA)

for j in range(i+1,r):
multiplier = matA[j][i]/matA[i][i]
for k in range(0,c):
matA[j][k] = matA[j][k] - multiplier*matA[i][k]

return matA

def dolittle(A):

A = np.array(A)
r,c = np.shape(A)
print(A)
U = upper_triMat(A,r,c) # Here the value of A is changed U. 
print(A)
l = np.eye(r,c)
for i in range(0,r-1):
for j in range(i+1,r):
sum = 0
for k in range(0,r):
if i != k:
sum = sum + U[k][i]*l[j][k]
l[j][i] = (A[j][i]-sum)/U[i][i]

return l,U

A = [[3,-0.1,-0.2],
[0.1,7,-0.3],
[0.3,-0.2,10]]
dolittle(A)

当我调用upper_triMat函数时A";dolittle函数的变化。为什么AAupper_triMat函数将其分配给U。但是A也得到了U的值。使用Jupyter笔记本。我正在做LU分解

upper_triMat更改其参数matA。由于matA是对a的引用,它正在被修改。也许你可以这样解决

U = upper_triMat(A.copy(),r,c) # pass a copy of the list instead of the reference of the original one.

最新更新