【问题标题】:Inputting values into a matrix将值输入矩阵
【发布时间】:2020-04-08 15:04:09
【问题描述】:

我正在尝试将值替换为我的矩阵(使用这些命令 J.subs({x:0.1, y: 0.1, z: -0.1}) f.subs({x:0.1, y: 0.1, z: -0.1}) ) 但它不起作用。我该如何解决这个问题或解决这个问题,因为这些值没有被替换到矩阵内的我的方程中?

import sympy as sp
# Create Symbols
x = sp.Symbol('x')
y = sp.Symbol('y')
z = sp.Symbol('z')

# Input Equations
eq1 = 3*x - sp.cos(y*z) - 1/2
eq2 = x**2 -81*(y+0.1)**2 + sp.sin(z) + 1.06
eq3 = sp.exp(-x*y) + 20*z + (10*sp.pi - 3)/3

# Create a blank matrix that works with symbols
J = sp.Matrix([[0,0,0],[0,0,0],[0,0,0]])
# Create the function matrix
f = sp.Matrix([[eq1],[eq2],[eq3]])


# Create the Jacobian Matrix
J[0,0] = sp.diff(eq1,x)
J[1,0] = sp.diff(eq1,y)
J[2,0] = sp.diff(eq1,z)
J[0,1] = sp.diff(eq2,x)
J[1,1] = sp.diff(eq2,y)
J[2,1] = sp.diff(eq2,z)
J[0,2] = sp.diff(eq3,x)
J[1,2] = sp.diff(eq3,y)
J[2,2] = sp.diff(eq3,z)

# Create the inital guess matrix
p = sp.Array([[0.1], [0.1], [-0.1]])

# Substitute the values

J.subs({x:0.1, y: 0.1, z: -0.1})
f.subs({x:0.1, y: 0.1, z: -0.1})



print(J)

# Create the loop for 5 iterations

# Intialize counter
i = 0

# THe loop itself
#for i in range(0,4):
#    p = p - A*f
#    i += 1
#    A.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])
#    f.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])

#print(p)

【问题讨论】:

  • subs 不会就地运行。 “它不起作用”不是一个好问题的一部分。这是失败的第三个问题。

标签: python arrays matrix sympy


【解决方案1】:

由于subs 在替换完成后返回一个值,因此您必须“捕捉”该更新后的值:

for i in range(0,4):
    p = p - A*f
    A = A.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])
    f = f.subs([(x, p[0,0]), (y, p[1,0]), (z, p[2,0])])

(并且 i 由循环控制,因此您无需更新 i。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-11
    • 2016-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多